Come gestire il codice "quasi buono" di uno sviluppatore junior? [chiuso]


95

Ho una domanda sulla gestione della squadra. In questo momento ho a che fare con uno sviluppatore junior che lavora in remoto da una fabbrica di codifica. Il ragazzo è aperto alle critiche e disposto a imparare, ma ho qualche dubbio su quanto dovrei spingere alcune cose.

In questo momento quando qualcosa è chiaro ed evidente una violazione delle buone pratiche: come violazione di SRP, oggetti di Dio, nomi non significativi per metodi o variabili; Sottolineo cosa deve risolvere e cerco di spiegare perché è sbagliato.

La mia domanda è: quando mi fermo? In questo momento se ci sono alcune piccole violazioni dello stile di codifica come nomi di variabili nella lingua sbagliata (la squadra precedente ha mescolato spagnolo e inglese e sto cercando di risolverlo), o alcuni problemi strutturali minori sto lasciando andare e risolverlo se Ho del tempo libero o ho bisogno di modificare la classe problematica. Sento che questo è un bene per il morale della squadra, quindi non sto spingendo costantemente indietro il codice su ciò che un principiante potrebbe sembrare dettagli minori, il che può essere abbastanza frustrante, ma mi preoccupo anche che essere troppo "morbido" potrebbe impedire al ragazzo dall'imparare come fare alcune cose.

Come bilanciare la linea tra insegnare al ragazzo e non bruciarlo con continue critiche? Per un giovane può essere frustrante se gli dici di rifare cose che ai suoi occhi sta funzionando.


7
Quanto tempo hai passato per assicurarti che sappia quali sono le tue aspettative?
Blrfl,


13
@gnat Penso che non sia lo stesso caso, il mio problema non è che stiamo superando le stime o esagerando con il codice. È un dato di fatto che siamo in anticipo. La mia domanda è come bilanciare la linea tra insegnare al ragazzo e non bruciarlo con continue critiche, per un giovane può essere frustrante se gli dici di rifare cose che ai suoi occhi sta funzionando.
Zalomon,

4
Ho modificato questo per renderlo più sull'argomento. Credo che questo sia diverso dalla domanda duplicata collegata.
Enderland,

3
Alcune cose che ho provato in questo senso sono utili: accoppia la programmazione - ottieni informazioni su come lavora e pensa e magari esponilo ai tuoi processi mentali mentre attraversi il tuo codice. Trova i compiti in cui è bravo - a volte otterrai risultati migliori lanciandogli un sacco di piccoli bug contro il lavoro di grandi dimensioni. Disegni tecnici: dai il primo colpo nella progettazione del software senza toccare il codice. Questo gli permette di pensare alla struttura e al processo piuttosto che abbassare la testa e sfornare il codice. Infine buona fortuna. A volte ci vuole più persistenza del previsto ma ne vale la pena se diventa produttivo.
Sandy Chapman,

Risposte:


84

Se ritieni che il codice debba essere corretto prima dell'unione, fai dei commenti. Preferibilmente con "why" in modo che lo sviluppatore possa imparare.

Tieni presente che il codice viene letto molto più spesso di quanto scritto. Quindi le cose che sembrano "minori" possono effettivamente essere davvero importanti (ad esempio nomi di variabili).

Tuttavia, se ti ritrovi a fare commenti che sembrano noiosi, forse considera:

  • Il tuo processo CI dovrebbe catturarli?
  • Hai una chiara "guida per sviluppatori" a cui fare riferimento (o è tutto documentato nella tua testa)?
  • Questi commenti contribuiscono effettivamente alla qualità del codice?

Molte persone sacrificano la produttività all'altare del processo o della perfezione. Fai attenzione a non farlo.

Prova a visitare il tuo collega di persona, se possibile. Oppure usa le videochiamate. Costruire una relazione rende le critiche (anche le revisioni del codice) più facili da gestire.

Se scopri che un pezzo di codice ha troppi problemi di risposta, richiedi la revisione su pezzi di codice più piccoli. Le modifiche incrementali hanno maggiori probabilità di evitare alcuni dei problemi di progettazione più significativi, poiché per definizione sono più piccoli.

Ma assolutamente non unire le cose e poi tornare indietro e ripararlo. Questo è passivo aggressivo e se lo sviluppatore ti trova a farlo, ucciderai il loro morale.


65
@ 9000 è sorprendente quanto spesso le persone siano frustrate dal fatto che le persone non contribuiscono secondo i loro standard, quando tali standard non sono nemmeno documentati da nessuna parte ...
Enderland,

32
I nomi delle variabili sono assolutamente importanti nel descrivere l'intento del codice; nomi di metodo / funzione, ancora di più. Ottenere i nomi giusti non è un perfezionismo inutile, è necessario per la manutenibilità.
9000

9
@Zalomon Sicuramente menzionalo; di più, trasformalo in una discussione. Come sviluppatore junior ho lavorato con alcuni sviluppatori senior diversi. La mia migliore esperienza è stata con uno sviluppatore che mi ha illustrato tutti i suoi consigli, anche quelli "piccoli" come un nome leggermente migliore per una variabile. Non solo ho imparato molto da lui, ma mi sentivo così bene che stava ascoltando i miei processi di pensiero e includendomi nella discussione - mi ha fatto desiderare che rivedesse il mio codice più per poter saperne di più. (continua)
dj18

6
@Zalomon (continua) D'altro canto, uno sviluppatore senior che ha apportato modifiche alle mie spalle (anche se glielo dici dopo, è ancora dietro la sua schiena) era totalmente demoralizzante - mi ha fatto sentire come se stessi lavorando con un autocrate che io ho dovuto capire come per favore.
dj18,

6
La mia (piccola) esperienza di tutoraggio di sviluppatori junior dimostra che far valere la pena pensare a uno sviluppatore di pensare al proprio nome ed esprimere lo scopo dei dati nel nome della variabile. Aiuta gli sviluppatori a capire effettivamente cosa sta facendo il loro codice, in modo molto meno ondulato rispetto al solito. A volte li porta a trovare errori logici nel codice in questione, o semplicemente modi migliori per esprimere le cose. (La stessa cosa funziona per me; la differenza è che ho la disciplina interiorizzata, grazie ai rigidi revisori dei codici che avevo in passato.)
9000

19

Mantieni le critiche sul codice piuttosto che sullo scrittore.

Ogni lavoro prodotto ha un attaccamento emotivo intrinseco. Prendi in considerazione l'idea di alleggerire dissociando il codice dallo scrittore il più possibile. La qualità del codice dovrebbe essere stabilita costantemente come un obiettivo comune che entrambi affrontate, insieme, piuttosto che un punto di attrito tra voi.

Un modo per raggiungere questo obiettivo è scegliere saggiamente le tue parole. Sebbene agli STEM piaccia pensare se stessi come altamente logici, le emozioni fanno parte della natura umana. La verbosità usata può essere la differenza tra sentimenti feriti o risparmiati. Dire "Questo nome di funzione sarebbe più coerente con le convenzioni se fosse in inglese" è preferibile a "Hai scritto questo nome di funzione in modo errato e dovrebbe essere in inglese". Mentre quest'ultimo è ancora docile e da solo sembrerebbe bene, rispetto al primo i suoi difetti diventano evidenti - quando si prepara cosa dire di persona o un'e-mail esaminare se il tuo contesto, le parole e il focus sono o meno sui problemi piuttosto che la persona .

Linguaggio del corpo

Mentre le parole sono importanti, la maggior parte delle comunicazioni non è verbale. Presta attenzione al linguaggio del corpo, anche sottigliezze apparentemente insignificanti come l'orientamento più opaco, ad es. Molte interazioni senior-junior si verificano faccia a faccia, ma un approccio side-by-side sarebbe molto più favorevole al risultato desiderato.

Dare un feedback positivo onesto

Una moltitudine di studi mostra che le informazioni vengono apprese più rapidamente e conservate meglio quando premiamo i buoni comportamenti piuttosto che punire quelli cattivi. A volte notando semplicemente che le prestazioni sono state migliorate con un semplice "buon lavoro" o uno più specifico "Ultimamente ho notato che il tuo stile ha adattato i nostri standard a un tee, un ottimo lavoro!" anche integrare questo riconoscimento di miglioramento facendogli consigliare a loro volta qualcun altro sulle questioni che hanno modificato può fare la differenza per il tuo sviluppatore e il suo lavoro.


2
Sul punto di verbosità: quando devi usare un pronome personale, semplicemente scegliendo "noi" invece di "tu" depersonalizza anche la critica, nella mia esperienza su entrambi i lati della revisione del codice.
Josh Caswell,

6

Il ragazzo è aperto alle critiche e disposto a imparare, ma ho qualche dubbio su quanto dovrei spingere alcune cose.

Spingi tutto il possibile. Se il ragazzo sta imparando, ed è il tuo lavoro rivedere il suo codice, entrambi hai molto da guadagnare se fa un buon lavoro.

Ciò significherà meno codice da rivedere in futuro e possibilmente dare alla tua squadra un obiettivo di assunzione.

Inoltre, se ti tratteni, non stai aiutando, ma con condiscendenza.

Solo per il fatto che hai pubblicato la tua domanda qui, chiedendoti se stai facendo troppo, mi segnala già che non hai bisogno di questo consiglio specifico, ma per gli altri, ecco che arriva: ricorda solo che spingere forte non significa essere un coglione.

Essere un mentore non è un compito facile. Dovrai anche lasciare un po 'di spazio per fargli fare degli errori e correggerli da solo, assicurati solo che lo farà da qualche parte che non faccia un danno reale.


5

Sulla base della tua descrizione, la lascerei a: "va bene. Ci sono alcune cose che avrei fatto diversamente ma non sono molto importanti".

Come sembri capire, la critica ha un costo e se passi molto tempo a sgranocchiare i dettagli, diventa un problema morale. Idealmente, tutti gli standard di codifica vengono controllati automaticamente e non è possibile crearli se non li si sta seguendo. Questo è un enorme risparmio di tempo e ti consente di iniziare a lavorare. Se riservi le tue critiche a "cose ​​che contano", i tuoi consigli avranno un impatto molto maggiore e verrai considerato come un mentore apprezzato. È davvero cruciale distinguere tra cose che non vanno bene e cose che non sono esattamente come lo faresti tu.

Credo nel concetto del momento insegnabile . Se lo sviluppatore ha abbastanza capacità mentale, potrebbe chiedere i dettagli su cosa faresti diversamente. (S) potrebbe non farlo e va bene. Le persone si esauriscono e all'inizio di una carriera può richiedere molta energia mentale per realizzare cose che sembrano semplici in seguito.


Uno dei modi per evitare cicli infiniti di revisioni del codice è di apportare piccole modifiche. Nessuna richiesta pull è ridicolmente piccola se apporta una modifica benefica (ho apportato la mia quota di PR a 1 carattere). Più piccolo è, meglio è. Taglia senza pietà la portata dei biglietti consegnati agli sviluppatori junior e continua a farli fare. Una volta che sono bravi in ​​tutto il processo di lettura-comprensione-codice-test-revisione-distribuzione, l'ambito può aumentare.
9000

1
Non penso che sia una buona idea dire al dev "non sono molto importanti" se sono abbastanza importanti da consentire all'OP di tornare indietro e cambiare in seguito.
Enderland,

3
@enderland Nella mia esperienza, non esiste un codice perfetto. Puoi sempre migliorarlo in seguito, quindi non è molto rilevante qui. L'OP afferma che queste sono cose da "sistemare se ho tempo libero". Esistono due tipi di problemi. Cose che devono essere riparate e cose che non hanno bisogno di essere riparate. Quest'ultimo può o meno essere risolto e questi sembrano rientrare in quella categoria. È un appello al giudizio ad un certo livello, ma penso che se, come sviluppatore esperto, non sei sicuro che valga la pena chiamarlo come un must, probabilmente non lo è.
JimmyJames,

5

Prenderei in considerazione l'idea di accettare il suo lavoro quando è accettabile, non perfetto. E poi il prossimo compito è dopo una discussione per riformattarlo immediatamente apportando tutti i piccoli ma importanti cambiamenti che desideri.

Quindi, quando il lavoro viene accettato per la prima volta, il tuo messaggio è che non era male, e alcuni posti lo avrebbero accettato abbastanza bene, ma non i luoghi in cui vorresti essere uno sviluppatore junior che vuole imparare il suo mestiere correttamente.

Quindi non dici "Rifiuto il tuo lavoro perché non è abbastanza buono". Dici (a) "Accetto il tuo lavoro perché è abbastanza buono", e poi (b) "Ma lo voglio meglio".


3
Oppure "(b) E so che puoi fare di meglio". Se chiede "insegnami", sai che è sulla strada giusta. :)
Machado,

1
Nella mia precedente posizione, abbiamo usato Stash / BitBucket come strumento di revisione del codice. Aveva la possibilità di bloccare una richiesta di pull impostando un'attività in sospeso o rifiutando completamente la richiesta di pull. Li userei solo per le modifiche necessarie. Se ci fosse un cambiamento estetico (ad es. Leggibilità del codice minore, migliore struttura dei dati, refactoring) lo segnalerei con suggerimenti, ma non aggiungere un'attività di blocco, farlo se hai tempo. Ciò previene anche le scadenze mancanti per piccoli problemi.
Hand-E-Food,

4

Domanda piuttosto aperta, ma qui ci sono un paio di idee.

  1. Revisioni tra pari (dallo sviluppatore junior)

    Il modo migliore per qualcuno di imparare il modo "giusto" è vedere gli altri farlo. Tutti i tuoi sviluppatori eseguono revisioni del codice? Potrebbe non essere una cattiva idea lasciare che anche il tuo sviluppatore junior li esegua (anche se dovresti anche richiedere almeno una recensione da uno sviluppatore senior). In questo modo vedrà buoni programmatori in azione, inoltre osserverà che ci sono commenti di revisione diretti a ingegneri diversi da se stesso, il che significa che non è personale.

  2. Feedback anticipato / Revisioni delle attività

    Consentire allo sviluppatore di partecipare alla propria suddivisione delle attività. Chiedigli di registrare il progetto previsto nelle note dell'attività e di inviare una "revisione del codice" senza modifiche e solo l'attività. In questo modo puoi rivedere il suo piano prima che abbia scritto una singola riga di codice. Una volta che il suo compito è stato rivisto, può iniziare la codifica (dopodiché invierà un'altra revisione del codice). Questo evita la situazione demoralizzante in cui lo sviluppatore ha scritto un sacco di cose e devi dirgli di riscriverlo.


3
Mi piace l'idea della peer review, per il momento siamo solo in due nella squadra ma posso fargli rivedere il mio codice. Se riesce a capire cosa faccio e trova alcune incoerenze, può essere d'aiuto, sia per la qualità del codice che per il suo morale. Mi ha aiutato quando stavo imparando a vedere che non ero il solo a fare errori +1
Zalomon

2

Se il codice viola oggettivamente uno standard scritto e inequivocabile, penso che dovresti continuare a respingere fino a quando non viene risolto ogni problema. Certo, potrebbe essere leggermente fastidioso per lo sviluppatore i primi pochi impegni, ma potrebbero anche imparare le linee guida prima e poi.

Inoltre, se permetti alcune violazioni degli standard qua e là, questi creeranno un precedente negativo - vedi la teoria delle finestre rotte . Inoltre, è molto più facile ricordare di seguire gli standard se è già costantemente applicato alla base di codice. Quindi davvero, vincono tutti, compresi gli sviluppatori junior in questione.

Non penso che il morale sia un grosso problema fintanto che lo standard di codifica è scritto. Solo se entrasse in un territorio più "soggettivo", lo avrei fatto diversamente ", allora dovresti preoccuparti, poiché l'approccio degli sviluppatori potrebbe essere altrettanto valido.


2

Prendi in considerazione l'adozione di un flusso di lavoro di revisione del codice, in cui gli sviluppatori pubblicano i loro commit proposti su uno strumento come Github Pull Requests o Phabricator Diffusion e ottieni il peer sign-off prima di apporre le loro modifiche sul ramo master condiviso.

In questo modo, piuttosto che criticare retroattivamente o chiedere a qualcuno di ripetere ciò che è già stato fatto, il lavoro non è ancora finito fino a quando non passa la revisione tra pari. Il avanti e indietro con i peer fa parte del processo di ingegneria del software quanto il avanti e indietro con il compilatore.

Puoi pubblicare le tue preoccupazioni come commenti su determinate righe e intrattenere discussioni su di esse. Può fare lo stesso con il tuo codice. La discussione rimane focalizzata sulle modifiche specifiche al codice proposto e non sulle prestazioni o le competenze di qualcuno in generale.

Anche i geniali ingegneri senior della mia azienda sono grati quando le revisioni del codice catturano errori di battitura o li costringono a rendere le cose più chiare. È del tutto normale che i nuovi assunti richiedano più cicli di iterazione. Nel tempo, inizi a risolvere in modo riflessivo i tipi di problemi che conosci attireranno i commenti prima di pubblicare un diff. Ottenere una percentuale più alta delle tue differenze accettate al primo tentativo è come sai che stai migliorando.


1

Non sto inviando costantemente il codice su cosa potrebbe sembrare un principiante dettagli minori, il che può essere abbastanza frustrante, ma mi preoccupo anche che essere troppo 'soft' potrebbe impedire al ragazzo di imparare a fare alcune cose.

Queste sono sia reali possibilità che preoccupazioni valide. Chiedi allo sviluppatore come si sentono al riguardo.


In realtà mi ha detto che si sentiva stupido. Sto cercando di mantenere le critiche sul lato positivo e gli ho detto che ero contento del suo lavoro, gli ho anche spiegato che avevo questo tipo di dubbi quando stavo iniziando, ma devo presumere che alcuni dei feedback sul dargli per migliorare il suo lavoro sta sbagliando.
Zalomon,

2
Spiega che non perderesti tempo a criticare attentamente il suo codice se non ti aspettavi che gli venisse riconosciuto un programmatore migliore. E sii scrupoloso nel distinguere tra "devi sistemare questo perché il codice sia accettabile" e "ecco qualcosa che puoi fare ancora meglio la prossima volta". Fornire grandi quantità di critiche approfondite e accurate è il dono più grande che puoi fare a un programmatore junior. In caso contrario, li rende un programmatore peggiore. Le critiche dovrebbero iniziare a diminuire. Devi solo fare ogni errore una volta, forse due volte, e ci sono solo così tanti errori.
David Schwartz,

1

Supponendo che tu abbia qualche richiesta pull o flusso di lavoro di revisione del codice, e sembra che tu lo faccia, consiglierei di notare cose che sono "non critiche" o "preferite".

Se vedi un PR in uno stato simile a quello che stai descrivendo, con alcuni problemi stilistici minori o che necessitano di refactoring non critico, lascia un commento, ma sentiti anche libero di approvare. Dire qualcosa come "In futuro, forse provare a evitare nomi di metodi come questo a favore di qualcosa come descrittivoMethodName" documenta la tua opinione senza costringerli a cambiarlo o bloccarne lo sviluppo.

Ora conoscono le tue preferenze e, se stanno cercando di migliorare, si spera che notino una situazione del genere in futuro. Inoltre lascia la porta aperta a loro in realtà cambiandolo in quel momento, se sono d'accordo con te e lo considerano abbastanza critico.


0

Ho a che fare con uno sviluppatore junior che lavora in remoto da una fabbrica di codici.

Purtroppo questa non è una situazione ideale: un programmatore avanzato responsabile di un programmatore principiante, con separazione geografica. Non sorprende che ci sia una certa tensione, ma la disparità può essere mitigata.

Sono curioso, cosa intendi con "fabbrica di codifica"? Questa terminologia, per me, indica un atteggiamento preoccupante che potrebbe esacerbare alcuni dei problemi di gestione che hai citato.

... violazione di SRP, oggetti di Dio, nomi non significativi per metodi o variabili; Sottolineo cosa deve risolvere e cerco di spiegare perché è sbagliato.

Il problema, penso, è che il tuo sviluppatore junior sta emettendo codice senza aver attraversato un corretto processo di progettazione. Questo è un errore da parte tua, in qualità di manager e sviluppatore senior, nel fornire indicazioni e insegnare buone abitudini di sviluppo del software. In primo luogo è possibile impedire la scrittura di codice errato se si lavora per la prima volta insieme per disegnare uno schema. Sarebbe preferibile criticare e riscrivere il codice dopo che è stato prodotto, sia in termini di efficienza che di morale.

Probabilmente dovrai regolare nuovamente il flusso di lavoro. Sembra che al momento ti aspetti che ti consegni dei prodotti. Ciò di cui hai bisogno è una collaborazione più stretta, in modo da poter fornire assistenza in ogni fase dello sviluppo. Parla del design e dell'interfaccia prima dell'inizio della codifica. Durante la codifica, esegui checkpoint più frequenti per rilevare i problemi in anticipo. Se possibile, prova a programmare la coppia, tramite condivisione dello schermo con un canale audio.

Tutto ciò richiederà maggiori sforzi da parte tua, ma probabilmente ne varrà la pena, considerando la relazione problematica che hai attualmente.


-1

Se si tratta di una violazione degli standard di codifica, mostragli dove si trova in modo che lui / lei sappia. Se devi continuare a mostrargli lo stesso errore, potresti avere un problema con qualcuno che non può conformarsi alle regole o si rifiuta di farlo. Non usare il tuo tempo libero per correggere gli errori. Questa persona dovrebbe correggere i propri errori in modo da non farli più.

Digli sempre cosa hanno fatto bene e come possono migliorare la prossima volta. Possiamo sempre migliorare in alcune aree. Il feedback è fondamentale per migliorare in qualsiasi cosa.


-1

Un'altra idea per affrontare "troppe critiche" è quella di fare di tanto in tanto un compito da solo e lasciare che uno sviluppatore junior esegua una revisione del codice per te. Questo ha almeno due vantaggi:

  • possono imparare come dovrebbero essere fatte le cose.
  • nei casi in cui esistono più soluzioni valide o nomi di variabili, accetto suggerimenti di approcci diversi ma (quasi?) ugualmente buoni. Quando aggiusto il mio codice a causa del commento di qualcuno, sto mostrando alle persone che sono rispettate e le critiche riguardano sempre solo il codice, indipendentemente da chi sia l'autore.

Sarei felice di sapere cosa c'è che non va nel mio post. Un downvote è un segno comprensibile di disaccordo, ma cancellare i voti ?!
BartoszKP,
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.