Di recente ho avuto un colloquio di lavoro in cui mi hanno concesso un'ora per scrivere del vero codice. Non era un importo enorme, probabilmente meno di 100 righe. Dopo circa 45 minuti, l'ho compilato, eseguito e fatto funzionare. Potrei aver trascorso 5-10 minuti a elaborare errori di compilazione e un paio di bug minori, ma nel complesso è stato molto fluido. (Per inciso, ho ricevuto un'offerta da loro.)
Tuttavia, ciò che mi ha lasciato perplesso è che dopo aver consegnato il codice completo, l'intervistatore mi ha detto che l'unica cosa che ho fatto di sbagliato è stata "non compilare mentre procedo". Gli ho chiesto qual è la differenza, e lui ha detto "cosa avresti fatto se avessi finito il codice e non fosse stato compilato in tempo".
Secondo me questo è un argomento non valido, perché "ottenere la compilazione del codice" per una determinata lunghezza di codice comporta generalmente la correzione di un numero costante di errori di compilazione e richiede un periodo di tempo abbastanza costante, che dovrebbe essere lo stesso se lo si fa dopo di te termina di scrivere il codice o se lo interfogli con il tempo di codifica. Semmai, interrompere la codifica per cercare punti e virgola mancanti sarebbe probabilmente dannoso per la tua efficienza. Tranne in circostanze estreme quando sto sperimentando oscurità attorno a casi limite su cose come funzioni virtuali in classi derivate, ecc. Sembra ragionevole aspettarsi che il codice scritto da uno sviluppatore esperto si compili, meno l'errore di battitura occasionale e persino in caso contrario,
In un altro incidente simile, durante un'intervista mi è stata data una base di codice incompleta e mi è stato chiesto di finirlo e apportare le modifiche necessarie per farlo funzionare. Ho iniziato leggendo il codice esistente e poi dopo alcuni minuti (anche prima che avessi finito di guardare il codice), l'intervistatore mi ha detto che era abbastanza. Quando gli ho chiesto cosa avrebbe fatto (ovvero "cosa ho fatto di sbagliato"), mi ha detto che avrebbe iniziato ottenendo immediatamente la compilazione del codice.
Perché è anche rilevante? Secondo me e nella mia esperienza, la compilazione di un pezzo di codice è essenzialmente casuale, implicando cose come la mancanza di punti e virgola e ha poco a che fare con la correttezza del programma sottostante. (Per me, concentrarsi sulla compilazione è come far scorrere un articolo attraverso un controllo ortografico senza correzione di bozze per controllare la grammatica.)
Se mi dai un pezzo di codice incompleto, la prima cosa che farò sarà leggerlo. Non proverò nemmeno a compilarlo finché non saprò cosa sta facendo il codice e so che l'algoritmo è corretto.
Ad ogni modo, questi sono stati solo un paio di episodi recenti, ma in generale ho sentito molti sviluppatori parlare della compilazione del loro codice mentre procedono, eppure nessuno è stato in grado di dirmi i vantaggi di farlo. Comprendo i vantaggi del test del codice mentre procedi, ma perché compilare?
Quindi la mia domanda è questa: c'è qualcosa che mi sono perso? C'è davvero un vantaggio nella compilazione mentre procedi? O è una sorta di mito propagato dalla comunità del software che devi compilare il tuo codice frequentemente?