Uso spesso il debugger, perché lavoro su un sistema di grandi dimensioni e quindi faccio schifo.
http://steve-yegge.blogspot.com/2007/06/rich-programmer-food.html
Non importa quanto sia breve e letto frequentemente il tuo codice, ci sarà sempre la possibilità che abbia dei bug. http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-nearly.html
Errare è umano e non si può mai dimostrare che un programma sia corretto, quindi perché non usare strumenti come debugger / test automatizzati per aiutarci in questa difficile attività?
Se il codice è abbastanza corto, eseguiranno test semplici. Inoltre, se è breve e conosci la natura del bug, la lettura del codice può essere sufficiente. Tuttavia, una volta che la base di codice è ampia, coinvolge diverse lingue mescolate insieme, più 3 livelli, allora devi semplicemente avere una buona copertura del test su molti livelli più un ottimo debugger - altrimenti perderai molto tempo.
Quindi, quando non ho bisogno di un debugger?
Non sono il programmatore più intelligente, né il più esperto, ma comunque, a volte non ho bisogno di usare il debugger. Questo è quando:
- Il codice è mio o ben scritto AND
- È scritto in una lingua leggibile E
- Il progetto complessivo è di piccole dimensioni.
Quando faccio molto affidamento su un debugger?
- Risposta breve: spesso .
- Quando un'applicazione si arresta in modo anomalo. Soprattutto quando viene distribuito. Avere VS2010 installato su quel computer può fare la differenza tra "Errore sconosciuto" e
FileNotFoundException
.
- Quando una libreria di terze parti si arresta in modo anomalo o si comporta in modo anomalo.
- Quando il codice è scritto male. Soprattutto se lo stesso file è stato toccato da 10 persone diverse negli ultimi 10 anni, 7 dei quali non sono più con l'azienda.
- Quando il progetto è grande
- Quando il codice è piuttosto monolitico.
- Quando sono coinvolti più livelli (GUI, SQL, BL).
Si noti che "debugger" può fare riferimento a più di uno strumento. Uso anche il debugger di Visual Studio, il debugger SQL (principalmente per i proc memorizzati) e il profiler SQL (per capire quale SP viene chiamato). Avrei bisogno di strumenti di questo calibro che stavo scrivendo un veloce script Python di sysadmin? No. Se avessi creato il mio piccolo strumento basato sulla GUI? Dipende. Se è .Net WinForms - probabilmente no. Se è WPF - sì.
Cosa definisce comunque un programmatore "reale"? Uno che è veloce? esperto? È bravo negli algoritmi? Scrive una buona documentazione? Proprio quando si laurea esattamente in questo nuovo titolo? Quando si attraversa la linea magica?
Direi che un programmatore che non si è sporcato le mani in uno sforzo di oltre 100 anni uomo non ha avuto la possibilità di essere umiliato dalla complessità e dai propri limiti (oltre che frustrato dalla qualità del codice).
Personalmente cerco di utilizzare il miglior debugger disponibile per me e tendo a usarlo spesso. Se un'attività è abbastanza semplice e non richiede un debugger, allora non la utilizzo. Non ci vuole troppo tempo per capire se ne ho bisogno o no.
...
Ora, in teoria, ho potuto leggere la base di codice per così tanto tempo, che avrei capito. Tuttavia, l'approccio pratico funziona meglio, inoltre spesso voglio riscrivere quello stupido codice che sto vedendo. Purtroppo mi occorrerebbero più di 10 anni per ripulire la base di codice in cui mi trovo. Quindi, usare il debugger è un ovvio primo passo. Solo quando scopro quale di 5 milioni di righe di codice sta funzionando, eseguo la scansione del file su e giù per cercare di capire cosa sta facendo quella classe.