(1) I nomi di variabili e funzioni auto-descrittivi aiutano a livello di funzione, ovvero scrivendo:
data_with_chars_cleaned = clean_character_data(...)
rende superfluo aggiungere un commento # returns ...
. Mantenendo le funzioni di piccole dimensioni è più semplice trovare un nome descrittivo.
(2) Buone astrazioni non rendono necessario mantenere tutte le minuzie nella tua testa. Tutto ciò che una funzione "dovrebbe" essere allo stesso livello di astrazione, ad es. qui ogni istruzione nella funzione è allo stesso livello di astrazione:
def build_model(data):
cleaned_data = clean_data(data)
model = create_new_model()
trained_model = train_model(model, cleaned_data)
Quando edificio un modello non avrei bisogno di sapere i dettagli di come i dati vengono puliti , come il modello è stato creato, o come il modello è stato addestrato.
Confronta quanto sopra per:
def build_model(data):
# clean numeric data
cleaned_data = CleanDataConatiner()
for item in data:
if item not in NaN, None, -Inf:
cleaned_data.add(item)
# clean character data
...
model = create_new_model()
trained_model = train_model(model, cleaned_data)
Si dice che il tuo cervello può tenere solo 4-7 elementi nella memoria di lavoro in qualsiasi momento, quindi mantenere le funzioni a un livello di astrazione che ti permette di avere solo 4-7 loop / rami / chiamate per funzione renderà è più facile da digerire.
Ci sono anche strumenti grafici che costruiranno per es. chiama i grafici per te in base alla tua lingua. A seconda della lingua, puoi anche scrivere un codice che riporti le chiamate tu stesso. Vedo entrambi questi strumenti come più strumenti di debugging che come strumenti di visualizzazione del flusso del programma: imho, la visualizzazione del flusso di dati è solitamente più utile quando si cerca di capire un sistema.