Trattare con colleghi che non hanno uno stile di codifica coerente?


30

Cosa fai quando lavori con qualcuno che tende a scrivere un codice stilisticamente cattivo? Il codice di cui sto parlando è di solito tecnicamente corretto, ragionevolmente strutturato e può anche essere algoritmicamente elegante, ma sembra brutto . Abbiamo:

  • Miscela di convenzioni e titoli di denominazione diversi ( underscore_stylee camelCasee UpperCamele CAPStutti applicati più o meno a caso a variabili diverse nella stessa funzione)
  • Spaziatura bizzarra e incoerente, ad es Functioncall (arg1 ,arg2,arg3 );
  • Molte parole errate nei commenti e nei nomi delle variabili

Abbiamo un buon sistema di revisione del codice in cui lavoro, quindi guardiamo e sistemiamo le cose peggiori. Tuttavia, è davvero meschino inviare una recensione di codice che consta di 50 righe di "Aggiungi uno spazio qui. Scrivi correttamente" itarator ". Cambia questa maiuscola, ecc."

Come incoraggeresti questa persona a essere più attenta e coerente con questo tipo di dettagli?


2
Guida "Pretty printers". Inoltre, la tua azienda ha una guida di stile?
chrisaycock,

1
che dire dei colleghi che non hanno alcuna grammatica? ;)
Muad'Dib il

4
@JSBangs: installa un controllo di stile pre-commit e fai rifiutare i commit. Ciò consentirà loro di formattare correttamente rapidamente. Oppure fai in modo che l' hook pre-commit esegua un formattatore per te. Alcune cose sembreranno, ma è meglio che strano è meglio di "orribile" credo.
Haylem,

3
Un altro pensiero: può sembrare meschino, ma è meschino a uno scopo (supponendo che a) ci sia uno standard di codifica e che b) tutti gli altri siano d'accordo e aderiscano ad esso)
Murph

3
Qual è lo sfondo di questo programmatore? Sembra che abbia lavorato per troppe aziende diverse con troppe convenzioni sulla formattazione del codice e il suo cervello le abbia interiorizzate in un pasticcio confuso. :-)
Carson63000,

Risposte:


19

Concordare una convenzione di codifica

Anche se questo è un cercapersone. Suggerisco a tutto il team di sedersi e concordare tutti sulla convenzione di base sulla codifica di lavoro utilizzabile da tutto il team.


1
Assolutamente - quindi a) tutti stanno cercando di raggiungere lo stesso standard e sanno di cosa si tratta eb) il tuo rifiuto alla revisione del codice può essere ridotto a "non aderisce agli standard di codifica" (almeno se il file nel suo insieme è un pasticcio - se è solo una o due cose che devi essere specifico)
Murph

Di solito non ho mai visto una squadra riuscire a "concordare" in un'ora una convenzione di codifica a tutto campo per qualsiasi lingua :) Ma se per accordo intendi "discutere fino al disaccordo, e poi imporre per grado e autorità", allora che lavori. Devi abbassare il piede su alcuni punti perché non troverai consenso o sei molto fortunato con la tua squadra.
Haylem,

28

Penso che devi solo continuare a fare quello che stai facendo. Avere una serie chiara di linee guida per la codifica e applicarle durante le revisioni del codice. Se uno sviluppatore ottiene 50 o 100 righe di "Aggiungi uno spazio qui" e "Correggi" iteratore "correttamente" ogni volta che tenta di eseguire il check-in di qualcosa, e in realtà non gli è consentito effettuare il check-in prima che tutti vengano risolti, alla fine egli dovrò iniziare a scrivere codice più pulito solo per evitare il fastidio.

Penso che se aggiusti queste cose da solo, come suggerito da NimChimpsky, pulirai per sempre questa persona.


5

Chiamo BS su tutti coloro che hanno affermato che gli errori di ortografia e la formattazione dei nomi variabili non contano. Ovviamente, hanno letto solo il loro codice. E nota quella parola proprio lì: leggi. Immagina di leggere un libro con molti errori di ortografia, formattazione pasticciata, spaziatura delle linee incoerente e varie altre pigrizie prevalenti in molti codici sorgente. Sarebbe noioso.

Per una professione in cui la sintassi deve essere corretta al 100% per funzionare, non c'è semplicemente alcuna scusa per qualsiasi sviluppatore reale di non avere uno stile di codice pulito e coerente. Qualcos'altro è trasandatezza e pigrizia. Metto sempre in dubbio la correttezza del codice scarsamente formattato nell'implementazione.


4

Abbiamo un buon sistema di revisione del codice in cui lavoro, quindi guardiamo e sistemiamo le cose peggiori. Tuttavia, è davvero meschino inviare una recensione di codice che consta di 50 righe di "Aggiungi uno spazio qui. Scrivi correttamente" itarator ". Cambia questa maiuscola, ecc."

Lo cambierei da solo e aggiungerei un commento educato nel codice.

questo presuppone che ci sia già una guida di stile come afferma la domanda:

Abbiamo un buon sistema di revisione del codice

Quindi il mio suggerimento è l'ultima risorsa, immagino che sia altrettanto veloce cambiarlo da solo e lasciare un commento, come è inviare una e-mail o altro.


10
Invecchia abbastanza velocemente.
Robert Harvey,

3
Probabilmente è più veloce per te che inviare una e-mail, e nel complesso è più veloce per risolvere il problema, ma è più lento che se il problema non si verifica in primo luogo.
Haylem,

4

Penso che convenzioni come la denominazione di classi e variabili siano importanti e debbano essere seguite anche con un codice elegante ed efficiente, ma a rischio di sottoporre a votazione negativa la mia risposta molte volte, devo dire che in generale il paradigma del "bel codice" che è spinto molto in giro, è in IMHO molto sopravvalutato.

Prima di tutto, lo sviluppatore che lo ha scritto dovrà mantenerlo in primo luogo, e se mai viene colpito da un autobus e un altro programmatore non riesce a capire come funziona perché il codice non è "carino", direi che l'altro sviluppatore non è comunque molto bravo. E ci sono molti formattatori / abbellitori automatizzati là fuori, quindi chiunque può usarli per abbellire il codice se necessario, senza perdere tempo pur essendo "nel flusso" / "nella zona".

Si prega di notare che non sto sostenendo la codifica di spaghetti / stile cowboy qui, infatti ho visto un codice spaghetti formattato molto bene (corpi funzione che coprono 4-5 schermate, variabili globali sparse in diversi file di codice sorgente, generalmente cattive scelte di nomi , eccetera).


Cosa ne pensi di questo codice: stackoverflow.com/questions/6221098/save-mapview-as-a-bitmap/… Pensi ancora che il programmatore che ha a che fare con questo "stile" sia un cattivo programmatore se lui hai seri problemi con esso?
WarrenFaith

@WarrenFaith, potresti voler rivisitare il mio terzo paragrafo, in particolare questo pezzo qui: "Nota che non sto sostenendo la codifica di spaghetti / stile cowboy qui ...".
Jas,

3

Uno dei miei colleghi scrive HTML in modo tale da farmi strisciare la pelle. Immagina il mio html bello e strutturato con due rientri spaziali, fatto a pezzi da tag aggiunti alla fine del mio che finiscono sulla stessa linea o sul prossimo come un ubriaco che ha bisogno di gettare un braccio intorno a te per rimanere in piedi. Le nuove linee sono raramente rientrate, ma se lo sono, sono sicuro che ci sia un buco nero altamente caotico in qualche parte della galassia che sputa fuori valori di temperatura irrazionali in modo tale che in qualche modo le sue cifre rispecchino il numero di spazi o schede utilizzati in tale rientro da questa donna. Se sono fortunato, vedrò un tag di input chiuso con " </input>". Incubo totale che puoi capire.

Nessuno sembra capirlo neanche, visto che per la maggior parte dei superiori qui, il codice organizzato o il codice non organizzato per loro è come la differenza tra noi che mettiamo il formaggio svizzero o il formaggio americano sui nostri panini, vale a dire che potrebbero davvero fregarsene di meno. Ho iniziato a lasciarlo scivolare perché ero stressato da un altro progetto e penso che abbia iniziato a rendersi conto di quanto fosse difficile capire un codice del genere prima di voler migliorare. Il mio consiglio sarebbe di dimostrare perché è preferibile dare uno stile al tuo codice piuttosto che semplicemente dire loro di farlo.


3

Il codice di cui sto parlando è di solito tecnicamente corretto, ragionevolmente strutturato e può anche essere algoritmicamente elegante ...

Sii felice di aver ottenuto tutto questo. La maggior parte dei programmatori ti darà forse la prima cosa in quella lista. Penso che la denominazione e la spaziatura delle variabili siano la cosa meno importante di cui preoccuparsi.


3
I programmatori impiegano più tempo a leggere il codice che a scrivere il codice. Se il codice è illeggibile, il costo per estenderlo o mantenerlo diventa enorme. E se i nomi delle variabili sono incoerenti, errati e non descrittivi, ciò rende illeggibile il codice.
Dima,

@Dima, vero, ma quel codice che funziona ed è elegante è già più facile da leggere rispetto al codice che è rotto e inelegante.
jjnguy,

1
Il mio punto è che dovresti essere in grado di guardare un nome di variabile, un nome di classe o un nome di funzione e sapere immediatamente come usarlo senza dover scavare nell'intera base di codice. Dovresti anche essere in grado di digitare il nome seguendo le convenzioni e farlo bene senza doverlo cercare. Ti consiglio di leggere "Clean Code" di Robert C. Martin.
Dima,

@Dima, sono d'accordo che le variabili dovrebbero avere nomi descrittivi. L'OP non menziona che i nomi sono cattivi, solo che sono incoerenti.
jjnguy,

1
Nella mia esperienza, quando i nomi sono incoerenti, tendono anche a non essere descrittivi. Ma c'è un altro problema. Quando i nomi sono incoerenti, ti ci vuole più tempo a ricordare cosa sono e devi passare del tempo a cercarli. Un buon IDE può aiutare in qualche modo, ma non risolverebbe completamente il problema. La programmazione già carica abbastanza il tuo cervello, quindi vuoi ridurre il più possibile la mappatura mentale e il doppio controllo.
Dima,

2

Sembra che tu debba creare e accettare una convenzione di stile. In caso contrario, avrai librerie con 3 rientri di spazio, altre con 4, alcune che usano Camel Case e altre che usano underscore_case.


2

Le modifiche che desideri rendere le tue preferenze personali o hai uno standard effettivo da seguire? Se non disponi di uno standard attuale, non farlo. Innanzitutto stabilire uno standard. Quindi è possibile ottenere software che può essere impostato per il refactoring del codice in base alle impostazioni dello standadrd (almeno per alcune cose).

Se disponi di uno standard, inizia ad applicarlo nella revisione del codice. Non ha senso avere uno standard se non lo si applica nella revisione del codice. Ciò significherà un sacco di lavoro extra nella manutenzione poiché le persone dovranno riparare il vecchio codice che non ha soddisfatto lo standard inizialmente quando lo toccano.

Anche senza uno standard, insisti a correggere gli errori di ortografia nei nomi delle variabili (non mi preoccuperei particolarmente dei commenti) poiché faranno impazzire tutti coloro che toccano il codice per sempre.


2

Gli standard di codifica devono essere identificati in modo che tutti sappiano cosa sono e quindi devono essere applicati. Dovrebbero esserci conseguenze nel non seguire le regole.

Ecco le cose che dovrebbero fornire qualche incentivo:

  1. Le revisioni del codice saranno noiose e più lunghe del necessario.
  2. Il codice verrà rifiutato più spesso.
  3. Gli orari non saranno rispettati.

Se questa persona o non deve preoccuparsi di questo perché nessuno applica le tue regole o non gli importa se sono improduttivi (e nessuno fa nulla al riguardo), non c'è molto che puoi fare al riguardo.


2

Sarei tentato di suggerire di avere una chat privata e vedere se entrambi potreste trovare una causa principale:

  1. Il collega è affrettato e perché qualcuno ha voluto il codice ieri, la persona sta cercando di far funzionare qualcosa il più velocemente possibile? Questa può essere un'opportunità per informare questa persona di concentrarsi più sulla qualità che sulla velocità nel proprio lavoro. Un mantra come "Prenditi il ​​tuo tempo" potrebbe essere utile se questo non è controproducente.

  2. In che modo la persona vede il proprio lavoro? Se c'è un senso di orgoglio, allora potresti avere un angolo da usare per ottenerne uno da migliorare. Se è solo un lavoro che paga le bollette, potrebbe essere molto più difficile ottenere modifiche. Sanno che non stanno facendo un ottimo lavoro ma sono così vicini?

  3. Questa persona non è d'accordo con le convenzioni e sta cercando di codificare per protestare? Se è così, allora potresti avere un grosso problema, ma vale la pena scoprire se è così o la persona è semplicemente pigra? Quali tipi di motivazione possono essere utili qui, ad esempio potresti fare appello all'avidità, all'orgoglio o ad altri vizi per far migliorare la persona. Questo è subdolo ma forse efficace se provare il percorso del bravo ragazzo non ne ottiene uno da nessuna parte.

  4. Come conquistare amici e influenza Le persone hanno alcuni suggerimenti in termini di persuasione che possono funzionare, come lodare i miglioramenti e dare alla persona un'ottima reputazione da difendere.

Per quanto riguarda il motivo per cui questo deve essere fatto privatamente, ecco alcuni motivi:

  1. C'è una buona possibilità di umiliazione, critica o altra spiacevolezza che è meglio tenere dietro una porta piuttosto che essere lasciato all'aperto, dove qualcuno potrebbe sentire il loro personaggio assassinato.

  2. Vuoi incoraggiare quest'altra persona ad aprirsi un po '. Una sfida qui è che alcune persone sono così sorvegliate che può richiedere molto tempo per farle abbattere i loro muri.

  3. Se possibile, suggerirei di provare a farlo un po 'lontano dall'ufficio. Esci a pranzo, fai una passeggiata o fai qualcosa in modo che l'ambiente circostante sia abbastanza modificato da far sentire la persona un po 'più a suo agio. Questa può essere una sfida e richiede la conoscenza della persona, ma l'idea qui è che in ufficio alcune persone indosseranno una maschera da lavoro che probabilmente non sarà utile qui.

  4. Preparati a rendere la conversazione piuttosto brutta o brutta, ma questo potrebbe essere un buon segno se riesci a mantenere l'altra persona impegnata e avere un buon dialogo. Ad alcune persone piace tenere le cose all'aperto e altre potrebbero preferire modi più sottili per farlo. La chiave è assicurarsi di ascoltare l'altra persona abbastanza per entrare in empatia e cercare di capire il loro lato.



1

L'abbellimento del codice come unscrutify sarà in grado di risolvere alcuni dei tuoi problemi. Se sei pronto a pagare per questo, allora ci sono software di alto livello che incorporano le regole nel codice sorgente stesso come Parasoft . Parasoft rende obbligatorio scrivere il codice in stile uniforme. Puoi anche incorporare le tue regole. Quando vengono utilizzati tali strumenti, gli sviluppatori sono costretti a utilizzare uno stile uniforme. E dopo un po 'si abitueranno.


1

Se si utilizza Eclipse, abilitare Salva azioni per i redattori Java e dire a tutti di usarlo. Questo risolve i problemi di formattazione ad ogni salvataggio, ma non corregge le maiuscole. Potrebbe essere abbastanza utile!

testo alternativo


1

Quanto è difficile seguire le convenzioni di stile? Comprendo gli errori di ortografia, ma il resto è un indicatore del pensiero sciatto e della codifica. Spiega alla persona che deve essere più coerente quando si tratta di codice di produzione perché non sono i soli a guardarlo. Scrivere codice di produzione in uno stile incoerente è semplicemente maleducato, egoista e sconsiderato.


0

LOL. Odierai assolutamente il mio codice. Non posso scrivere per salvarmi la vita e non mi interessa.

Ma so che ad alcune persone interessa davvero queste cose.

Ti suggerisco di licenziare la persona che scrive quel brutto codice se non cambiano, quindi trova qualcuno che renda le cose davvero belle e spero che possano scrivere codice che

di solito è tecnicamente corretto, ragionevolmente strutturato e può anche essere algoritmicamente elegante

e se non possono, almeno puoi mostrare al cliente il bel codice rotto e venderlo su quello!

Ma sul serio. Concentrati prima sulle cose realmente importanti. Se non riesci a trovare una buona e solida ragione al di fuori di "fa male alla mia delicata sensibilità", ignoralo per ora. Se in realtà è importante, siediti con la persona e convincili di quella importanza. Cose come gli standard che rendono facile distinguere tra livello di classe, livello di metodo, variabili condivise e costanti fanno la differenza. Se il programmatore in questione si prende cura della sua professione, capirà e proverà a fare la cosa giusta.


5
Se i nomi delle tue variabili sono errati, il prossimo che usa il tuo codice dovrà impiegare più tempo a correggere gli errori del compilatore quando li scrive correttamente. Non si tratta di "sensibilità delicata". Queste cose apparentemente banali causano errori, che causano frustrazione, che provoca più errori. Tutto ciò si aggiunge a enormi costi di manutenzione del codice.
Dima,

4
È un po 'più che sulla "delicata sensibilità", ma la produttività non mi dispiace per qualcuno con stili di codifica leggermente diversi, che a volte dimentica uno spazio, ecc ... Non siamo perfetti. Ma quando l'intero file sembra essere stato scritto da un undergrad, con spaziatura tra linee, posizioni, rientri e flusso di codice generale incoerenti, allora premo molto rapidamente il pulsante "rifiuta" (o ripristina).
Haylem,

2
Molti progetti open source di successo (incluso Linux) fanno questo: se non hai lo stile giusto (e i test unitari), allora viene rifiutato. Peccato se fosse buono e risolto un vero problema: non è sempre possibile correggere il codice di altre persone. Nel complesso, perdi meno tempo e denaro solo passando sul pezzo di genio occasionale che passa ma sembra un inferno o è irraggiungibile.
Haylem,

1
Cose divertenti. Ma ovviamente il punto principale sembra mancare. Per prima cosa coinvolgi il ragazzo con le cose ovvie per le quali puoi fare un vero e proprio caso forte. Quindi lavori sulle cose meno importanti. Ci sono modi di lavorare con persone al di fuori del semplice soffocamento con le regole. E forse, solo forse, la folla OCD potrebbe scendere a compromessi o scoprire perché c'è così tanta variabilità nel codice degli altri. Potrebbe esserci effettivamente una causa o una ragione.
ElGringoGrande,

0

La mia soluzione quando ho a che fare con risorse esternalizzate che non davano un &% $ # sulla formulazione (o bug facilmente prevenibili per quella materia) era di far applicare il server di compilazione. Ho creato un lavoro del server CI che veniva eseguito ogni notte che controllava il codice, eseguiva Jalopy e findbugs, quindi controllava nuovamente il codice. Una volta che l'altro team venne a sapere che non usare le convenzioni del codice standard avrebbe reso il loro lavoro più difficile, iniziarono a usare il loro IDE per mantenere un formato standard.

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.