Come gestisci codice intenzionalmente errato?

20

Ci sono molte storie su codice intenzionalmente errato, non solo su TheDailyWTF ma anche su SO. I casi tipici includono:

  • Avere un inutile costrutto che perde tempo (ad es. un ciclo vuoto che conta su un valore enorme) in modo che i programmatori possano facilmente "accelerare" l'applicazione rimuovendola al momento del loro incarico.
  • Fornire documentazione intenzionalmente fuorviante, errata o assente per generare richieste di supporto costose.
  • Generare prontamente errori o, peggio, generare anche se tutto ha funzionato bene, bloccando l'applicazione in modo da sbloccare una chiamata di supporto costosa.

Questi punti mostrano un atteggiamento più o meno malevolo (anche se a volte per caso), in particolare il primo punto si verifica piuttosto spesso.

Come si dovrebbe trattare con tali costrutti? Ignora il problema o rimuovi il codice incriminato? Avvisare il proprio responsabile o parlare con la persona che ha introdotto la "funzione"?

    
posta mafu 27.09.2010 - 10:47
fonte

6 risposte

6

La maggior parte dei codici errati è dovuta a una mancanza di comprensione e la soluzione è l'istruzione.

Intenzionalmente codice errato è completamente diverso, a causa di qualcosa completamente estraneo all'esperienza del programmatore o al resto del progetto. In quanto tale, devi scoprire perché stanno sabotando il codice di proposito e affrontare quel problema. Ciò significa, più spesso che no, politiche d'ufficio, e raramente è una situazione piacevole per chiunque.

Il modo in cui gestirò il lato politico dipende da molte circostanze (non specificate sopra). Il modo in cui gestirò il codice è innanzitutto quello di garantire che non sia l'unico fraintendimento - che sia davvero un codice errato - e quindi correggere le evidenti carenze. Se ragionevolmente possibile, scrivere test che il codice non funzionerà. Il doppio controllo che ho capito correttamente significherebbe parlare con la persona che ha scritto il codice. Questo dovrebbe essere fatto in un modo molto carino, educato, senza assumere l'intento, e può aiutare a trovare il sottostante (politico) motivo necessario in seguito.

La spedizione è più importante della perfezione della torre d'avorio, ma ci sono due punti che vale la pena affrontare. Risolvendo evidenti carenze ottieni l'80% dei risultati con il 20% dello sforzo, e quel tipo di frutti a bassa quota è raramente vale la pena ignorare. Ma ancora più importante, se non si affronta il motivo (politico) sottostante, è probabile che più intenzionalmente verrà scritto codice errato e causerà ulteriori problemi, e possibilmente impedire la spedizione.

    
risposta data 27.09.2010 - 13:18
fonte
27

Non ho mai (in 20 anni dispari) imbattuto intenzionalmente in codice errato, ma gli esempi che citi sembrano (almeno per me, ma IANAL) come tentativi di frodare un datore di lavoro o un cliente, quindi probabilmente avere l'obbligo legale di segnalarlo al proprio responsabile.

    
risposta data 27.09.2010 - 13:33
fonte
11

Dipende dalla cultura dell'azienda. Più spesso, semplicemente non è il tuo lavoro per correggere e ripulire tutto il codice errato.

Da Coders at Work , il pensiero di Jamie Zawinski sulla sovrastruttura, che può essere applicato anche in questa situazione:

At the end of the day, ship the fucking thing! It’s great to rewrite your code and make it cleaner and by the third time it’ll actually be pretty. But that’s not the point—you’re not here to write code; you’re here to ship products.

Ci sono un sacco di codificatori e codici errati là fuori, e semplicemente provare a risolverli tutti quando li incontri, a spese del progetto / compito corrente, potrebbero semplicemente non valerne la pena se il prodotto "sta funzionando". Troppo spesso, siamo tutti solo programmatori di nastri adesivi.

Vedi anche il post di Joel Spolsky: Il programmatore di Duct Tape

    
risposta data 27.09.2010 - 11:02
fonte
4

Quell'atteggiamento è il sintomo di qualcosa di peggio.

  • La direzione incoraggia la concorrenza degli sviluppatori?

  • Dove è lo spirito di squadra?

  • I compiti sono assegnati da qualcun altro oltre al team stesso?

  • ...

In ogni caso, rimuovere il codice incriminato non è sufficiente. Lamentarsi con il suo manager non aiuterà certamente a migliorare lo spirito di squadra.

Vorrei provare a parlare direttamente con la persona e cercare di capire perché, ponendo molte domande senza giudicarlo. L'intero team deve farlo senza aggressività.

Nella maggior parte dei casi, questo comportamento costruttivo mette in luce il problema reale (il peggiore), quindi puoi lavorarci sopra.

Se davvero non funziona. Rimuovi lo sviluppatore dal team.

    
risposta data 27.09.2010 - 10:56
fonte
4

Se pensassi che fosse intenzionale probabilmente lo licenzierei! Se è il risultato di qualcuno che non è un programmatore abbastanza bravo, lavorerei sulle sue capacità. Se venisse spinto dall'alto probabilmente inizierei a cercare un nuovo lavoro.

    
risposta data 14.02.2011 - 15:55
fonte
2

How should one deal with such constructs? Ignore the issue, or just remove the offending code? Notify their manager, or speak to the person who introduced the "feature"?

A seconda del contesto, uno di questi potrebbe essere il più appropriato. Altre possibilità includono chiedere di trasferire a un altro progetto, ottenere un nuovo lavoro e vari atti di dubbia moralità e / o legalità.

Tuttavia, dato che non conosciamo i fatti reali e le persone reali coinvolte, non c'è modo che qualcuno nella posizione che stai descrivendo debba prestare molta attenzione ai nostri consigli / 2 centesimi.

Se questa è una situazione reale di cui parli, potrebbe valere la pena di parlare tranquillamente con il tuo manager, chiedendo il loro consiglio su cosa dovresti fare. Se possibile, cerca di fare la conversazione su ciò che tu può / dovrebbe fare, non sul puntare il dito. Se possibile, non fare nomi. C'è una buona probabilità che il tuo manager abbia già una vaga idea del problema.

Ma il rovescio della medaglia è che potresti farla gonfiare a dismisura. Pensaci a lungo prima di fare qualsiasi cosa. Pensa alle conseguenze, inclusa la possibilità che qualsiasi tuo passo ti ritorca contro ... male.

    
risposta data 27.09.2010 - 12:19
fonte

Leggi altre domande sui tag