Penso che l'argomento sia scelto bene. È "bello" scrivere una riga di Perl che fa diecimila cose tutte in una volta, ma poi fa schifo quando devi rivisitarla.
Su una nota diversa, intelligente o meno, il codice deve essere documentato. Esiste un disallineamento di impedenza intrinseca tra i linguaggi di programmazione accettati dal settore e i concetti di alto livello a cui noi esseri umani siamo abituati nel nostro modo di pensare. Il codice di auto-documentazione non è semplicemente realizzabile - finché non diventa un linguaggio naturale, cioè. Anche il codice Prolog deve essere documentato, poiché, per quanto alto possa essere, è ancora piuttosto formale.
Il codice imperativo a grana fine serve a implementare piani a grana grossa, che devono essere documentati. Non voglio dover leggere tutte le 50 righe del metodo quando farà un rapido commento della roadmap a 3 linee.
Modifica successiva:
Un esempio più eloquente è quello che trascende i computer. Un libro può essere scritto molto bene, ma spesso lo vogliamo elaborare a diversi livelli di astrazione. Spesso, un riassunto del libro andrà bene, ed è questo che i commenti possono offrire al codice. Ovviamente il codice ben astratto può fare molto per l'autodocumentazione, ma non può darti tutti i livelli di astrazione.
E i commenti possono anche comportarsi come i sidenotes in un libro, quando abbiamo bisogno di spiegare il processo di ragionamento dietro un reclamo nel testo principale senza deragliare.
Con questo contesto, trovo che la mia precedente affermazione che si riferisce al linguaggio naturale che trascende la necessità di commenti non è corretta. Anche il linguaggio naturale, come in un libro, può prestarsi alla documentazione, spiegare in modo spoglio l'astrazione incorporata nel testo o fornire deviazioni senza far deragliare il testo principale. Con la nota che il codice ben astratto potrebbe già aver fatto molta strada per essere autodocumentato.
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 incluso in una lista di passaggi non parlano allo stesso livello di astrazione, che immediatamente garantisce uno sguardo critico su quello che sto facendo con quel codice.
Alcuni problemi trascendono la codifica e influenzano la codifica, proprio come altre attività. I commenti possono fornire quell'aiuto per chiarire la logica alla base, e le sfaccettature del nostro codice, e li trovo un compagno piacevole che parla un linguaggio più morbido a beneficio della persona per un cambiamento.