Penso che l'argomento sia ben scelto. È "bello" scrivere una riga di Perl che fa diecimila cose tutte in una volta, ma poi fa schifo quando devi rivederlo.
Su una nota diversa, intelligente o no, il codice deve essere documentato. Esiste una discrepanza intrinseca di impedenza tra i linguaggi di programmazione accettati dall'industria e i concetti di alto livello a cui noi come esseri umani siamo abituati nel nostro pensiero. Il codice auto-documentante non è semplicemente realizzabile - fino a quando non diventa linguaggio naturale, cioè. Anche il codice Prolog deve essere documentato, poiché, per quanto possa essere di alto livello, è ancora piuttosto formale.
Il codice imperativo a grana fine serve per implementare piani a grana grossa, che devono essere documentati. Non voglio leggere tutte le 50 righe del metodo quando verrà eseguito un rapido commento sulla roadmap a 3 righe.
Modifica successiva: un esempio più eloquente è quello che trascende i computer. Un libro può essere scritto molto bene, ma spesso vogliamo elaborarlo a diversi livelli di astrazione. Spesso, farà un riassunto del libro, ed è quello che i commenti possono offrire al codice. Ovviamente un codice ben astratto può fare molto per l'autodocumentazione, ma non può darti tutti i livelli di astrazione.
E i commenti possono anche agire come sidenotes in un libro, quando dobbiamo spiegare il processo di ragionamento alla base di un'affermazione nel testo principale senza far deragliare.
In questo contesto, trovo che la mia precedente dichiarazione relativa al linguaggio naturale che trascende la necessità di commenti sia errata. Anche il linguaggio naturale, come in un libro, può prestarsi alla documentazione, per spiegare in modo scarso l'astrazione incorporata nel testo o per fornire deviazioni senza far deragliare il testo principale. Con la nota che un codice ben astratto potrebbe già aver fatto molto per essere auto-documentante.
Ultimo, ma non meno importante, i commenti possono aiutare il programmatore a mantenere un alto livello di astrazione. Spesso mi rendo conto che due commenti consecutivi che ho inserito in un elenco di passaggi non parlano allo stesso livello di astrazione, il che merita immediatamente uno sguardo critico a ciò che sto facendo con quel codice.
Alcuni problemi trascendono la codifica e influiscono sulla codifica proprio come altre attività. I commenti possono fornire quell'aiuto per chiarire la logica alla base e le sfaccettature del nostro codice, e trovo loro un compagno piacevole che parla un linguaggio più morbido a beneficio della persona per un cambiamento.