Dovremmo insistere con un dipendente che ancora scrive un codice errato dopo molti anni? [chiuso]


13

Sto ponendo questa domanda ai programmatori C ++ perché: a) Solo un programmatore C ++ può giudicare i meriti tecnici degli esempi; b) Solo un programmatore avrà un'idea del temperamento di un altro programmatore che scrive codice come questo.

Le risorse umane e i direttori sono consapevoli che esiste un problema semplicemente perché vedono prove sul campo. È mia decisione se diamo al programmatore in questione più tempo. Molti degli errori sono a un livello molto elementare - la mia domanda (ai programmatori) è se qualcuno che professa di essere uno sviluppatore C ++ senior debba beneficiare di un dubbio basato su esempi del loro codice attuale. I non programmatori - anche le persone al di fuori della programmazione C ++ - non possono esprimere alcun giudizio al riguardo.

Per lo sfondo, mi è stato assegnato il compito di gestire gli sviluppatori per un'azienda ben consolidata. Hanno un singolo sviluppatore specializzato in tutta la loro codifica C ++ (da sempre), ma la qualità del lavoro è spaventosa. Revisioni e test del codice hanno rivelato molti problemi, uno dei peggiori sono le perdite di memoria. Lo sviluppatore non ha mai testato la presenza di perdite nel suo codice e ho scoperto che le applicazioni potevano perdere molti MB con un solo minuto di utilizzo. L'utente stava segnalando enormi rallentamenti e la sua opinione era "non ha niente a che fare con me - se si chiudono e si riavviano, tutto va di nuovo bene".

Gli ho dato gli strumenti per rilevare e rintracciare le perdite e mi sono seduto con lui per molte ore per dimostrare come vengono utilizzati gli strumenti, dove si verificano i problemi e cosa fare per risolverli. Siamo in ritardo di 6 mesi e gli ho assegnato di scrivere un nuovo modulo. L'ho esaminato prima che fosse integrato nella nostra base di codice più ampia, e sono rimasto sgomento per scoprire la stessa codifica errata di prima. La parte che trovo incomprensibile è che parte della codifica è peggiore di quella amatoriale. Ad esempio, voleva una classe (Foo) che potesse popolare un oggetto di un'altra classe (Bar). Decise che Foo avrebbe tenuto un riferimento a Bar, ad esempio:

class Foo {
public:
    Foo(Bar& bar) : m_bar(bar) {}
private:
    Bar& m_bar;
};

Ma (per altri motivi) aveva anche bisogno di un costruttore predefinito per Foo e, piuttosto che mettere in discussione il suo progetto iniziale, scrisse questo gioiello:

Foo::Foo() : m_bar(*(new Bar)) {}

Pertanto, ogni volta che viene chiamato il costruttore predefinito, viene trapelata una barra. A peggiorare le cose, Foo alloca memoria dall'heap per altri 2 oggetti, ma non ha scritto un distruttore o un costruttore di copie. Quindi ogni allocazione di Foo in realtà perde 3 oggetti diversi e puoi immaginare cosa è successo quando un Foo è stato copiato. E - va solo meglio - ha ripetuto lo stesso schema su altre tre classi, quindi non è una scivolata una tantum. L'intero concetto è sbagliato su così tanti livelli.

Mi sentirei più comprensivo se questo provenisse da un principiante totale. Ma questo ragazzo lo fa da molti anni e negli ultimi mesi ha avuto una formazione e una consulenza molto focalizzate. Mi rendo conto che per la maggior parte del tempo ha lavorato senza tutoraggio o recensioni tra pari, ma sto iniziando a sentire che non può cambiare. Quindi la mia domanda è: continueresti con qualcuno che sta scrivendo un codice così evidentemente cattivo?


15
Se hai già visto che stava scrivendo un codice errato, perché gli hai lasciato scrivere la sua merda per 6 mesi senza sorvegliarlo?
Billy McNuggets, il

4
IMO, quando vedi qualcuno che fa un brutto lavoro per un po ', NON PUOI lasciarlo lavorare da solo, anche se è solo il debug / riparazione. Se è tua volontà tenerlo nella tua azienda, DEVI sorvegliarlo e DOPO vedere se hai ancora cattivi risultati da lui. Lasciarlo lavorare da solo per 6 mesi senza guardarlo è una cattiva gestione dell'IMO.
Billy McNuggets il

3
@ user94986 Quindi se passi del tempo con lui, spiegandogli che i suoi habbit sono cattivi, dovresti tenerlo d'occhio, e se non cambia nulla, non aspettare 6 mesi per parlargli.
Billy McNuggets il

4
Se non pensa che le perdite di memoria siano un problema, non ha senso insegnargli come evitarle e fornire strumenti che lo aiutino. Il problema principale potrebbe essere che comprende erroneamente obiettivi e requisiti per il prodotto.
maxim1000,

2
Questa domanda sembra essere fuori tema perché riguarda la consulenza legale in materia di risorse umane che è problematica per noi fornire al meglio.
Ingegnere mondiale il

Risposte:


22

Il mio consiglio sarebbe di confrontarlo con questo particolare esempio e vedere cosa dice. Se nega che ci sia qualcosa di sbagliato nel codice, temo che ci sia poco che puoi fare. Se accetta di aver commesso un errore (anche se è difensivo a riguardo), almeno ci sono margini di miglioramento. Se accetti il ​​tempo e gli sforzi per migliorarlo, allora tu o un programmatore senior dovrete sederlo e programmare insieme fino a quando tutte queste tendenze non saranno appiattite (preparatevi a dedicare questa persona per almeno 1 mese).

Un cattivo programmatore, di solito posso lavorare, ma un programmatore che non può migliorare, non posso.


12
+1 per "Un cattivo programmatore, di solito posso lavorare con, ma un programmatore che non può migliorare, non posso."

Sì, vorrei anche far sapere al ragazzo che è piuttosto serio. Sembra che non gli sia stato detto o non abbia riconosciuto che c'è un problema da anni. Vieni alla conversazione pronto a segnalare esempi di cose che non avrebbe dovuto fare e in che modo ha influito sulla qualità dell'app. Se non è ancora disposto a risolvere un problema con il suo codice, probabilmente lo lascerei andare. E probabilmente non gli concederei molto tempo per mettere insieme il suo spettacolo se lo facesse. Devi assolutamente sottolineare che è in gioco il suo futuro in azienda e che gli manca un talento piuttosto critico per un devoto C ++.
Erik Reppen,

@ErikReppen Sono d'accordo, ma penso anche che i programmatori possano essere i tipi più testardi della terra. Se spingi troppo, potrebbe negare qualsiasi problema con il suo codice semplicemente a causa della sua difesa. Penso che sia importante enfatizzare la gravità della situazione, ma proverei comunque a simpatizzare con lui "Mi è capitato di notare questo piccolo errore. Ti è capitato di prenderlo anche tu? Pensi di aver fatto lo stesso errore in altre aree di il tuo programma? "
Neil,

@Neil L'unica strada attraverso un muro testardo è un calcio nel culo. E parlo per esperienza come il lato del culo testardo di quell'equazione. Detto questo, se è il primo che ha sentito parlare di un problema con il suo codice, sì, diventerei un po 'più morbido, ma sembra che abbiano provato a comunicare un problema almeno una volta prima
Erik Reppen,

@ErikReppen Forse, ma rischi che si formi solo per toglierti di mezzo. A quel ritmo, potresti anche dire "Modella, o sei licenziato". Almeno questo approccio scopre se è cosciente dei suoi errori.
Neil,

18

Quindi la mia domanda è: continueresti con qualcuno che sta scrivendo un codice così evidentemente cattivo?

No. Desidero licenziare qualsiasi sviluppatore professionista C ++ che non avesse la conoscenza di base della gestione della memoria.

Se è qualcuno che proviene da Java o C # o qualcosa del genere darei loro un po 'di grinta, ma questa è pura incompetenza.


9
Non riesco a capire come questa risposta possa essere votata. Licenziare qualcuno non è una questione che dovrebbe essere presa alla leggera.
Florian Margaine,

3
@FlorianMargaine - Certo, ma questo sembra un caso ben definito. Quanto costa questo dipendente alle vendite perse a causa di perdite di memoria o vulnerabilità della sicurezza? Quanto tempo perso nel testare / riparare questa schifezza? Quanto nel fare in modo che l'OP li faccia da baby-sitter? Quanto nell'avere altri programmatori soffrono della sua mera presenza ? A meno che il dipendente non abbia una quantità assurda di conoscenza del dominio (o ricatto), non c'è modo che sostituirli sia più costoso.
Telastyn,

1
@FlorianMargaine, Questo tipo di dipendente è chi non viene licenziato abbastanza, paralizza la società in difficoltà di riparazione del debito tecnico. Dice a grandi luci rosse: "A loro non importa, quindi perché dovremmo?". Sai cosa direbbe il dipendente che vuoi davvero? "... ma me ne importa, quindi devo andare in un posto che lo faccia". Ai cattivi già non importava, quindi rimangono nel tuo ufficio. DEVI rimuovere le persone che danneggiano la produttività, più di quanto contribuiscano. Questa non è una scelta presa alla leggera, tuttavia è davvero una linea chiara, non agire è un'azione chiara.
JM Becker,

13

Non possiamo rispondere alla parte più ampia della tua domanda. Vale a dire, se dovessi trattenere o licenziare quel dipendente. Licenziare un dipendente è difficile, ma questa è una decisione al di fuori del campo di applicazione di una comunità come questa.

Hai aggiornato la tua domanda per limitare le risposte ai programmatori C ++. Per il mio background / qualifiche: mi sono tagliato i denti in C e posso scrivere codice in C ++, C # e Java. E mi piace inseguire le condizioni di gara tra i thread perché penso che sia divertente. Sì, "ottengo" un po 'di giocherellona.

La tua risposta e la tua decisione avvolgono questo: se qualcuno può cambiare o meno dipende dall'individuo e se vuole cambiare.

Ma iniziamo con alcune domande su di te:

  1. Gli hai chiesto del codice e dell'esempio che hai citato? Qual è stata la sua impressione della recensione?
  2. Gli hai dato particolari durante quei 6 mesi sulla comprensione della manipolazione della memoria e sulla verifica che il suo codice non avesse perdite di memoria?
  3. Stavi fornendo un feedback ragionevolmente frequente durante quei 6 mesi per indicare se stava facendo progressi o meno.
  4. Hai esplicitamente dichiarato che il suo vecchio modo di scrivere codice non era più accettabile nel nuovo codice?

Devi assicurarti di poter dire di sì a tutte queste domande. Altrimenti, c'è ancora un onere di prova da parte tua per comunicare con lui.

La sua risposta alla tua recente recensione sarà la parte più eloquente.

Se ci sta provando e mostra alcuni segni di progresso, forse è necessario rivedere il processo di mentoring. Semmai, forse devi considerare di associarlo a un programmatore più esperto in modo che possa ottenere un feedback immediato mentre prende decisioni di progettazione. Non sono un fan della programmazione in coppia, ma può essere molto utile in un caso come questo. Inviarlo continuamente a fare sempre più revisioni al vecchio codice non è sempre un percorso pratico per l'apprendimento.

Se non ci ha provato, allora devi capire meglio la sua motivazione. Non ha capito che deve fare di più? Non gli interessa? Ci sono altre aree del team in cui le sue abilità sarebbero più adatte ed è più interessato a questo? Se non gli importava di provare, allora devi capire perché.

Da lì, saprai se vuole cambiare e se può cambiare. Nessun desiderio di cambiare equivale a non poter cambiare. Se c'è desiderio e un certo grado di progresso, allora considera fortemente di cambiare il modo in cui stai cercando di riabilitarlo.


1
+1 per "Inviarlo continuamente a fare sempre più revisioni al vecchio codice non è sempre un percorso pratico per l'apprendimento"
Bill

+1 per gli ultimi paragrafi. I progressi compiuti da qualcuno rispetto allo sforzo investito nel guidare qualcuno deve prendere in considerazione qualsiasi giudizio sulla performance.
Marjan Venema,

10

Temo che il suo cattivo codice non sia l'unico problema nella tua squadra.

  1. Chi recensisce il suo codice? Perché è scivolato via senza preavviso per aver accettato il codice con vulnerabilità legata alla perdita di memoria?
  2. Perché gli stress test non hanno riscontrato questo problema? Li usi? Se sì, allora perché non funzionano?
  3. Rimase incustodito per un lungo periodo di tempo. Perché?
  4. Non sta usando gli strumenti che gli hai dato. Come lo hai motivato ad iniziare a usare gli strumenti adeguati?

Dici che è stato in compagnia per un lungo periodo di tempo. Licenziare una persona del genere è raramente una buona idea (a meno che non sia un tipo di dipendente Wally). La loro conoscenza delle esigenze del cliente, dei prodotti che possiedi, ecc. È spesso molto più preziosa del codice che scrivono.

soluzioni:

  • spostalo nel QA per fargli imparare cosa evitare
  • associare la programmazione a qualcuno che sia in grado di sottolineare i propri errori
  • esteso sforzo di QA sul suo codice
  • fargli scrivere prove di stress, se vede la sua macchina di sviluppo in crash dopo aver creato e distrutto 10k di oggetti, forse imparerà
  • alcuni / tutti sopra :)

3

Prendere una decisione di licenziare qualcuno è una decisione difficile da prendere per chiunque. La tua situazione però è aggravata da diversi fattori:

  1. Sembra che questo sviluppatore sia stato in azienda per diversi anni
  2. Lo sviluppatore scrive tutto il codice C ++ dell'azienda
  3. Sembra che nessuno abbia mai discusso del livello di codice scadente con lo sviluppatore
  4. Come nuovo manager non hai idea di chi / cosa sappia lo sviluppatore / dell'azienda e quali siano le conseguenze politiche del licenziamento dello sviluppatore

Detto questo, hai trascorso gli ultimi 6 mesi a mostrare allo sviluppatore l'errore delle sue vie e il suo nuovo codice non è ancora migliorato.

In questa fase è necessario avviare una gestione proattiva in modo che entro 3 mesi

  • Un programmatore C ++ decente che sa cosa sta facendo

o

  • Terminato lo sviluppatore.

Per fare ciò, anche se è necessario sedersi con lo sviluppatore, spiegare cosa c'è di sbagliato nella scrittura / e-mail, spiegare come lo sviluppatore può migliorare e affermare molto chiaramente che se il miglioramento previsto non si materializzerà, verrà chiuso in 3 mesi.

Devi anche essere molto chiaro che il miglioramento è previsto da questo punto in poi per il resto del suo impiego presso l'azienda e non solo per il periodo di 3 mesi!

Dovresti anche informare il tuo manager e il dipartimento Risorse umane (se presente).

Durante questo processo dovrai gestire attivamente lo sviluppatore e rivedere le attività / il codice ogni 1-2 giorni e assicurarti che siano all'altezza, specificando quelli che non lo sono e spiegando cosa si può fare per migliorarli.


1

O non sei stato chiaro su quanto seriamente prendi la sua scarsa fattura (cioè è possibile che veda il tempo che hai trascorso con lui come un'opzione se vuole migliorare piuttosto che una necessità assoluta), o ha un incredibilmente cattivo atteggiamento insostenibile. Se non è già chiaro a questo sviluppatore che stai considerando la sua posizione su questo problema, allora deve essere precisato (supponendo che la tua leadership sia d'accordo con la tua autorità per terminare). Spero che lo shock comporti un cambiamento.

La decisione sull'occupazione ha implicazioni molto più ampie rispetto a questo ragazzo, tuttavia, è necessario considerare l'impatto sulla squadra. Se il suo atteggiamento è permesso di prosperare, può fornire risentimento dagli altri o far sentire agli altri che anche questo genere di cose è ok. Dal punto di vista della squadra, però, deve essere assolutamente chiaro che se è andato, è stato per le giuste ragioni e ha avuto ampie opportunità di miglioramento.

Un gioiello che ho raccolto in un corso di anni fa è il fatto che le persone con conoscenze tecniche che altri non hanno possono condurre il management a lasciarli andare. È un male per la squadra. Potresti avere paura di perdere l'unico sviluppatore c ++, ma possono essere sostituiti. Ovviamente ci sono rischi intrinseci se conosce bene i prodotti rilasciati, ma spesso ho visto persone con conoscenze tecniche / di prodotto apparentemente insostituibili sostituite più facilmente del previsto. Squadre e organizzazioni possono spesso colmare lacune che inizialmente sembrano difficili da colmare. Naturalmente se non ha competenze c ++ o conoscenze specifiche dell'organizzazione che ritieni difficili da sostituire, c'è molto meno problema!


1
Ho il sospetto che questo ragazzo sarebbe assolutamente sbalordito nello scoprire che il suo manager sta pensando di licenziarlo. Alcune persone che devi solo colpire sopra la testa con una tavola e appiattirle dicono che devono migliorare o saranno licenziate.
HLGEM,

0

Certo che non dovresti. Ricorda, questa non è una carità, stai scambiando soldi per lavoro. Se non sta sostenendo la sua parte dell'accordo, come qualsiasi transazione, smetterei di pagare.


-1

Se vuoi dargli una possibilità, sviluppa un test standardizzato che raccoglie metriche sulla perdita di memoria. Monitora i suoi progressi su base settimanale, insistendo nel vedere il codice che ha cambiato e cerca miglioramenti. Se non riesce a quel punto, licenzia l'invettiva inutile.

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.