La mia regola empirica è che quando devo fare qualcosa per la terza volta, è tempo di scrivere una piccola sceneggiatura per automatizzarla o ripensare il mio approccio.
A questo punto non sto realizzando uno "strumento" completo, solo un piccolo script (di solito bash o python; anche perl funzionerebbe, o anche PHP) che automatizza ciò che ho fatto manualmente prima. È fondamentalmente un'applicazione del principio DRY (o del principio Single Source Of Truth, che è essenzialmente la stessa cosa) - se devi cambiare due file sorgente in tandem, ci deve essere una verità comune che condividono, e che la verità deve essere presa in considerazione e archiviata in un posto centrale. È fantastico se riesci a risolverlo internamente mediante il refactoring, ma a volte questo non è fattibile, ed è qui che arrivano gli script personalizzati.
Successivamente, lo script può evolversi o meno in uno strumento completo, ma di solito inizio con uno script molto specifico con molte cose codificate.
Odio il lavoro grugnito con passione, ma credo fermamente che sia un segno di design cattivo o errato. Essere pigri è una qualità importante in un programmatore ed è meglio essere il tipo in cui si fa di tutto per evitare il lavoro ripetitivo.
Certo, a volte il saldo è negativo: passi tre ore a riformattare il tuo codice o a scrivere uno script per farti risparmiare un'ora di lavoro ripetitivo; ma di solito, l'equilibrio è positivo, tanto più se si considerano costi che non sono direttamente evidenti: fallimento umano (gli esseri umani sono davvero pessimi nel lavoro ripetitivo), base di codice più piccola, migliore manutenibilità a causa di ridondanza ridotta, migliore autocertificazione, futuro più veloce sviluppo, codice più pulito. Quindi, anche se il saldo appare negativo in questo momento, la base di codice aumenterà ulteriormente e lo strumento che hai scritto per generare moduli Web per tre oggetti dati funzionerà comunque quando avrai trenta oggetti dati. In base alla mia esperienza, il bilancio è generalmente stimato a favore del lavoro grugnito, probabilmente perché i compiti ripetitivi sono più facili da stimare e quindi sottovalutati, mentre il refactoring, l'automazione e l'astrazione sono percepiti come meno prevedibili e più pericolosi, e quindi sopravvalutati. Di solito si scopre che l'automazione non è poi così difficile.
E poi c'è il rischio di farlo troppo tardi: è facile riformattare tre nuove classi di oggetti di dati in forma e scrivere uno script che genera moduli web per loro, e una volta fatto, è facile aggiungere altre 27 classi che lavora anche con la tua sceneggiatura. Ma è quasi impossibile scrivere quello script quando hai raggiunto un punto in cui ci sono 30 classi di oggetti dati, ognuna con moduli web scritti a mano e senza alcuna coerenza tra loro (aka "crescita organica"). Mantenere quelle 30 classi con le loro forme è un incubo di codifica ripetitiva e ricerca sostitutiva semi-manuale, la modifica di aspetti comuni richiede trenta volte il tempo necessario, ma scrivere una sceneggiatura per risolvere il problema, che sarebbe stata una pausa pranzo senza sforzo quando il progetto è iniziato, ora è un terribile progetto di due settimane con la terribile prospettiva di un mese di seguito che consiste nel correggere bug, educare gli utenti e forse anche rinunciare e tornare al vecchia base di codice. Ironia della sorte, scrivere il pasticcio di 30 classi ha richiesto molto più tempo di quanto avrebbe fatto la soluzione pulita, perché avresti potuto usare il comodo script per tutto quel tempo. Nella mia esperienza, l'automazione del lavoro ripetitivo via troppo tardi è uno dei maggiori problemi in progetti software di grandi dimensioni di lunga durata. perché avresti potuto usare la comoda sceneggiatura per tutto quel tempo. Nella mia esperienza, l'automazione del lavoro ripetitivo via troppo tardi è uno dei maggiori problemi in progetti software di grandi dimensioni di lunga durata. perché avresti potuto usare la comoda sceneggiatura per tutto quel tempo. Nella mia esperienza, l'automazione del lavoro ripetitivo via troppo tardi è uno dei maggiori problemi in progetti software di grandi dimensioni di lunga durata.