I commenti dovrebbero dire PERCHÉ il programma sta facendo quello che sta facendo? (opinione su un motto dell'inventore di Forth) [duplicato]

22

Il spesso provocatorio Chuck Moore (inventore del Avanti lingua) ha dato il seguente consiglio [1] :

Use comments sparingly! (I bet that's welcome.) Remember that program you looked through - the one with all the comments? How helpful were all those comments? How soon did you quit reading them? Programs are self-documenting, even assembler programs, with a modicum of help from mnemonics. It does no good to say:

LA B . Load A with B

In fact it does positive bad: if I see comments like that I'll quit reading them - and miss the helpful ones. What comments should say is what the program is doing. I have to figure out how it's doing it from the instructions anyway. A comment like this is welcome:

COMMENT SEARCH FOR DAMAGED SHIPMENTS

I commenti dovrebbero dire perché il programma sta facendo quello che sta facendo?

Oltre alle risposte di seguito, questi due post Programmatori forniscono informazioni aggiuntive:

  1. Guida per principianti per scrivere commenti
  2. Una risposta a Perché un'azienda dovrebbe sviluppare un'atmosfera che scoraggi i commenti del codice?

Riferimenti

1. Programmazione di un linguaggio orientato ai problemi , fine della sezione 2.4. Charles H. Moore. Scritto ~ giugno 1970.

    
posta Assad Ebrahim 31.10.2012 - 22:56
fonte

8 risposte

54

Should comments say WHY the program is doing what it is doing?

Sì inequivocabilmente. Non è necessario che ci siano molti commenti, bada bene, ma se li hai, PERCHÉ è l'unica domanda che vale la pena di rispondere al di fuori di alcuni bizzarri scenari marginali. Il ragionamento è semplice. Se leggo il tuo codice, buono o cattivo, posso vedere cosa sta facendo il programma. Non ho idea di perché . COME Raramente ha qualcosa che non so. PERCHÉ è spesso basato su cronologia, strane porzioni del dominio problematico o hack relativi a dipendenze di terze parti.

    
risposta data 31.10.2012 - 23:07
fonte
16

Dipende da cosa intendi per "perché".

Se intendi informazioni come requisiti di alto livello, storie degli utenti, ecc., allora no, i commenti non sono un buon posto per spiegare "perché". Un posto molto migliore sarebbero i tuoi messaggi di commit / push, che idealmente dovrebbero puntare a spiegazioni più complete nei ticket nel tuo tracker di problemi. E ovviamente puoi sempre avere un commento nel codice che punta al ticket.

Se, d'altro canto, intendi spiegazioni molto brevi di decisioni piccole ma non ovvie che hai preso nel tuo codice, allora tali commenti sarebbero appropriati. Ma è più o meno lo stesso di Chuck Moore che significa "COSA sta facendo il programma" (il "perché" è implicito).

Domande correlate:

risposta data 31.10.2012 - 23:00
fonte
5

Sono un strong sostenitore del Principio di Responsabilità Unica che si presta bene ai nomi dei metodi che rivelano CHE COSA stanno facendo. PERCHÉ è un po 'più duro. Se l'implementazione è abbastanza complicata al punto che i commenti sono necessari per giustificare ciò che sta accadendo, allora sarà difficile contestualizzare, nel mezzo delle chiamate di esecuzione successive, perché un dato pezzo di codice è in esecuzione. La mia preferenza è lasciare il WHY alle storie degli utenti e mantenere il codice sufficientemente dettagliato da poter effettivamente commentare se stesso.

    
risposta data 01.11.2012 - 03:26
fonte
4

Perché può essere una domanda molto potente a cui rispondere.

Se hai problemi a risponderti da solo, probabilmente non stai pensando correttamente alla progettazione del codice e potresti dover riconsiderare la motivazione per la tua classe / funzione / qualsiasi cosa. Se puoi rispondere alla domanda perché in modo chiaro e conciso, anche la tua classe sarà probabilmente chiara e concisa.

    
risposta data 01.11.2012 - 04:27
fonte
3

L'essenza del consiglio è di scrivere codice sia per il compilatore che per le persone, e per non spiegare le cose che sono espresse dal codice.

La ridondanza tra codice e commenti crea problemi. Quando i due non sono d'accordo, probabilmente entrambi hanno torto. Se devi scriverlo due volte e leggerlo due volte, probabilmente qualcuno lo ha pagato due volte.

Tra le risposte, abbiamo voti bassi per spiegare come e i voti per spiegare cosa e perché. Sono d'accordo. Dove i commenti che mettono in relazione parti del codice, o forse spiegano le motivazioni che possono essere utilizzate per creare classi minime, coerenti e coerenti, sarebbero un vantaggio. Il chi e quando del codice possono essere trovati nel sistema di controllo del codice sorgente. I commenti di controllo del controllo del codice sorgente ci forniscono una comprensione e una correlazione dell'evoluzione dei sistemi verso i suoi obiettivi. Collegato con un bug tracker puoi rispondere a molte domande sul perché.

L'ambito e l'applicabilità sono buoni argomenti per i commenti. Se separiamo le preoccupazioni nel modo in cui dovremmo, dovremmo usare nomi e commenti per guidare i futuri manutentori. Programmazione per contratto, utilizzo di asserzioni e unit test sono tutti nel mix di chiarire il significato e il comportamento atteso del nostro software.

    
risposta data 01.11.2012 - 03:31
fonte
3

Il codice stesso è in parte per computer, in parte per gli umani (i nomi di metodi e variabili). Ma i commenti sono esclusivamente per gli esseri umani, sia per l'altra persona che per te stesso in futuro (chi sarà una persona leggermente diversa da te in questo momento a causa delle proprietà della nostra memoria). Qualsiasi messaggio per gli umani è prezioso se consiste in informazioni utili. Se spieghi PERCHÉ stai usando una lista ordinata e non l'hash, allora è meno probabile che ti affretti a sostituire il codice inefficace due anni dopo solo perché vedi immediatamente questa opportunità

    
risposta data 01.11.2012 - 05:58
fonte
3

I commenti dovrebbero spiegare aspetti del codice che non saranno immediatamente evidenti a un programmatore che abbia familiarità con la lingua. Le strutture fornite dalla lingua dovrebbero quindi essere utilizzate per ridurre al minimo il numero di commenti che rimangono necessari.

    
risposta data 01.11.2012 - 12:29
fonte
2

Sarò fiammeggiato per questo, ma nella mia esperienza, la maggior parte delle volte la risposta è NO .

Spunti di riflessione:

  • Stai scrivendo un tema. Scrivi un paragrafo di testo. Scriveresti quindi un altro paragrafo che spiega di cosa tratta il primo paragrafo? Improbabile. La programmazione è molto diversa dalla scrittura di saggi o romanzi? Alcuni scrittori (programmatori) sono bravi e altri cattivi. Gli autori di libri scrivono per le persone, quando i programmatori scrivono per persone e macchine. Direi che il codice è scritto sia per le persone che per le macchine, quindi la maggior parte delle volte non dovrebbe esserci bisogno di commentare (descrivere) cosa fa.

  • I commenti che scrivi sono sempre utili e comprensibili, vero? Che ne dici di commenti scritti dai tuoi colleghi? Cosa pensi che pensano dei commenti che scrivi? Odio alcuni dei commenti dei miei colleghi. Scommetto che anche loro non sono affezionati al mio. Bene, ho smesso di commentare tutto.

  • Potresti non refactoring (rinominare, ristrutturare, riutilizzare e qualsiasi altra cosa che devi fare) il tuo codice in un modo tale che non abbia bisogno di commenti? Il più delle volte puoi farlo. In caso contrario, inserisci alcuni frammenti di codice nei commenti o nella tua risposta: sarebbe interessante per la comunità cercare di ridefinirlo in modo che non ci fosse bisogno di ulteriori commenti.

  • Ti piace il mantenimento di cose inutili? Io non. La maggior parte dei commenti che ho visto in API non pubbliche non erano necessari.

  • Spesso le persone commentano qualcosa che è rotto. È rotto. La classe è un disastro, fa dieci cose diverse. Lo commenterò e mi farà sentire meno colpevole. Ogni volta che qualcosa si rompe, le persone guarderanno il mio commento e questo farà sentire meglio. No, non lo farà. Il codice errato deve essere corretto su un punto, non commentato. Se non lo fai subito, più tardi ti perseguiterà o i tuoi colleghi. Indovina cosa penseranno di te?

Sono stato un ingegnere del software per alcuni anni e sono passato da "commentare tutto" a "nessun commento". Detto questo, vorrei:

  • Commenta API pubbliche o qualsiasi parte di codice che verrà fornita a una terza parte, altrimenti probabilmente ti invieranno spam con reclami e richieste di supporto.
  • Espressioni regolari.
  • Qualcosa che è davvero complesso. Con tutti i framework là fuori, difficilmente riesco a trovare qualcosa di veramente complesso.

Una delle risposte qui afferma che senza commenti è facile vedere cosa sta facendo il programma, al contrario del perché lo sta facendo. Perché qualcosa viene fatto non appartiene al codice. Dovrebbe essere in un documento separato, SharePoint, blog, tovagliolo, ma non nel codice.

    
risposta data 01.11.2012 - 23:32
fonte