Recentemente ho avuto un colloquio di lavoro in cui mi hanno dato un'ora per scrivere del codice reale. Non era una quantità enorme, probabilmente meno di 100 linee. Dopo circa 45 minuti, ho compilato, eseguito e ho funzionato. Potrei aver passato 5-10 minuti a elaborare errori di compilazione e un paio di bug minori, ma nel complesso è stato molto semplice. (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 sbagliato era "non compilare mentre procedo". Gli ho chiesto quale sia la differenza, e ha detto "cosa avresti fatto se avessi terminato il codice e non si fosse compilato in tempo".
A mio avviso questo è un argomento non valido, perché "ottenere codice da compilare" per una determinata lunghezza di codice generalmente implica il fissaggio di un numero costante di errori di compilazione e richiede un tempo abbastanza costante, che dovrebbe essere lo stesso sia che tu lo faccia dopo aver finito di scrivere il codice o se lo si interlaccia con il tempo di codifica. Se mai, interrompere la codifica per cercare il punto e virgola mancante sarebbe probabilmente dannoso per la tua efficienza. Tranne che in circostanze estreme quando sto sperimentando oscurità intorno a casi limite su cose come funzioni virtuali in classi derivate, ecc., Sembra ragionevole aspettarsi che il codice scritto da uno sviluppatore esperto compili, meno l'errore di battitura occasionale, e persino se non lo fa, non è come se dovessi riscrivere una parte del codice per correggere l'errore di compilazione.
In un altro episodio simile, in un'intervista mi è stata fornita una base di codice incompleta e ho chiesto di terminarlo e apportare le modifiche necessarie per farlo funzionare. Ho iniziato leggendo il codice esistente e dopo alcuni minuti (anche prima che avessi finito di leggere il codice), l'intervistatore mi ha detto che è abbastanza. Quando gli ho chiesto cosa avrebbe fatto (cioè "cosa ho fatto di sbagliato"), mi ha detto che avrebbe iniziato immediatamente ottenendo il codice da compilare.
Perché è anche rilevante? Secondo la mia opinione e secondo la mia esperienza, la compilazione di una parte di codice è essenzialmente casuale, coinvolge elementi come se mancano i punti e virgola e ha poco a che fare con la correttezza del programma sottostante. (Per me, concentrarsi sulla compilazione è come eseguire un articolo attraverso un controllo ortografico senza correzione di bozze per controllare la grammatica.)
Se mi dai un codice incompleto, la prima cosa che farò sarà leggerlo. Non cercherò nemmeno di compilarlo fino a quando non so cosa sta facendo il codice e so che l'algoritmo è corretto.
Comunque, questi sono stati solo un paio di recenti incidenti, ma in generale ho sentito molti sviluppatori parlare di compilare il loro codice mentre vanno avanti, eppure nessuno è stato in grado di dirmi il beneficio di farlo. Comprendo i vantaggi del test del tuo codice mentre procedi, ma perché compilarlo?
Quindi la mia domanda è questa: c'è qualcosa che mi è sfuggito? C'è davvero un vantaggio nella compilazione mentre vai avanti? O è una sorta di mito propagato dalla comunità del software che devi compilare frequentemente il tuo codice?