I Programmatori Junior dovrebbero essere coinvolti come revisori del codice nei progetti dei Senior Programmer?

54

Uno dei miei membri del team, un programmatore junior, ha notevoli capacità di programmazione per il suo livello di esperienza.

E durante le revisioni del codice, credo nell'enfatizzare l'apprendimento, non nel segnalare errori.

Ma i programmatori junior dovrebbero essere coinvolti nelle revisioni del codice per i programmatori più esperti? O le recensioni del codice dovrebbero essere frequentate solo da programmatori con esperienza corrispondente?

    
posta Md Mahbubur Rahman 12.02.2013 - 10:58
fonte

10 risposte

62

Lo scopo principale di una revisione del codice è di trovare difetti o potenziali problemi. I partecipanti richiesti alla revisione dovrebbero essere le persone che sono più adatte a identificare questi problemi, indipendentemente dal titolo o dall'anzianità.

Ad esempio, se un'applicazione è sviluppata in Python e l'ingegnere junior ha più esperienza con il linguaggio Python rispetto all'ingegnere senior che ha scritto il codice, allora potrebbero essere una risorsa preziosa nell'indicare metodi alternativi di fare qualcosa , ma possono anche avere meno conoscenza del sistema nel suo insieme.

Oltre all'esperienza in strumenti e tecnologie, considera anche l'esperienza nel dominio dell'applicazione. Qualcuno con 20 anni di esperienza ma solo 1 o 2 nel settore finanziario può essere aiutato avendo uno sviluppatore complessivamente meno esperto con soli 5 anni di esperienza nel settore finanziario che rivede il suo lavoro.

Invitare membri dello staff meno esperti a osservare e partecipare il più possibile al processo di revisione del codice può anche essere utile per consentire loro di apprendere una base di codice, porre domande e conoscere ciò che ci si aspetta da loro non solo nelle revisioni del codice, ma nel codice che producono. Tuttavia, probabilmente non vuoi coinvolgere troppe persone (concentrandosi invece sulle persone che possono supportare completamente la revisione del codice e il suo scopo) nel processo.

Questo vale davvero per qualsiasi tipo di recensione: requisiti, design, codice ...

    
risposta data 12.02.2013 - 13:29
fonte
81

Should junior programmers be involved as code reviewers in the projects of senior programmers?

Sì, dovrebbero. È una buona esperienza di apprendimento leggere il codice di altre persone. (E questo vale sia per il buon codice che per il cattivo, anche se si spera che il codice di uno sviluppatore anziano non sarebbe male ...)

Ovviamente, non è saggio solo avere juniors che fanno la revisione del codice. E non è saggio esprimere aspettative troppo alte nei ragazzi per ciò che riescono a trovare. Tuttavia, potresti anche sorprenderti delle nuove idee che i programmatori junior possono portare sul tavolo.

Un'altra risposta ha menzionato i minori che si sentono / si sentono intimiditi. Questo NON è ciò che la revisione del codice dovrebbe riguardare ... per i revisori o i revisori. Se ciò accade, il tuo gruppo deve cambiare il modo in cui fa le revisioni del codice ... e forse gli intimidatori devono essere messi in riga.

    
risposta data 12.02.2013 - 11:44
fonte
38

Aggiungo che se un programmatore "Junior" può non capire un codice per anziani allora questo è di per sé una buona misura del codice. OK ci possono essere momenti in cui non è possibile scrivere codice che tutti possano capire, ma si spera che queste siano eccezioni - se solo 1 o 2 persone possono capire il codice allora cosa succede quando quelle persone non sono disponibili e c'è un problema con vero?

Dare alle persone nuove sfide li aiuta a svilupparsi; potrebbe anche essere che non tutti sono tagliati per la revisione del codice, ma sembra dogmatico insistere che qualcuno abbia un titolo ( determinato dalla politica e dai giochi HR ) prima di essere idoneo ad aiutare in una recensione.

Come altri hanno sottolineato, una revisione del codice può essere un processo a due vie; aiuta tutti a capire la base di codice, quindi condivide le conoscenze, aiuta i giovani a imparare modi e tecniche nuovi e migliori dai loro anziani e aiuta gli anziani a perfezionare la loro comprensione e scrivendo per far sì che tutti possano seguire il codice. prendere errori.

    
risposta data 12.02.2013 - 13:52
fonte
24

Lo scopo delle revisioni del codice è quello di individuare i problemi che i test non riescono a cogliere, come problemi di manutenibilità e casi angolari. Direi che per molti aspetti i programmatori junior sono migliori adatti allo scopo:

  • Hanno più tempo a disposizione in generale.
  • È più probabile che lo prendano lentamente, riga per riga, per necessità di comprendere il codice.
  • Quando parli di manutenzione del codice, ciò significa per tutti i membri dell'azienda, non solo per i tuoi migliori programmatori. Ciò significa che i tuoi programmatori junior devono essere in grado di comprendere il codice per dichiararlo mantenibile.
  • Spesso sono meno propensi a fare ipotesi sbagliate, credendo che qualcosa funzioni nel modo in cui pensano che dovrebbe funzionare.
  • La loro formazione in un linguaggio di programmazione è più recente e meno probabilità di essere confusa con anni di esperienza in un'altra lingua. Ad esempio, un anziano potrebbe accidentalmente usare un'abitudine acquisita da C ++ che compila ma funziona in modo leggermente diverso in Java. I junior raccolgono più facilmente questi errori.
  • I revisori di codice devono solo identificare problemi, non necessariamente proporre una soluzione migliore. Spesso fanno commenti sulla falsariga di: "Non riesco davvero a capire come farlo meglio, ma questa parte è davvero confusa a causa di tutte le ripetizioni". Un programmatore più esperto può quindi apportare facilmente i miglioramenti anche se all'inizio non avrebbero notato il problema.

Questo non vuol dire che non ci sono altri modi in cui i programmatori senior sono più adatti a fare recensioni, ma il mio punto è che stai facendo un cattivo servizio se non stai sfruttando appieno la diversità della tua squadra.

    
risposta data 12.02.2013 - 19:37
fonte
13

Spesso ai juniors viene chiesto di mantenere il codice, è fondamentale che riescano a capirlo.

A volte i junior sono le uniche persone disponibili a rivedere il codice degli sviluppatori senior. Il codice dovrebbe aspettare per andare al QA (non spingiamo nulla di dev senza una revisione del codice e sto assumendo anche questo tipo di revisione del codice) perché il capo dell'anziano è in vacanza?

Ho anche chiesto espressamente ai juniors di sottoporre a revisione del codice qualcosa quando sapevo che avrebbero fatto qualcosa di simile per un altro cliente a breve o se sapevo che avevano lavorato su qualcosa di simile o che avevano un particolare set di abilità.

Se il codice è abbastanza semplice, spesso chiedo a una persona minore di fare la recensione. Perché sprecare il tempo della persona anziana se la persona giovane è abbastanza capace di fare il lavoro? Se i juniores si sentono intimiditi rivedendo il codice di senior, falli esaminare prima i pezzi più facili. Dopotutto non riesci a superare la tua condizione di junior fino a quando non smetti di sentirti intimidito.

Ho spesso riscontrato che se devo spiegare il codice a una persona minore che non lo capisce, vedrò un errore che ho fatto (di solito in un presupposto) e che nessun esperto di revisione del codice avrebbe catturato perché il il codice viene eseguito ma non esegue esattamente ciò che era previsto. Quindi, solo l'atto di spiegare le cose spesso aiuta lo sviluppatore a vedere un problema senza che il revisore del codice lo trovi. Poiché le persone più esperte non sono spesso prese attraverso il codice passo dopo passo, questi tipi di cose si trovano più facilmente quando un junior fa la recensione.

Trovo che avere dei giovani coinvolti nelle recensioni abbia molti buoni effetti. Prima li rende più sicuri quando riescono a capire il codice di una persona anziana. Li rende ancora più sicuri quando riescono a trovare un bug in quel codice.

Li espone a processi di pensiero al di fuori del proprio e permette loro di vedere altri modi di gestire le cose. Anche da senior, mi è successo - vedere un modo diverso di risolvere un problema può aprire gli occhi a nuove possibilità.

Li aiuta a imparare a leggere il codice di altre persone e dà loro la possibilità di chiedere cosa sta facendo il codice mentre è ancora fresco nelle menti dell'autore. È molto meglio che dover mantenere la cosa sei mesi dopo, quando l'autore non c'è più o è impegnato in un altro progetto e non ha tempo per le domande.

È positivo per gli anziani perché le domande mettono in luce potenziali aree in cui i giovani sono deboli e hanno bisogno di tutoraggio (in modo che possano assumersi maggiori responsabilità e dare agli anziani più tempo per svolgere altri tipi di compiti) o aree in cui il codice è semplicemente non chiaro a nessuno tranne all'autore (il che significa che potrebbe non essere nemmeno chiaro all'autore da un anno a questa parte quando deve essere cambiato). Aiuta anche gli anziani a rendersi conto che i junior potrebbero essere più intelligenti di quanto non abbiano dato loro credito per essere. Aiuta a mantenere tutti su una base professionale. Dopotutto se escludi juniores, stai chiaramente insinuando che non pensi di essere in grado di comprendere il codice che è psicologicamente sfortunato.

I minori che esaminano il codice degli anziani possono generare più rispetto professionale nella tua organizzazione. Gli anziani possono rendersi conto di aver sottostimato gli juniores e gli juniores potrebbero rendersi conto che gli anziani sanno più di quanto non abbiano dato loro credito. Talvolta, i giovani pensano di avere abilità più grandi di loro. Essere esposti al codice che non possono scrivere è un bene per queste persone perché iniziano a rendersi conto di avere molto più da imparare. Inoltre stimolerà il meglio di loro per ottenere le abilità. A scuola a volte gli studenti B non capiscono perché non hanno ricevuto un A fino a quando qualcuno non mostra loro un campione del livello A del lavoro. Lo stesso con juniores per gli anziani nella revisione del codice.

    
risposta data 12.02.2013 - 20:40
fonte
7

La mia risposta è: A volte . Sta andando a variare da programmatore a programmatore e da compito a compito.

Per:

  • Se vuoi che quei ragazzi imparino a fare una revisione efficace del codice, allora il modo migliore è per loro di vedere come lo fanno i senior.
  • Un programmatore junior potrebbe avere più esperienza di uno senior in una particolare lingua / dominio / ecc.
  • Forzando i ragazzi a valutare il codice degli anziani, inevitabilmente impareranno cose. Associare la programmazione sarà un modo più efficace per farlo, dal momento che tutte le domande che lo junior può avere possono ottenere risposte immediate.
  • Il codice di nessuno è sacro e nessuno è così bravo che il suo codice non debba essere rivisto. Se non lo fai, chi rivedrà il codice dei tuoi ragazzi migliori?
  • Non tutti i junior sono uguali e non tutti gli anziani sono uguali. A volte potrebbe non esserci molto spazio, quindi non rimanere impigliato nei titoli di lavoro.

Contro:

  • C'è il rischio che le recensioni si impantanino in caso di problemi da parte dei juniores.
  • Il livello di conoscenza / abilità richiesto potrebbe semplicemente andare oltre le capacità del giovane. Questo non solo perderà tempo, ma potrebbe anche demoralizzarli.
risposta data 12.02.2013 - 11:49
fonte
5

Sono fermamente convinto che tutti i membri del team debbano essere coinvolti su entrambi i lati delle revisioni del codice. I giovani dovrebbero rivedere il codice Senior e viceversa. Perché entrambi? Perché di solito non si tratta solo se il codice è "risolve il problema". Non posso dirti quante volte ho dovuto spiegare un pezzo di codice a qualcuno e improvvisamente ho trovato un modo molto migliore di farlo alla fine della spiegazione. Le recensioni di codice hanno probabilmente 3 scopi:

  1. Verifica che il codice sia corretto
  2. Chiedi allo scrittore di pensare a come gli altri vedranno il loro codice
  3. Ottieni il feedback del lettore su cosa potrebbe essere migliorato e un secondo paio di occhi generali

Sono un junior e di solito rivedo un codice scritto di alto livello. È una politica aziendale generale "tutto viene revisionato dal codice da qualcuno". Imparo molto da questi riesaminare il loro codice e avere l'opportunità di fare domande sul perché le cose sono fatte in un certo modo. E a volte, propongo un modo più pulito per fare un certo pezzo di codice e così via. Molto più raro delle persone che mi dicono come migliorare il mio codice, ma è successo almeno una volta.

È importante anche quanto formali siano le tue recensioni di codice. I nostri sono molto informali e consistono in "hey guarderai il mio codice" che viene detto attraverso i cubicoli o in un canale IRC privato. Potrei immaginare se rivedere il codice in un contesto più formale, il junior sarebbe probabilmente molto più intempestato sulla revisione del codice di un anziano.

    
risposta data 12.02.2013 - 17:37
fonte
2

Assolutamente, gli ingegneri junior dovrebbero rivedere il codice degli ingegneri senior, almeno una parte del tempo.

Nella mia esperienza, è piuttosto raro che il revisore in una revisione del codice uno a uno vedesse effettivamente un errore che manca al codificatore originale, sia che il revisore sia senior o junior; il revisore non deve nemmeno essere umano . È molto comune, d'altra parte, che il codificatore originale riconosca un errore mentre cerca di spiegare il codice, e più il revisore è più giovane, più è probabile che sia, a causa della profondità richiesta di spiegazione.

Alcuni benefici, più spesso trascurati, della revisione del codice, a mio avviso, che sono forse più importanti a lungo termine rispetto alla rilevazione di errori:

  • Condividere la conoscenza di ciò che sta effettivamente accadendo nella base di codice - "Aspetta, penso che Bill avesse una classe che fa X, non abbiamo bisogno di scriverne una nuova".
  • Condivisione della conoscenza delle buone tecniche e dello stile di programmazione.

In entrambi questi aspetti, un revisore junior tende a beneficiare più di uno senior.

    
risposta data 12.02.2013 - 20:31
fonte
2

I programmatori Junior dovrebbero assolutamente eseguire revisioni del codice per i loro colleghi senior!

Tuttavia, non dovrebbero essere l'unico revisore . Associale con uno sviluppatore più esperto per la revisione del codice.

Ci sono una miriade di vantaggi:

  • L'autore sarà costretto a spiegare altro codice. Parlare attraverso il tuo codice è uno dei modi migliori per trovare problemi con esso, o modi migliori per farlo.

  • L'autore troverà punti deboli nel codice. È probabile che lo sviluppatore junior venga confuso da alcuni dei blocchi più avanzati. Spesso questi sono "troppo ingannevoli" per il loro bene e potrebbero beneficiare della semplificazione.

  • Gli sviluppatori junior impareranno meglio le pratiche di codifica. Le revisioni del codice sono un'opportunità per insegnare con l'esempio.

  • Lo sviluppatore junior sarà un revisore di codice più efficace. la revisione del codice è difficile . Più esperti sono con le revisioni del codice, più le recensioni del codice diventano più veloci ed efficaci.

  • Gli sviluppatori junior avranno una conoscenza più approfondita della base di codice. Sii egoista! Tirando in anticipo gli sviluppatori junior, sarai in grado di consegnarli prima a loro.

  • Gli sviluppatori junior si sentiranno più coinvolti. Gli sviluppatori junior inizieranno a vedere il codice "senior" (e i loro colleghi) meno estraneo e intimidatorio. Questo è un vantaggio enorme e spesso trascurato delle revisioni del codice.

  • Lo junior dev è un nuovo set di occhi. Non sono indottrinati come qualcuno che ha lavorato al codice base per un lungo periodo di tempo. È più probabile che lo sviluppatore junior indichi diversi modi di realizzare le cose mentre fanno domande. Non scrollarsi di dosso i loro commenti più selvaggi senza almeno qualche considerazione!

  • Gli sviluppatori senior sono ritenuti responsabili. ho visto spesso situazioni in cui gli sviluppatori senior tendono a sorvolare il codice degli altri (fiducia, pigrizia, ecc.). Un ulteriore set di occhi aiuta a scoraggiarlo.

Il lato negativo da considerare è che tutte le parti coinvolte trascorreranno una discreta quantità di tempo nell'esecuzione delle revisioni del codice. Quindi, può essere un po 'difficile vendere alla gestione. Tuttavia, i benefici superano di gran lunga il ritmo più lento.

    
risposta data 04.08.2013 - 22:51
fonte
0

Viene eseguita una revisione del codice per la revisione del codice, non per l'apprendimento. Se fossi un programmatore junior, sarei intimidito nel rivedere il codice di senior.

D'altra parte, leggere il codice di senior è un ottimo modo per apprendere, a condizione che l'anziano sia disponibile per rispondere a tutte le domande.

Due alternative potrebbero essere:

  • lascia che i Juniors partecipino alle riunioni di revisione del codice e consenti ad ogni partecipante di essere aperto ad alcune discussioni di insegnamento / apprendimento
  • programmazione della coppia pratica
risposta data 12.02.2013 - 11:06
fonte

Leggi altre domande sui tag