Che dire di tutte quelle regole di codifica?


10

Ho sempre sostenuto l'idea di avere regole di codifica per gli sviluppatori in un'azienda o in un progetto specifico. Soprattutto se la società ha dimensioni maggiori di 10. Maggiore è la compagnia maggiore è la necessità. So che molte persone non saranno d'accordo, ma ho visto progetti che non li hanno e il codice sembra un disastro totale.

Il vero problema che ne deriva è come rendere quelle difficili a cui non piace usare parentesi in istruzioni if, o usare la stessa stringa di connessioni ovunque nel codice, o qualunque cosa, per usare le regole di codifica senza farle opporre l'idea?


3
Se stai usando C # come lingua, usa StyleCop. Se si utilizza Java ...
Giobbe

@Job - Sì, stiamo usando principalmente C #. StyleCop sembra interessante.
TheBoyan,

Risposte:


9

Coinvolgili nella risoluzione di un problema piuttosto che nella lotta alle regole. Personalmente preferisco l'idea di "guide di stile", "standard di codifica" o qualcosa di simile, nella speranza che impedisca la reazione "regole = cattiva" del jerk.

Ma anche se lo fa, tendo a pensare che le regole siano in vigore per un motivo e che il modo per convincere le persone con la testa rigida a voltarsi è quello di farle capire che, seguendo le linee guida, stanno aiutando a rendere il codice più facile da leggi per tutti.

A volte la pressione dei pari è la soluzione migliore per questo.


Nel ruolo del difensore del diavolo qui, è sempre possibile che le regole siano chiaramente sbagliate (per esempio, qualcosa messo in atto per un progetto passato ma è un peso per gli sviluppatori sul progetto corrente) - quindi avere un processo di revisione / abrogazione delle regole - anche se viene usato raramente - può anche essere utile per rassicurare le persone sul fatto che le regole sono una guida utile piuttosto che un'imposizione alla libertà degli sviluppatori.
Beekguk,

Assolutamente - e penso che se segui i consigli per concentrarti sul perché hai bisogno della regola, quindi se capisci che non hai bisogno della regola, sai che la squadra o la persona è arrivata da una mentalità aperta, piuttosto che solo essere difensivo a causa di un inspiegabile processo di regole.
bethlakshmi,

6

Nel mio lavoro utilizziamo tutte e tre le seguenti soluzioni:

1) Adotta un controllo dello stile del codice come l'eccellente Checkstyle (per Java) o StyleCop (per C #). Si tratta di strumenti facilmente configurabili che possono evidenziare automaticamente le deviazioni di stile / regola di codifica. Fornisce a tutti una terza parte neutrale per determinare ciò che è e non è accettabile.

2) Adotta un modello di codice di formattazione del salvataggio automatico (ecco un esempio usando Eclipse) (e un altro per Visual Studio) che formatterà automaticamente il tuo codice al momento del salvataggio. Questo è ottimo per consentire a qualcuno di programmare ciò che desidera, ma avere tutto il codice formattato allo stesso modo su save / commit. Mi piace molto questo e il nostro codice non è mai stato più coerente.

3) Revisioni del codice. Spero che tu lo stia facendo comunque, ma una cosa che dovrebbero evidenziare è dove le regole / gli stili di codifica infrangono la convenzione.

Oltre a quanto sopra, è importante che tutti siano sulla stessa barca e abbiano concordato gli stili / le regole a cui stanno lavorando. Metti in chiaro che non otterrai un accordo da parte di tutti su tutto, ma chiedi l'impegno del team a rimanere fedele a ciò che il team decide. Assicurati di rivedere occasionalmente gli stili / le regole scelti per tenere conto dell'esperienza del mondo reale utilizzandoli e del turn-over del team.


È possibile configurare alcuni sistemi di controllo di revisione per applicare elementi come Checkstyle al check-in. Se lo fai, inizia con le regole più importanti e aggiungi le regole di selezione più tardi.
BillThor,

4

Il vero problema che ne deriva è come creare quelle testate a cui non piace usare le parentesi quadre nelle istruzioni if, o usare la stessa stringa di connessioni ovunque nel codice, o qualunque altra cosa,

Sono "duri" non usando parentesi o è una richiesta "duri"?

Scegli le tue battaglie. Dubito che questo sia uno di quelli che vale la pena scegliere. Non mi piacerebbe lavorare da nessuna parte che ci si aspettasse da qualche parte vicino a questo livello di dettagli sul "codice del primo check-in". Questo è un indicatore di bandiera rossa che la squadra non capisce il refactoring.

OO 101 : "Rifattore quando il prodotto fa quello che deve fare". Non prima.


Il non utilizzo delle parentesi era solo un esempio :) anche se ho lavorato per una grande azienda che aveva un libro di> 200 pagine di regole di codifica e questa era una di queste. Ad ogni modo, sono sicuro che saresti d'accordo con me sul fatto che qualcuno che usa deliberatamente la stessa stringa di connessione (un esempio ancora) ancora e ancora nel codice solo perché è troppo pigro per metterlo in un file di configurazione e leggere da lì, ha bisogno dell'attenzione e bisogna sapere come affrontare questo tipo di situazioni.
TheBoyan,

2

E 'abbastanza difficile sedersi sulla spalla di ogni singolo sviluppatore in grandi squadre, assicurandosi hanno messo le parentesi in cui si pensa che dovrebbe andare - credetemi su quello;).

Se è qualcosa che ritieni stia ostacolando il tuo sviluppo, allora avrai bisogno di un "gatekeeper". Non consentire alle persone di effettuare il check-in senza una revisione del codice, ad esempio. Chiedi all'architetto tecnico o al team leader di rivedere il codice e rifiutarlo fino a quando non "correggono" lo stile del codice. Presto si stancheranno di questo e si adegueranno alle regole, probabilmente, solo per il tempo in cui vengono controllati.

Naturalmente, alcune aziende tolgono completamente i privilegi di check-in ai programmatori junior. Quando finalmente imparano le regole di codifica delle aziende, ottengono il privilegio.


2
Se il posizionamento del tutore è il tuo più grande problema di qualità, immagino che tu sia piuttosto fortunato. È il livello giusto su cui concentrarsi?
Bo Persson,

Solo un esempio tratto dalla domanda. Il principio è che le "linee guida" sulla progettazione del codice, come dice bethlakshmi sotto, sono proprio queste: linee guida. Se sei davvero preoccupato di come vengono seguiti, è necessario che i punti del processo accadano per ricordare / insegnare / farli valere.
Martin Blore,

Ma parentesi graffe dove pensi che dovrebbero andare ... Questo parla di volumi. Penso che ci siano aspetti più fondamentali della leggibilità della codifica / degli standard di codifica rispetto al posizionamento del controvento. Sono d'accordo sul fatto che tutti i partecipanti al progetto dovrebbero seguire lo stesso standard, ma l'uno sull'altro non importa molto qui. Forse puoi lasciarli "vincere" la battaglia del posizionamento del tutore in cambio dell'accettazione dei tuoi altri suggerimenti sugli standard di codifica? Non solo, ma si sentiranno parte della soluzione se la loro idea di posizionamento delle parentesi graffe è negli standard.
Gilles,

1
Esattamente. Ho rinunciato a cercare di convincere uno sviluppatore a fare parentesi sulla propria linea, anziché parentesi in linea, in cambio della sua conoscenza di SOLID e TDD ... un grande commercio direi;).
Martin Blore,

1
"Certo, alcune aziende tolgono completamente i privilegi di check-in dai programmatori junior. Quando finalmente imparano le regole di codifica delle aziende, ottengono il privilegio." - questo è l'unico modo per farlo quando è importante.
ottobre

2

Penso che tu stia parlando di problemi di livelli molto diversi:

come creare quelle testate a cui non piace usare le parentesi quadre in if statement,

Questo è principalmente un problema di stile / leggibilità, a meno che non vi sia un problema di precedenza esplicita dell'operatore. Quest'ultimo non dovrebbe essere molto comune, ed è comunque testabile in unità, quindi facile da riparare. Il primo può facilmente regredire in una guerra santa con poco da guadagnare, ma gravi conseguenze negative per il morale della squadra. Quindi attenzione: spingi solo le regole collaudate, che sono state accettate da almeno alcuni team / comunità e hanno dimostrato di funzionare.

o usa la stessa stringa di connessioni ovunque nel codice,

Se vuoi dire Costanti Magiche, questo è davvero un problema di manutenzione (più potenzialmente di sicurezza), e come tale IMHO qualsiasi sviluppatore esperto capirà e accetterà che si tratta di una cosa negativa.

o altro, per usare le regole di codifica senza farle opporre all'idea?

Non puoi costringere le persone a concordare con qualsiasi regola di codifica - la tua unica possibilità è di arrivare a una comprensione e un riscontro comuni da parte dei membri del team attraverso discussioni e (a volte feroci) dibattiti . Devi usare argomenti logici e convincenti , mostrando il valore dietro ogni regola e spiegando come seguirla pagherà l'inconveniente di adeguare le abitudini radicate. D'altro canto, cerca di rendere la transizione il più semplice possibile , ad esempio introducendo la formattazione automatica del codice al check-in, secondo le regole accettate.

Tuttavia, a volte devi solo accettare che le persone hanno opinioni diverse , quindi le regole di codifica che tutti possono accettare saranno indulgenti sotto certi aspetti. Accettalo e concentrati sulle aree in cui puoi migliorare le cose con meno sforzo.


"introducendo la formattazione automatica del codice al check-in, secondo le regole accettate" ... sembra interessante, ulteriori idee su dove posso trovare qualcosa del genere.
TheBoyan,

@bojanskr, oggi la maggior parte degli IDE tradizionali supporta le regole di formattazione del codice in misura minore o maggiore e può formattare automaticamente il codice al momento del salvataggio o del check-in. Per Java, sia Eclipse che IntelliJ, credo anche NetBeans, ma non ho molta esperienza con esso. Per C #, vedi il commento di @ Job sopra. Ma ci sono anche strumenti autonomi, come Artistic Style per C / C ++. E la maggior parte degli SCC che conosco supporta l'esecuzione di script / trigger specifici dell'utente al momento del check-in.
Péter Török,

2

Coinvolgili nello stabilire regole. Questo di solito aiuta a incoraggiare le persone a seguirle.


1

Ecco a cosa serve la revisione del codice. I revisori del codice non dovrebbero lasciar passare il codice che non soddisfa gli standard. Assicurati di non allentare le regole per le correzioni urgenti. Dover ripetere alcune volte sotto pressione per farlo risolverà quei riluttanti a fare correttamente il loro lavoro la prima volta.


1

La stessa stringa di connessione ovunque? La soluzione è quella di refactoring fino a quando non hai rimosso tutta la duplicazione. I codificatori copia-incolla dovrebbero andare nella jail del programmatore. (Non ridere! Steve Ballmer è il guardiano.)

Ma il vero problema qui è il tuo verbo "make" . Non puoi fare in modo che i programmatori facciano nulla e, se lo fai, stai sprecando la loro caratteristica più preziosa: il profondo impegno intellettuale che deriva dal lavorare su qualcosa a cui tieni.

Il modo in cui lo risolverei:

  1. Insistere sul fatto che il team abbia uno standard di codifica comune. Può essere lungo 5 righe, ma devono essere tutti d'accordo.
  2. Ogni volta che noti un argomento, insistono che lo risolvano insieme e lo inseriscono nello standard di codifica. Se noti che le persone riformattano le cose avanti e indietro, trattale come un argomento.
  3. Ogni volta che viene concordato un articolo standard, controlla se esiste uno strumento che ripulirà l'intero codice contemporaneamente.
  4. Ogni paio di mesi, passa attraverso lo standard di codifica e vedi quali sono ancora veri e pertinenti. Lo standard documenta solo cosa stanno facendo le persone. E non ha senso mantenere gli articoli nello standard che sono diventati ovvi.

La programmazione è uno sport di squadra o un'opera artistica collettiva. Ciò su cui le persone concordano non importa tanto quanto concordano e sono bravi a raggiungere nuovi accordi se necessario.

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.