2010-11-19 10 views
23

Un mio collega stava implementando una nuova funzionalità in un progetto su cui lavoriamo insieme e lo ha fatto prendendo un file contenente l'implementazione di una funzionalità simile dello stesso progetto, creando una copia di esso rinominando tutte le dichiarazioni globali e leggermente modificare l'implementazione. Quindi abbiamo finito con due file di grandi dimensioni quasi identici a parte la ridenominazione.Come convincere un collega che la duplicazione del codice è errata?

Ho cercato di spiegare che rende il nostro progetto più difficile da mantenere, ma non vuole cambiare nulla dicendo che è più facile per lui programmare in questo modo e che non c'è motivo di correggere il codice se esso "non è rotto".

Come posso convincerlo che tale duplicazione del codice è una cosa negativa?

È correlato a this questions, ma sono più interessato alle risposte rivolte a una persona tecnica (un altro programmatore), ad esempio un riferimento a una fonte autorevole come un libro sarebbe ottimo. Ho già provato argomenti semplici e non ci sono riuscito.

+24

prossima volta qualcosa deve essere cambiato in entrambi i file, assicurarsi che il compito viene assegnato a lui. Meglio ancora, vedi se riesci a convincerlo che dal momento che pensa che la duplicazione sia OK, dovrebbe * possedere * tutti questi compiti futuri. POI vedere come gli piace fare lo stesso lavoro due volte. – FrustratedWithFormsDesigner

+0

Wiki di comunità? – Caladain

+2

Ho un collega così ... Sento il tuo dolore. :( –

risposta

22

Chiedigli cosa farà quando troverà un errore nel suo codice. Quanti posti avrà ora per sistemarlo?

È inoltre possibile visualizzare le risposte a this question (Perché "copia e incolla" del codice è pericoloso?).

+1

o ha bisogno di un nuova caratteristica. –

+2

@Downvoter - cura di spiegare? – Oded

8

Dagli una copia di Refactoring.

+1

Questo è un buon suggerimento. In realtà speravo di ottenere qualche riferimento come questo. Grazie. – vitaut

+2

Proprio come un riferimento futuro per un principiante come me: http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672 – Max

2

Appello al tuo capo per motivi tecnici. Se il capo è d'accordo con i metodi del tuo collega/e/o non gli fa aggiustare, allora non c'è molto che tu possa fare se il ricorso alla ragione non funziona.

+0

Se qualcuno è quello impostato nei loro modi, facendo appello a un'autorità superiore è spesso l'unico modo per renderli conformi. Il vecchio detto di condurre un cavallo all'acqua .. – Caladain

3

Perché quando trovi un bug, devi cambiarlo in due punti. Perché quando vuoi aggiungere una nuova funzione, devi aggiungerla in due punti.

5

Migliora il tuo versione del codice così tanto che lui è frustrato con la gelosia, poi dire - se si fosse appena collegato al mio codice ...

+0

+1 E se dopo questo trovi un bug nella tua "versione" - ha bisogno di sistemarlo nella sua. Funziona particolarmente bene se le tue "versioni" sono molto divergenti. – Audrius

1

dirgli che non si sa mai dove un'applicazione può andare in un business ... Una semplice applicazione di test a volte può essere modificata continuamente, e alla fine finisce per essere usata molto ... L'ho vista spesso nelle piccole aziende. E poi, invece di ricominciare da capo e perdere tempo su cose che avrebbero potuto essere risolte prima, potresti semplicemente farlo ora, breve e dolce, mentre può essere ...

11

Quando desidera il caffè, fallo prendere un sorso alla volta dalla caffettiera invece di una tazza intera. Ciò è particolarmente efficace se aggiunge panna e zucchero che dovranno essere sbucciati in minuscole porzioni. Questo dovrebbe illustrare come i compiti ripetitivi siano molto macchinosi e faticosi (come correggere 20 pezzi di codice anziché uno).

Quindi, invia un link a questo post in modo che possa vedere tutte le altre persone che hanno le spalle.

9

Ci sono due opzioni qui:

  1. Lui è una persona razionale che semplicemente non ha troppa esperienza. In questo caso, puoi razionalizzare il tuo argomento, magari mostrandogli un esempio più chiaro di duplicazione del codice di qualcun altro nel tuo codice. Puoi anche trovare un bug nella copia originale (o anche meglio, alcuni bug), e dirgli che ora il suo codice è rotto e che deve ripararlo.

  2. È un asino testardo: Allora non dovresti sprecare energia su di lui. Vai dal suo capo e lascia che sia il capo a occuparsene. Alcune persone sono proprio così.

Mentre la prima opzione è ovviamente molto meglio, a volte non si ha scelta. E se tu sarai quello che alla fine avrà bisogno di mantenere il suo codice alle 3 del mattino perché un cliente importante inizia a gridare dall'altra parte della terra - allora è sicuramente il tuo problema, e il tuo capo dovrebbe gestirlo.

Infine, se il tuo capo pensa che ti sbagli, probabilmente sei nel posto sbagliato.

+0

Lui è una terza opzione. Ha molta esperienza di programmazione nel suo strano modo di incollare le copie. In realtà è riuscito a sviluppare un'incredibile capacità di mantenere un grande corpo di tale codice che è più o meno funzionante. Fortunatamente la maggior parte di esso è in un progetto diverso e preferirei gratificare i miei occhi piuttosto che vedere questo codice. Ma forse non è completamente senza speranza e potrebbe essere convinto che c'è un modo migliore. – vitaut

+0

Questo diventa un problema di gestione. I programmatori esperti che hanno cattive abitudini di codifica sono difficili da addestrare. Il più delle volte, far vedere loro l'errore dei loro modi è semplicemente far sentire loro il dolore. Lasciando loro sapere che saranno responsabili per il mantenimento di tutte le duplicazioni che hanno creato, indipendentemente dal programmatore originale. Sfortunatamente, non sei nella posizione di manager. Spero che il tuo manager sia d'accordo con te :-) –

+0

@vitaut, in base alla tua descrizione di lui, sto dicendo che è di tipo 2: il culo testardo. Competente nello scrivere il codice di qualità, forse, ma rigido nei suoi ideali molto a suo proprio detrimento. – Brad

2

Non si tratta di far riparare il tuo amico proprio ora. Si tratta di far crescere la tua squadra.

Fargli capire che è ingiusto per il team & il progetto. Se ancora non è d'accordo, prendilo una tazza di caffè e chiedigli di sedersi sorseggiandolo, mentre potresti prendere la sua tastiera e sistemare il codice di fronte a lui.

Potrebbe vergognarsi e non farlo la prossima volta (grande vincita). Ho usato questo 4 volte e ha sempre funzionato!

Buona fortuna.

1

Probabilmente suppone che non si sia rotto, e non lo sarà. Inoltre, il perfetto è il nemico del bene. Non penso che sia ignaro dei pericoli del copia/incolla, ha solo una diversa valutazione del potenziale di errore di te.

Forse potresti romperlo per lui, per mostrare quanto sia facile. Se non puoi, forse ha ragione.

+1

Se il codice originale funziona, probabilmente "non è rotto". Tuttavia, prendere il concetto di "se non è rotto, non aggiustarlo" troppo lontano significa anche "non MIGLIORARE mai nulla". Essere ininterrotto non significa essere bravi, e il codice non è solo misurato dal numero di bug, ma è anche misurato dalla manutenibilità della metrica, dalla chiarezza, dalla riusabilità e da molti altri. –

+0

Questo è vero. Sto solo pensando a come convincere qualcuno che è molto concentrato su questo particolare copia/incolla. Suppongo che tu debba portare la priorità. Cosa c'è di più importante nel tuo progetto ora? Qualche scadenza in arrivo? È in arrivo una revisione generale del codice? – Carlos

+0

Sono d'accordo, forse ora è troppo tardi da quando lo ha fatto, e la correzione per il copia/incolla dovrà aspettare. Inoltre, forse c'è una ragione specifica per questo specifico copia/incolla, anche se lo trovo piuttosto difficile da giustificare. –

2

Ci sono molti validi motivi per non duplicare il codice, ma basta chiedere ... il tuo team desidera mantenere linee di codice di 100K (con duplicazioni di codice) o 50K di codice? Potrebbe sembrare che la duplicazione del codice a questo punto sia minima, motivo per cui il tuo collaboratore non vede l'importanza del concetto ASCIUTTO, ma immagina se duplica sempre più codice per i prossimi 5 anni. Chi manterrà quel codice? La tua squadra? Cosa succede se un giorno lascia il lavoro? La tua squadra vuole mantenere questa merda? :) In caso contrario, hai già creato un caso molto convincente per non duplicare il codice, per non parlare di "more duplications" = "più incline ad avere più bug in futuro".

1

Se è superiore (o supervisore) a te, chiedi ulteriori spiegazioni - è possibile saperne di più sul contesto ... forse non vale la pena di rifattorizzare il codice (forse è un piccolo progetto).

Se è uguale a te, puoi segnalare al tuo superiore, proponendo questa soluzione (che è una migliore).

Se siete superiore a lui, solo "chiedere" a lui di fare la tua strada ...

3

vostro collega sta ottimizzando la sua efficacia a breve termine, sacrificando l'efficacia lungo termine dell'organizzazione (ad esempio, il resto dei suoi collaboratori pure come lui). Eventuali modifiche richieste nel primo file sono probabilmente necessarie nella seconda, ma nessuno ricorderà ... e che causerà 2 cicli di ricerca e correzione, anziché uno.

È possibile eseguire un rilevatore di cloni sul codice e mostrare semplicemente i risultati al proprio manager.

Vedere Wikipedia on duplicate code per un elenco.

È possibile visualizzare campioni di rilevamento clone per varie lingue utilizzando il nostro rilevatore CloneDR. È stato progettato per individuare un grande blocco di codice con costanti rinomanze e può mostrare esattamente cosa è successo.

0

In primo luogo, riconoscere che ha ragione: copia-incolla è infatti più veloce ora.

Quindi, diciamo che il problema è il costo a lungo termine e che il costo aumenterà perché con la duplicazione, il sistema non è così ordinato come potrebbe essere. Sta introducendo disordine, confusione e più disordine hai, più è difficile lavorare con un sistema. Applicare qualche sforzo ora per organizzarlo meglio (di solito) ripaga a lungo termine. È come tenere organizzata la tua scrivania o stanza.

Questa è l'idea di Ivar Jakobson di software entropy

Problemi correlati