Come il codice, uno script di build viene eseguito dal computer. I computer sono eccezionalmente bravi a seguire una serie di istruzioni. Infatti, (al di fuori del codice auto-modificante), i computer eseguiranno la stessa sequenza di istruzioni esattamente allo stesso modo, dato lo stesso input. Questo offre un livello di coerenza che, beh, solo un computer può eguagliare.
Al contrario, noi sacchi di carne pieni d'acqua sono semplicemente spregevoli quando si tratta di seguire i passi. Quel fastidioso cervello analitico ha la tendenza a mettere in discussione tutto ciò che incontra. "Oh ... non ho bisogno di farlo", o "Devo davvero usare questa bandiera? Eh ... Lo ignorerò." Inoltre, abbiamo la tendenza ad essere compiacenti. Una volta che abbiamo fatto qualcosa alcune volte, iniziamo a credere che conosciamo le istruzioni e non dobbiamo guardare il foglio di istruzioni.
Da "The Pragmatic Programmer":
In addition, we want to ensure consistency and repeatability on the project. Manual procedures leave consistency up to change; repeatability isn't guaranteed, especially if aspects of the procedure are open to interpretation by different people.
Inoltre, HILARIOUSLY è lento nelle istruzioni di esecuzione (rispetto a un computer). In un progetto di grandi dimensioni, con centinaia di file e configurazioni, sarebbero necessari anni per eseguire manualmente tutti i passaggi in un processo di compilazione.
Ti darò un esempio del mondo reale. Stavo lavorando su software embedded, in cui la maggior parte del codice era condivisa su alcune piattaforme hardware diverse. Ogni piattaforma aveva hardware diverso, ma la maggior parte del software era la stessa. Ma c'erano piccoli pezzi specifici per ogni hardware. Idealmente, i pezzi comuni sarebbero collocati in una libreria e collegati in ogni versione. Tuttavia, i pezzi comuni non possono essere compilati in una libreria condivisa. Doveva essere compilato con ogni diversa configurazione.
In un primo momento, ho compilato manualmente ciascuna configurazione. Ci sono voluti solo pochi secondi per passare da una configurazione all'altra e non era un gran problema. Verso la fine del progetto, è stato scoperto un difetto critico nella parte condivisa del codice, in cui un dispositivo essenzialmente avrebbe occupato il bus di comunicazione. Questo è stato BAD! Veramente male. Ho trovato il bug nel codice, l'ho risolto e ricompilato ogni versione. Tranne uno. Durante il processo di costruzione, mi sono distratto e ne ho dimenticato uno. I binari sono stati rilasciati, la macchina è stata costruita e il giorno dopo ricevo una telefonata che dice che la macchina ha smesso di rispondere. Lo controllo e ho scoperto che un dispositivo aveva bloccato il bus. "Ma ho corretto quell'insetto!".
Potrei averlo risolto, ma non è mai stato trovato su quella scheda. Perché? Perché non avevo un processo di compilazione automatizzato che costruisse ogni singola versione con 1 clic.