Come posso trattare con un membro del team a cui non piace fare commenti in codice?


184

Uno dei membri del mio team evita costantemente di fare commenti nel suo codice.

Il suo codice non è auto-documentante e altri programmatori hanno difficoltà a comprendere il suo codice.

Gli ho chiesto più volte di commentare il suo codice, tuttavia egli fornisce solo scuse o affermazioni che lo farà in seguito. La sua preoccupazione è che l'aggiunta di commenti richiederà troppo tempo e ritarderà i progetti.

Quale argomento posso presentargli per convincerlo a documentare correttamente il suo codice?

In tale nota, sbaglio a concentrarmi sui commenti del codice o è indicativo di un problema più ampio che dovrebbe essere affrontato?


109
Commentare per amor di commenti non migliora il codice. Se il codice è comprensibile (incluso il perché) senza commenti, allora va bene anche commento.
Martin York,

63
Oh sì, e quando la complessità di un pezzo di codice triplica per risolvere una condizione di gara o un deadlock, non commentare quello! Consenti alle persone di risolvere il rompicapo del perché il codice deve essere così com'è e del perché si rompe in modi misteriosi se apportano modifiche sperimentali. Tutti dovrebbero essere un grande maestro di scacchi della concorrenza ...
Kaz,

12
@Kaz Sarcasm (spero) non si traduce bene in testo.
Deworde,

10
@deworde & artjom - sì, questo è sarcasmo. no, non si presenta nel modo più pulito possibile, ma è chiaramente un sarcasmo.

17
seguendo il principio di Dale Carnegie dovresti cercare di capire perché non vuole commentare ... hai detto che non vuole ritardare il progetto ... quindi puoi dirgli che se non commenta gli altri non lo sarebbero in grado di comprendere il codice e che ritarderebbe ulteriormente il progetto .. questo dovrebbe sicuramente aiutare ..
Anirudha,

Risposte:


431

I commenti da soli non rendono il codice migliore, e semplicemente spingendo per "più commenti" è probabile che ti dia poco più che /* increment i by 1 */commenti di stile.

Quindi chiediti perché vuoi quei commenti. "È la migliore pratica" non conta come argomento se non capisci il perché.

Ora, la ragione più eclatante per l'uso dei commenti è che il codice è più facile da capire, e quando le persone si lamentano della mancanza di commenti, sono o pappagalli all'oscuro, o fanno fatica a capire il codice con cui stanno lavorando.

Quindi non lamentarti dei commenti mancanti: lamentati del codice illeggibile. O meglio ancora, non lamentarti, continua a fare domande sul codice. Per tutto ciò che non capisci, chiedi alla persona che l'ha scritto. Dovresti farlo comunque; con codice illeggibile, farai solo altre domande. E se torni a un pezzo di codice più tardi e non sei sicuro di ricordare correttamente cosa fa, fai di nuovo la stessa domanda.

Se i commenti possono risolverlo e il tuo collega ha un cervello funzionante, a un certo punto si renderà conto che commentare il codice è molto più facile che farti fare domande stupide in ogni momento. E se non riesci a formulare domande, allora forse quel codice è già perfettamente leggibile, ed è tu che sei in errore - dopo tutto, non tutto il codice ha bisogno di commenti.

Sul fronte delle abilità delle persone, evitare di sembrare condiscendente o accusare a tutti i costi; sii serio e onesto con le tue domande.


269
+1 per "non lamentarti dei commenti mancanti: lamentati del codice illeggibile".
Md Mahbubur Rahman,

4
Che cosa succede se la risposta a qualsiasi domanda sul codice è sulla falsariga di "Cosa hai fatto per capirlo?"
Saul,

40
+1: Premere per nomi di funzioni leggibili può avere ulteriori vantaggi ... Alla revisione del codice: "Non riesco a capire cosa stia facendo xg_jkhsfkasq". "Oh, sta scaricando il buffer di alimentazione principale, ora posso rilasciare?" "Certo, ma esito ad approvarlo fino a quando non hai rinominato la funzione flush_primary_buffer" "Ah, ma sta anche cancellando la cache principale, quindi quel nome sarebbe fuorviante" "È COSA? Non cancellare quella cache, fermerò il sistema! Mentre stai cambiando quella logica, ti dispiacerebbe rinominare quella funzione? "
Deworde,

18
Sarei preoccupato di dare l'impressione di non essere in grado di leggere il codice. Un manager non tecnico potrebbe semplicemente notare che chiedo costantemente aiuto a "Bob" perché il codice di Bob è troppo avanzato per me. Ciò significherebbe che Bob è uno sviluppatore "avanzato" e non sono pronto a lavorare al suo livello.
Rob P.

5
@Rob P. Vedo la paura, ma se non riesci a leggere il codice e si prevede che manterrai il codice, allora il codice non è ben scritto o non ne conosci abbastanza. Se non sai abbastanza, devi chiedere. Se chiedere rivela che il codice è semplicemente difficile da leggere, premere per risolverlo. Il trucco sarebbe, se stai percorrendo la strada del social engineering, mescolarlo se Bob va alla tua scrivania o vai alla sua, e di essere molto attivo nel indicare le cose. Dopotutto, un manager non tecnico non sarà in grado di cogliere il contenuto della discussione ...
deworde

114

Ho incontrato molti sviluppatori che hanno avuto problemi a scrivere codice autocompattante o commenti utili. Questo tipo di persone spesso manca di sufficiente autodisciplina o esperienza per farlo bene.

Ciò che non funziona mai è "dire loro di aggiungere altri commenti". Ciò non aumenterà né la loro autodisciplina né esperienza. L'IMHO l'unica cosa che potrebbe funzionare è fare frequenti revisioni del codice e sessioni di refactoring. Quando uno sviluppatore ha completato un'attività, consenti a lui / lei di spiegare eventuali parti del codice che non capisci. Rifattorizzare o documentare immediatamente il codice in modo tale che entrambi capirai 6 mesi dopo.

Fallo per alcuni mesi, almeno due volte a settimana. Se sei abbastanza fortunato, gli altri sviluppatori impareranno attraverso queste sessioni in modo da poter ridurre la frequenza di revisione.


5
+1 questo è l'unico modo per implementare effettivamente il cambiamento in un collega che ho trovato, effettivamente sedermi con loro e rivedere / refactment al loro fianco. Se non sei in grado di negare una revisione del codice, questo può essere difficile. A volte, quando sei di medio livello, devi solo sollevare problemi agli anziani e se non ascoltano, ti strizzano il naso fino a quando non sei più anziano e possono porre il veto a tale spazzatura
Jimmy Hoffa,

1
Revisioni di codice e programmazione di coppie sono il modo migliore nella mia esperienza di migliorare lo standard generale degli sviluppatori in un team. Si tratta di condividere conoscenza e abilità all'interno della squadra. Senza di essa stai facendo imparare agli sviluppatori nel modo più duro e supponendo che siano usciti dal college perfetti. La mancanza generale di questa pratica nel settore è probabilmente il motivo per cui ci sono così tanti sviluppatori con oltre 10 anni di esperienza che non sono in grado di scrivere codice leggibile e ben organizzato.
Martin Brown,

27

Sono sorpreso che nessuno abbia ancora menzionato le recensioni dei codici. Fai recensioni di codice! Quando ha un check in di cattiva qualità non dire semplicemente "aggiungi commenti". Poni costantemente domande e fagli dire cosa fa il suo codice e perché. Prendi nota. Quindi, alla fine della revisione del codice, dagli una copia delle note e digli di rendere le tue domande abbastanza ovvie. O con più commenti o semplicemente riformattando il suo codice per renderlo migliore qualità (preferibilmente quest'ultimo quando possibile)


2
+1 - Se devi porre una domanda su una qualsiasi parte del codice, quella parte richiede un commento o un refactoring, quindi la domanda non deve essere posta da qualcun altro in futuro.
Dunk

+1 Anche le recensioni sorprese di codice / peer sono così basse nelle risposte. L'implementazione di revisioni del codice a livello di team (in modo da non scegliere un individuo) potrebbe aiutare a risolvere il problema (e forse altri che non sai nemmeno di avere :). Al limite, è possibile implementare una politica no-solo-push in base alla quale non è consentito spingere a meno che le modifiche non siano state riviste da un altro membro del team.
Chris Lee,

@ChrisLee alle mie politiche di revisione del codice della mia azienda non sono applicate tecnicamente, ma esiste una politica che prima che una storia possa essere contrassegnata come pronta per il test, deve essere rivista, indipendentemente da chi ha svolto il lavoro di sviluppo. È abbastanza interessante dover rivedere il codice quando il CTO effettua un check in anche se lol
Earlz,

18

Questo dipende dal codice prodotto dal tuo collaboratore. Se leggi il libro Clean Code di zio Bob, scoprirai che in realtà preferisce non aggiungere commenti al codice. Se il codice stesso è leggibile come dovrebbe essere, allora non c'è quasi bisogno di commenti.

Se questo non è il caso, o hai bisogno di commenti a causa di una politica non negoziabile, la domanda principale diventa se sei solo tu che vuoi che scriva commenti, o se è l'intero team o il team / progetto capo. Se sei solo tu, allora dovresti parlare con gli altri colleghi per scoprire perché potrebbe non essere affatto un grosso problema.

Se il leader del progetto non ha commenti, è possibile richiederli anche come parte della completezza , ovvero se il codice inviato non ha commenti, il lavoro non è ancora finito. Non può continuare a fare altri lavori, fino a quando il suo lavoro attuale non è finito e per questo sono richiesti commenti. Tuttavia, tieni presente che questo tipo di forzatura molto probabilmente porterà a commenti orribili (aspettati un sacco di schifose ripetizioni di commenti di codice).

L'unico modo possibile secondo la mia modesta opinione è di discutere dei profitti reali che tu e tutti gli altri ottenete dai commenti. Se non lo capisce con una semplice discussione, c'è sempre anche la strada difficile: invece di lasciarli scrivere un nuovo codice, farli lavorare su un codice esistente. Se possibile, dovresti trovarli in due diverse aree di lavoro: una con commenti utili adeguati e un'altra priva di commenti. Dover leggere il codice non commentato e non commentato di qualcun altro è una rivelazione per il tuo lavoro.

Ci siamo stati tutti una volta ed eravamo arrabbiati per l'autore originale di qualche fonte per lavorare così sciatto. È la riflessione aggiuntiva che ognuno di noi è anche un tale autore che ti fa capire che dovresti preoccuparti della leggibilità - quindi, non dimenticare di discutere i risultati con il tuo collega in seguito per promuovere questa riflessione.


+1 per discutere i profitti reali dai commenti. I commenti hanno lo scopo di aggiungere valore al codice sorgente.
Sparky

1
Ri: "questo tipo di forzatura porterà probabilmente a commenti orribili". Se non stai commentando mentre scrivi il codice, riempire nuovamente i commenti dopo aver fatto il codice quasi sempre si tradurrà in commenti orribili, che ci crediate o no. Quando stai programmando, quello è il momento in cui sai esattamente PERCHÉ stai facendo qualcosa in un modo particolare. Questo è il momento di far sapere agli altri. Se commenti dopo aver finito, è probabile che non ti ricorderai nemmeno cosa stavi pensando quando hai scritto il codice, quindi tendi a inserire un commento inutile solo per il gusto di commentare.
Dunk

3
ha sempre avuto problemi con l'approccio di quel libro. I commenti possono essere molto utili per spiegare un processo / logica aziendale (o perché) che nessuna quantità di codice pulito può fare.
bharal,

Mentre i commenti nel codice non sarebbero necessari, dovrebbe esserci almeno la descrizione del metodo, come Javadoc
Danubian Sailor

2
Clean Code è un libro decente, ma non dovrebbe essere trattato come un vangelo. Devi applicare il buon senso e decidere tu stesso cosa funziona. Non sono d'accordo con i consigli sui commenti, perché i linguaggi di programmazione sono orientati ad esprimere il come di un problema con scarsa considerazione del perché. Stavo scrivendo un codice per Google Shopping che aggiunge un codice paese allo SKU del prodotto. È ovvio che cosa stia facendo il codice, ma a meno che tu non sappia che puoi utilizzare lo stesso codice prodotto una sola volta, anche in mercati diversi, non sapresti perché lo stavo facendo. Il commento che ho aggiunto lo chiarisce.
GordonM,

10

Se hai un dipendente che non è in grado di seguire le istruzioni, rimproveralo e assicurati che sia chiaro che non aiuterà l'avanzamento della sua carriera. La coerenza nello stile di codifica è fondamentale per un team e se tutti gli altri scrivono commenti e questo non lo è, ciò danneggerebbe lo stile di codifica.

Detto questo, probabilmente puoi aiutarlo. Nella mia esperienza, quando qualcuno protesta che commentare richiede troppo tempo c'è una barriera psicologica come ...

  1. È consapevole delle sue scelte di codice / design e non vuole metterle in prosa. (Le revisioni del codice possono essere utili per rafforzare la fiducia in se stessi tanto quanto per abbatterle.)
  2. Lavora in modo molto lineare e non pensa molto al futuro. Commentare è doloroso perché lo costringe a scaricare il codice immediato che stava per scrivere dalla sua memoria di lavoro per comporre le sue intenzioni in modo diverso. (Se questo è vero, i commenti diventano molto importanti per la sua qualità del codice.)
  3. Storicamente le persone non capiscono i suoi commenti.

È importante per un programmatore rendersi conto che i commenti sono come dei test: non sono solo per un uso futuro - Sono per il programmatore stesso. Lo costringono a pensare diversamente al suo approccio.

Niente di tutto questo è un sostituto di CI, test o revisioni del codice. È solo una delle molte parti critiche della codifica che, di per sé, non sta scrivendo codice.


3
Non penso che le minacce saranno necessariamente efficaci, possono presentarsi come bullismo (anche se non era quello l'intento) e i programmatori di norma tendono a risentirsi degli editti di livello superiore e in questo caso potrebbe semplicemente scavare i talloni ancora di più. Può venire a quello come ultima risorsa, ma solo come ultima risorsa.
GordonM,

@GordonM Pensi che sarebbe meglio non dire a un dipendente quando il suo comportamento è inappropriato e quali sarebbero le conseguenze di un comportamento inappropriato continuo?
Kojiro,

Non dire nulla non è ovviamente una buona idea, ma minacciare le persone favorirà solo un clima di paura, soprattutto per un aspetto relativamente secondario come lo stile dei commenti. Se gli spieghi ragionevolmente perché il team considera importante commentare, va bene. Ma so se qualcuno mi ha minacciato di licenziamento per qualcosa di relativamente minore, sarei più propenso a iniziare a cercare un altro lavoro.
GordonM,

@GordonM In realtà faccio un'eccezione all'implicazione che ciò che ho detto era minaccioso, ma comunque, l'ho risolto.
Kojiro,

8

Ottieni il software di revisione del codice e utilizzalo bene.

Usiamo il forno e lo adoriamo. Abbiamo una politica secondo cui ogni gruppo di modifiche deve essere rivisto (anche se consentiamo agli sviluppatori di raccogliere / approvare le recensioni su tag e fusioni senza conflitti (sebbene la maggior parte di noi utilizzi rebaseif); in questo modo possiamo individuare rapidamente i cambiamenti senza recensioni).

Il codice non chiaro è la ragione per cui una revisione del codice deve essere respinta. Non importa se la correzione è costituita da commenti o codice più chiaro, ma il revisore deve essere in grado di capirla. Alcuni sviluppatori preferiscono riscrivere il codice, ma altri (me compreso) spesso trovano più facile esprimere l'intenzione nei commenti (il codice può mostrare facilmente cosa fa, ma è più difficile mostrare cosa dovrebbe fare).

In caso di dubbi sulla chiarezza del codice, il revisore vince sempre. Naturalmente l'autore lo capisce, perché lo hanno scritto. Deve essere chiaro per un'altra persona.

Utilizzando software come Kiln, nessun changeset viene trascurato. Tutti nel mio team di sviluppo lo preferiscono molto in questo modo. Il software di revisione del codice ha avuto un impatto enorme sulla qualità del nostro codice e sulla qualità delle applicazioni :-)

È facile per gli sviluppatori diventare difensivi con le recensioni rifiutate quando introducono il software per la prima volta, ma nella mia esperienza, non ci vuole molto a capire che le cose vanno meglio in questo modo e abbracciarlo :-)

Modifica: Vale anche la pena notare, proviamo a non far spiegare agli sviluppatori il codice criptico verbalmente o nei commenti nella recensione. Se qualcosa non è chiaro, il posto migliore per spiegarlo è nel codice (nei commenti o tramite refactoring), quindi aggiungi i nuovi changeset alla stessa recensione.


4

È interessante notare che la leggibilità applicata al linguaggio naturale è misurata dalla velocità di lettura e comprensione. Immagino che una semplice regola possa essere effettivamente adottata, se un particolare commento di codice non migliora questa proprietà, può essere evitato .

Perché commenti

Sebbene il commento al codice sia una forma di documentazione incorporata, esistono diversi modi nei linguaggi di programmazione di fascia alta per evitare la superflua programmazione "sovra-documentata" (di codice significativo) utilizzando elementi del linguaggio stesso. È anche una cattiva idea trasformare il codice in elenchi dal libro di testo di programmazione, in cui le singole dichiarazioni sono letteralmente spiegate in modo quasi tautologico (tenere presente l'esempio "/ * incremento i di 1 * /" nelle risposte già fornite), rendendo pertinenti tali commenti solo ai programmatori inesperti con la lingua.

Nondimeno, è intenzione di provare a commentare il codice "sotto documentato" (ma insignificante) che è veramente "la fonte di tutti i mali". L'esistenza stessa di codice "sotto documentato" è un segnale negativo - o è un disastro non strutturato, o un bizzarro hack di mistico scopo perduto. Ovviamente, il valore di tale codice è almeno discutibile. Sfortunatamente ci sono sempre esempi, quando è davvero meglio introdurre un commento in una sezione di righe di codice formattate (raggruppate visivamente) piuttosto che avvolgerlo in una nuova subroutine (attenzione alla "consistenza insensata" che "è il folletto delle piccole menti") .

Leggibilità del codice! = Commenti sul codice

Il codice leggibile non richiede annotazioni per commenti. In ogni particolare posizione nel codice c'è sempre un contesto di un'attività che questo particolare codice dovrebbe raggiungere. Se manca lo scopo e / o il codice fa qualcosa di misterioso = evitarlo a tutti i costi. Non consentire a strani hack di popolare il tuo codice: è il risultato diretto della combinazione di tecnologie difettose con mancanza di tempo / interesse per comprendere le basi. Evita il codice mistico nel tuo progetto!

D'altro canto, il programma Readable = codice + documentazione può contenere più sezioni legittime di commenti, ad esempio per facilitare la generazione di documentazione "commenti all'API".

Seguire gli standard di stile del codice

Abbastanza divertente la domanda non riguarda il motivo per cui commentare il codice, si tratta del lavoro di gruppo - come produrre codice in stile altamente sincronizzato (che tutti gli altri possono leggere / comprendere). Stai seguendo standard di stile di codice nella tua azienda? Il suo scopo principale è quello di evitare di scrivere codice che richiede refactoring, è troppo "personale" e "soggettivamente" ambiguo. Quindi immagino che se si vede la necessità di usare lo stile del codice, ci sono molti seri strumenti per implementarlo correttamente - a cominciare dall'educazione delle persone e finendo con l'automazione per il controllo di qualità del codice (numerosi lint, ecc.) E (revisione controllo integrato) sistemi di revisione del codice.

Diventa un evangelista della leggibilità del codice

Se si accetta che il codice viene letto più spesso di quanto non sia scritto. Se una chiara espressione di idee e pensieri è chiaramente importante per te, indipendentemente dalla lingua utilizzata per comunicare (matematica, codice macchina o inglese antico) .. Se la tua missione è sradicare il modo noioso e brutto di pensare in modo alternativo .. (scusate , l'ultimo viene da un altro "manifest") .. fai domande, avvia discussioni, inizia a diffondere libri stimolanti sulla pulizia del codice (probabilmente non solo qualcosa di simile ai modelli di design di Beck, ma più simile a quello già menzionato da RC Martin ) che affronta l'ambiguità in programmazione. Segue un passaggio puntuale di idee chiave (citato dal libro di O'Reilly sulla leggibilità)

  • Semplifica la denominazione, i commenti e la formattazione con suggerimenti che si applicano a ogni riga di codice
  • Affina i cicli, la logica e le variabili del tuo programma per ridurre la complessità e la confusione
  • Attacca i problemi a livello di funzione, come riorganizzare blocchi di codice per eseguire un'attività alla volta
  • Scrivi un codice di prova efficace che sia accurato e conciso, oltre che leggibile

Eliminando i "commenti", ne rimane ancora molto (immagino che scrivere codice che non abbia bisogno di commenti sia un ottimo esercizio!). La denominazione di identificatori semanticamente significativi è un buon inizio. Successivamente, strutturando il codice raggruppando le operazioni connesse logicamente in funzioni e classi. E così via. Un programmatore migliore è uno scrittore migliore (ovviamente, assumendo altre abilità tecniche fornite).


Puoi scrivere codice che non ha bisogno di commenti solo per divertimento. Questo potrebbe davvero essere un ottimo esercizio ma non se hai bisogno di tornare al codice e non puoi davvero cambiare nulla perché non saprai perché questa funzione funziona così come forse c'era qualche client che la voleva così. Ovviamente potresti trovarti in quell'1% del progetto documentato e motivato al di fuori del progetto, ma anche in questo caso ci sono decisioni che prendi durante la codifica che non vengono rimandate alla documentazione. E francamente ... Chi legge la documentazione che non è nel codice. Certamente non programmatori ;-P.
Nux

1
Un buon ingegnere si prende cura dell'intero sistema (incl. Documentazione non codegenerata) - ma qui, ovviamente, il codice mentale in generale .. Il mio punto è che non avere identificatori nel codice chiamato foo , bar , tmpSomething2 e IamJustTooSmartAssToCare migliora già la situazione e riduce la necessità generale di spiegare cos'è il codice e cosa fa. Il codice deve essere scritto con "modalità di pensiero attiva" come un'API ben progettata che viene letta, compresa, riutilizzata e gestita dagli umani. Troppi commenti nel codice che è altrimenti difficile da capire sono un brutto segno!
Yauhen Yakimovich

La programmazione / codifica BTW di qualsiasi tipo di logica specifica di dominio sotto forma di un HACK o di una correzione di bug "temporanea" sta infatti producendo "strani HACK" - non appena ne avrai spremuti molti all'interno della blackbox - aspettati che fallire e rispondere al fuoco. Ciò può essere giustificato da scadenze nei progetti del "mondo reale", ecc. ma in realtà è solo un software economico che richiede il rimodellamento della logica del dominio (o forse la ricerca di un nuovo lavoro).
Yauhen Yakimovich

Sono d'accordo che la leggibilità è importante, ciò che non sono d'accordo è che sembra che tu dica "se fai della leggibilità una priorità non avrai bisogno di commenti". Questo semplicemente non è vero. Ci sono stato fatto. Ragionare su ciò che fai non deriva solo dal nominare le variabili in modo sensato. Fallo ovviamente, ma aggiungi anche un motivo nei commenti (anche se si tratta di un bug / requisito / numero di storia in un sistema esterno). È quello che sto dicendo.
Nux

"se fai della leggibilità una priorità non avrai bisogno di commenti" - sì, è esattamente quello che sto dicendo (e sono consapevole che non sembra facile da raggiungere). A proposito, hai delle situazioni in cui il mantenimento della cronologia completa del commit (controllo versione) non è sufficiente per riflettere su "bug / requisito / numero storia"? Mi sono esercitato in impegni piuttosto lunghi - funziona per me e mi permette di mantenere il codice vuoto dalla storia dello sviluppo ... lo rende meno coltivato biologicamente.
Yauhen Yakimovich

3

mi sbaglio a concentrarmi sui commenti del codice o è indicativo di un problema più grande che dovrebbe essere affrontato?

Un po '. Il grande codice non ha bisogno di commenti. Tuttavia, come hai detto, il suo codice non è auto-documentante. Quindi non mi concentrerei sui commenti. Dovresti concentrarti sul miglioramento delle abilità e della maestria dei tuoi sviluppatori.

Quindi come farlo? I suggerimenti di Doc Brown su revisioni / sessioni di refactoring sono una buona idea. Trovo che la programmazione in coppia sia ancora più efficace, ma potrebbe anche essere molto più difficile da implementare.


Pair Programming è un'ottima idea, offre a un altro programmatore una panoramica dello sviluppo del codice in modo che sappiano cosa sta succedendo, rendendo responsabili due persone per il codice. dà anche la possibilità a uno dei due di dire che qualcosa dovrebbe avere un commento perché è fuori dall'ordinario o qualcosa che qualcun altro potrebbe cambiare perché sembra ... "una perdita di memoria", "codice errato", ecc. alcune cose devono essere commentate in modo che qualcun altro in futuro non annulli qualcosa perché non sembra giusto.
Malachi,

3

Prima di tutto, suggerirei di ricollegare il tuo approccio ai commenti.

Se sono commenti di documentazione a livello di API (esposti in seguito al pubblico), questo sviluppatore semplicemente non sta facendo il suo lavoro. Ma per tutti gli altri commenti, fai attenzione.

Nella maggior parte dei casi li incontro, i commenti sono malvagi. Consiglierei di leggere il capitolo dei commenti sul codice di "Clean code" di Robert Martin per capire bene perché.

I commenti danneggiano il tuo codice in diversi modi:

1) Sono difficili da mantenere. Dovrai fare un lavoro extra durante il refactoring; se si modifica la logica descritta nel commento, è necessario modificare anche il commento.

2) Mentono spesso. Non puoi fidarti dei commenti e devi invece leggere il codice. Il che solleva la domanda: perché dovresti aver bisogno dei commenti?

// this method returns the sum of 'a' and 'b'
public int GetHash(int a, int b)
{
    //the calculation of the hash
    int result = a*b;
}

(L'hash non è la somma ma il prodotto.)

3) I commenti ingombrano il codice e molto raramente aggiungono alcun valore.

La mia soluzione: invece di aggiungere altri commenti, prova a sbarazzartene!


4
Questo è solo stupido. Spero che nessuno creda che uno stile di commento così scarso sia utile. Ma credi sinceramente che i commenti non debbano mai essere usati?
jmk,

1
Sì, questo è un suggerimento sciocco, se il codice è incredibilmente leggibile potrei capire alcuni commenti ma vedere i commenti dovrebbe dire perché il metodo sta facendo quello che è e dove verrà utilizzato una volta che si arriva a più di alcune classi c'è davvero nessun motivo per nessun commento, aiutano tutti.
DBlackborough,

3
La cosa importante da ricordare è che mentre tutto ha senso per te in questo momento, qualcun altro dovrà mantenere il tuo codice tra 3 anni. Non rovinare tutto.
xaxxon,

4
@xaxxon Per non parlare delle mele anche se quella persona potresti essere tu.
soffice

3
@mehaase - Non cosa, non come, ma perché è il motivo più importante per aggiungere commenti al codice.
Henk Langeveld,

1

Se un membro del team ha difficoltà a comprendere il codice di un altro membro del team (per qualsiasi motivo); quindi quel membro del team dovrebbe essere in grado di scoprire chi ha scritto il codice originale (qualsiasi sistema di controllo di revisione sano di mente) e dovrebbe essere incoraggiato a chiedere all'autore del codice di spiegarlo direttamente (ad esempio, avvicinarsi alla propria scrivania, sedersi e discuterne).

In questo caso, se la mancanza di commenti è un problema, la persona che non sta commentando adeguatamente il proprio codice trascorrerà gran parte del proprio tempo a spiegare cosa ha fatto; e (se sono intelligenti) inizieranno ad aggiungere commenti per evitare di perdere tempo con tutte quelle spiegazioni.

Si noti che incoraggiare i membri del team a chiedersi spiegazioni è utile per altri motivi. Ad esempio, forse un membro del team è meno esperto e può imparare le cose dai membri del team più esperti.

Principalmente, incoraggiando i membri del team a chiedersi reciprocamente spiegazioni, si crea un sistema di auto-bilanciamento; dove diversi membri del team "si adattano automaticamente" tra loro.


1

Questa è in gran parte un'estensione della risposta di tdammer, ma esegue revisioni del codice a intervalli regolari.

Il fatto che lui (e altri sviluppatori) si siedano, esaminino il loro codice e più o meno difendano davanti ai loro superiori e colleghi renderà tutti programmatori migliori e aggiungerà valore reale in un periodo di tempo relativamente breve. A breve termine, non fornirà allo sviluppatore in questione alcuna scusa per commentare correttamente il suo codice al momento della revisione.

EDIT: Non sono sicuro del motivo per cui qualcuno dovrebbe sottovalutare il mio suggerimento - forse ho dato per scontato che i benefici della revisione del codice sarebbero conoscenze comuni ... si prega di vedere questo thread come un'analisi della comunità della pratica:

La revisione del codice è una buona pratica?


Quando una stanza piena di persone inizia a ridere del tuo codice illeggibile, inizierai a fare un lavoro migliore di programmazione e commenti. :) Sono un grande sostenitore delle recensioni di codice.
Evik James,

1
Far ridere la gente davanti al codice davanti agli altri colleghi non è il modo di farlo: - \
Danny Tuppeny,

1
Se le persone che fanno la revisione del codice stanno ridendo piuttosto che essere costruttive, hanno bisogno di allenarsi tanto quanto uno sviluppatore che non è in grado di scrivere codice leggibile. Dare critiche costruttive piuttosto che dispregiative è una delle abilità sociali che trovo spesso mancano agli sviluppatori.
Martin Brown,

1

Considerando le opinioni spesso estreme sui commenti, esito a ponderare. Detto questo ...

Quali sono alcuni argomenti che posso presentare per scrivere un codice (illeggibile) che dovrebbe essere adeguatamente documentato?

Capire come scrivere codice gestibile e leggibile richiede tempo, pratica ed esperienza. I programmatori inesperti (e purtroppo molti esperti) spesso soffrono dell'effetto Ikea ( PDF ). Questo perché l'hanno costruito e lo conoscono intimamente, e sono sicuri che il codice non sia solo eccezionale, ma anche leggibile.

Se la persona è un grande programmatore, allora poca documentazione è necessaria. Tuttavia, la maggior parte dei programmatori non è eccezionale e molto del loro codice soffrirà nel reparto "leggibilità". Chiedere al programmatore mediocre o in via di sviluppo di "spiegare il proprio codice" è utile in quanto li costringe a visualizzare il proprio codice con un occhio più critico.

Questo significa "documentare" il loro codice? Non necessariamente. Caso in questione, ho avuto un programmatore simile con questo problema in passato. L'ho costretto a documentare. Sfortunatamente la sua documentazione era indecifrabile come il suo codice e non ha aggiunto nulla. In retrospettiva le recensioni sui codici sarebbero state più utili.

Tu (o un delegato) dovresti sederti con questo programmatore e recuperare un po 'del suo vecchio codice. Non le nuove cose che conosce solo lavorando su di esso. Dovresti chiedergli di guidarti attraverso il suo codice con una minima interazione. Questa potrebbe anche essere una sessione di "documentazione" separata, in cui deve spiegare per iscritto il suo codice. Quindi dovrebbe ricevere feedback su approcci migliori.

A parte questo ... a volte è necessaria della documentazione indipendentemente da quanto sia buona la "leggibilità" del codice. Le API dovrebbero avere documentazione, operazioni estremamente tecniche e complesse dovrebbero avere documentazione per aiutare il programmatore a comprendere i processi coinvolti (spesso al di fuori del dominio di conoscenza dei programmatori), e alcune cose come le regex complesse dovrebbero davvero documentare ciò a cui stai confrontando.


0

Molti progetti richiedono la documentazione del codice: documento di interfaccia, documento di progettazione, ...

Alcuni progetti richiedono che tale documentazione sia inserita nei commenti del codice ed estratta con strumenti come Doxygen o Sphinx o Javadoc, in modo che il codice e la documentazione siano più coerenti.

In questo modo, gli sviluppatori sono tenuti a scrivere commenti utili in codice e questo compito è integrato nella pianificazione del progetto.


6
No, in questo modo gli sviluppatori sono tenuti a scrivere alcuni commenti. La loro utilità diminuisce con la pressione di scriverli, sprofondando spesso sotto lo zero nella regione attivamente dannosa (il commento non valido è peggio di nessun commento) se la politica viene spinta fortemente.
Jan Hudec,

1
@JanHudec - Sono d'accordo con te. Ecco perché dovrebbe essere impostato un certo controllo. La generazione automatica garantisce che, ad esempio, gli argomenti delle funzioni nel codice siano gli stessi dei commenti. Inoltre, avere un unico PDF anziché una directory di file di origine rende la documentazione più leggibile (ovvero più rivisitata) da più persone.
mouviciel,

2
Bene, no, non lo fa. Come noterai nel .pdf che il codice fa effettivamente qualcosa di leggermente diverso da quanto dice la descrizione?
Jan Hudec,

1
Forse la mia opinione è distorta dal mio dominio, software spaziale in cui tutto viene rivisto, controllato, verificato, testato due o tre o quattro volte. La generazione automatica della documentazione non elimina le incoerenze ma aiuta a ridurle.
mouviciel,

Sì, sei fortemente di parte. In domini del genere ha senso, nella maggior parte dei test unitari sono sufficienti per il controllo qualità e documentare ogni ultima funzione sarebbe una perdita di tempo.
Jan Hudec,

0

Dichiarerò ciò che la maggior parte delle risposte e dei commenti suggeriscono: probabilmente dovrai capire il vero problema qui piuttosto che cercare di far passare la tua soluzione percepita.

Sei motivato a vedere i commenti nel suo codice; perchè ? Hai dato una ragione; perché questa ragione è così importante per te? Invece è più motivato a fare qualcos'altro; perchè ? Darà una ragione; perché questa ragione è così importante per lui? Ripeti fino a quando non arrivi al livello in cui sorge realmente il conflitto, e cerca di trovare una soluzione con cui entrambi puoi convivere. Scommetto che ha ben poco a che fare con i commenti.


0

Se segui un buon standard di codifica, sarà richiesto un numero minimo di commenti. le convenzioni di denominazione sono importanti. I nomi dei metodi e i nomi delle variabili dovrebbero descriverne il ruolo.

Il mio TL mi suggerisce di usare meno commenti. vuole che il mio codice sia comprensibile e auto-descrittivo. semplice esempio: nome della variabile per il tipo di stringa utilizzato per il modello di ricerca

   var str1:String="" //not uderstandable
   var strSearchPattern:String="" //uderstandable

0

Adoro le risposte alla recensione del codice, ma forse anche il mio processo sarà di aiuto.

Adoro i commenti, ma non li aggiungo quasi mai al codice al primo passaggio. Forse è solo il mio stile, ma colpirò la stessa sezione di codice da 3 a 5 volte durante lo sviluppo (refactoring, test di scrittura, ecc.).

Ogni volta che mi confondo leggermente o ogni volta che qualcuno mi fa una domanda su una sezione di codice, cerco di risolverlo in modo che abbia senso.

Questo può essere semplice come aggiungere un commento rimuovendo un insieme confuso di operazioni nella propria funzione o può innescare un refactor più grande come l'estrazione di un nuovo oggetto.

Ti suggerisco di incoraggiare tutti i membri del gruppo a "possedere" che il loro codice sia leggibile da altri - questo significa che ogni volta che qualcuno ti pone una domanda sul tuo codice, ti impegni a fare una modifica - o meglio ancora abbinalo a quello persona per apportare la modifica subito!

Prendi seriamente in considerazione l'idea di farne parte come parte del tuo "Contratto di gruppo" (E di creare definitivamente un contratto se non ne hai uno) - in questo modo tutti lo hanno concordato e lo hai appeso a un muro da qualche parte in modo che non ci sia ' t qualsiasi domanda su cosa hai accettato di fare.


0

Forse questo ragazzo ha bisogno di apprezzare la buona disciplina di programmazione e perché è importante che altre persone siano in grado di capire il codice che ha scritto.

Ho lavorato su alcune basi di codice davvero terribili nella mia carriera, quelle in cui il codice era così mal organizzato, i nomi delle variabili erano così poveri, i commenti così cattivi o inesistenti, che la base di codice ha danneggiato la mia produttività. Non puoi lavorare per correggere o migliorare una base di codice che non capisci, e se è scritto in modo impenetrabile per i nuovi arrivati, passeranno più tempo a cercare di capirlo che a lavorarci davvero.

Non c'è insegnante migliore dell'esperienza dura!

Ogni base di codice ha alcuni bit orribili in agguato, parti del sistema che nessuno vuole toccare perché hanno paura di rompere qualcosa o non possono fare alcun lavoro significativo perché chi ha scritto il codice è partito da tempo e ha preso la sua comprensione del codice con loro. Se quel codice non è commentato e non si documenta da sé, non fa che peggiorare le cose.

Ti suggerisco di trovare la parte della tua base di codice che è così, e di dargli la responsabilità del tuo fastidioso programmatore. Dagli la proprietà di esso, fagli la sua responsabilità, fagli imparare il vero dolore di lavorare su un codice che non può essere mantenuto perché non è ben documentato o impossibile da capire in un breve lasso di tempo. Dopo qualche mese di lavoro, sono sicuro che inizierà a venire in giro.


-1

Dagli un altro codice senza commenti e chiedigli di capire il codice. Forse capirà l'importanza di commenti adeguati allora.


12
Ho appena evitato il pulsante -1 su questo. La maggior parte del codice che scrivo ha pochissimi commenti. Non credo di aver fatto lamentare le persone che non è comprensibile negli ultimi anni almeno. Con pochissime eccezioni, se il codice ha bisogno di commenti per essere compreso , allora non ha bisogno di commenti, ha bisogno di miglioramenti per chiarezza. (Certo, devi assumere una comprensione di base della sintassi del linguaggio. Cose come, in C ++, non fanno di tutto per evitare di usarlo reinterpret_cast<>()perché le persone possono trovarlo confuso; in C #, se ??fa quello che ti serve, usa ecc.)
un CVn

2
@ MichaelKjörling: può dipendere molto dal tipo di codice che stai scrivendo. Se il tuo codice dipende da caratteristiche non comunemente conosciute di una lingua o di un'API, o hai fatto qualcosa in modo controintuitivo al fine di evitare un bug oscuro che ti ha impiegato ore a scoprirlo, sarebbe molto più efficace commentare (eventualmente includendo un collegamento a un articolo) piuttosto che cercare di rendere il codice "chiaro" su queste informazioni di base senza commenti.
LarsH,

@ MichaelKjörling: sono particolarmente motivato a dirlo oggi perché ho lottato per il mese scorso con una profonda API GIS. Le strutture dell'API sono complesse e non molto documentate. Ci imbattiamo costantemente in sorprese, alcune delle quali ci fanno arretrare giorni alla volta. Aspettarsi che qualcun altro (o me tra 6 mesi) debba riscoprire quelle pepite per lavorare efficacemente con il nostro codice sarebbe una perdita enorme del tempo di quella persona. E quei segreti generalmente non possono essere documentati dal "miglioramento per chiarezza" senza commenti.
LarsH,

@LarsH Questo probabilmente si qualificherebbe come una di quelle "pochissime eccezioni" che ho citato nel mio commento. Non sono contrario a commentare dove effettivamente aggiunge valore ; ma non è la quantità di commenti che rende il codice facile o difficile da leggere. Detto questo, con un'API, sarei più propenso a documentare quelle stranezze altrove; ad esempio, in una wiki o simili. Forse aggiungi anche un link alla pagina pertinente accanto ad ogni utilizzo. In questo modo, non devi andare a cercare un altro posto che utilizza quella particolare funzionalità dell'API ogni volta che il codice non funziona esattamente come ti aspetti al primo tentativo.
un CVn

@ MichaelKjörling: d'accordo in generale. Il fatto che queste eccezioni siano rare o meno dipende dal dominio per cui stai programmando e dalle API che devi utilizzare. Collegamenti / riferimenti sono utili per le note che si applicano in generale, non solo alla situazione attuale. Nessuno vuole una tesi nel codice stesso.
LarsH,

-1

Questo programmatore esegue un po 'di manutenzione del codice? In caso contrario, dovrebbe: verificare la presenza di eventuali progetti che non ti piacciono e assegnargli la manutenzione.

Di solito quelli sono i progetti mal documentati in cui perdi ore a cercare di capire cosa sta succedendo per correggere ciò che avrebbe potuto essere facile da correggere. Se questo tipo di esperienza non lo fa desiderare aggiornato, la documentazione corretta e utile nulla lo farà.


1
Questo approccio è più probabile che lasci il programmatore piuttosto che addestrarlo nel modo corretto di fare le cose.
Martin Brown,

-1

In uno dei miei progetti precedenti mancavano dozzine di commenti (algoritmo, risultati o alcuni JavaDoc di base), quindi ho appena deciso di fare 130 problemi per lui, e-mail di notifica su ogni problema ogni 4 giorni. Dopo 3 settimane ha avuto 280 problemi, quindi ha deciso di scrivere commenti.


-1

I commenti hanno uno scopo e uno solo:

Perché questo codice fa questa cosa?

Se un commento non spiega perché qualcosa è come è, allora dovrebbe essere rimosso. I commenti inutili che ingombrano il codice sono meno che inutili, sono attivamente dannosi.

Ho l'abitudine di rendere i miei commenti la cosa più ovvia nel mio IDE. Sono evidenziati con testo bianco su sfondo verde. Attira davvero la tua attenzione.

Questo perché il codice spiega cosa sta facendo qualcosa e i commenti sono per il motivo per cui lo sta facendo. Non posso sottolinearlo abbastanza.

Un buon esempio di commento:

/* Must instantiate clsUser before trying to encrypt a password because the code to 
   encrypt passwords only uses strong encryption if that module is loaded. */

Un cattivo esempio:

/* instantiate clsUser */

Se stai usando i commenti come "sezioni" di codice: taglia il tuo metodo mammut in funzioni più piccole e utili e rimuovi i commenti.

Se stai dicendo quello che stai facendo nella riga successiva: Rendi il codice autoesplicativo e rimuovi il commento.

Se stai usando commenti come messaggi di avviso: assicurati di dire perché.


-2

Per integrare le risposte qui, potrei aggiungere "Se vuoi farlo nel modo giusto devi farlo da solo."

Non intendo diventare "commentatore principale di codice", intendo diventare un modello di ruolo nel dimostrare ciò che vorresti che facesse questo altro sviluppatore. Dicono che mostrare è più efficace del raccontare . Se riesci a dimostrare il vantaggio di commenti di qualità, o anche fare da mentore a questo altro sviluppatore (nella misura in cui è disposto), potresti trovare più successo nell'adozione dei commenti in codice.

Allo stesso modo, a casa ci sono alcune faccende domestiche che non mi interessa fare. Tuttavia quelle stesse faccende sono le faccende di "pet peeve" di mia moglie ... faccende che devono essere fatte per essere felice. La stessa situazione si applica viceversa. Penso che potresti dover accettare che questo altro sviluppatore abbia priorità diverse da te e che non sarai d'accordo con te su tutto. La soluzione che io e mia moglie abbiamo trovato è che per quelle faccende da "pipì da compagnia" non ci resta che fare da soli, anche se ciò significa fare un po 'più di lavoro da soli.


1
Direi che mostrare un codice più pulito / refactoring del loro codice in modo che sia più leggibile dimostra un cambiamento maggiore rispetto all'inserimento di commenti nel codice.
Makoto,

Qualcuno può spiegarmi cosa non gli piace della mia idea ...?
M. Dudley,

-6

Semplice: se il dipendente non fa commenti, digli di premere shift+alt+jper il commento automatico in ciascun metodo contemporaneamente all'inserimento del codice. eseguire la revisione del codice per evitare questi problemi.


11
"Commento automatico"? Quindi è dache provengono tutti quei commenti "incrementa di 1"? Quale IDE fa questo (quindi posso evitare i lavori in cui viene utilizzato)?
un CVn

Ho provato a modificarlo in qualcosa di leggibile, ma non sono sicuro che la prima parola debba avere una virgola prima o dopo. La frase fa commenti per primi o per primi in ogni metodo ?
TRiG
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.