La maggior parte dei programmatori copia e incolla il codice? [chiuso]

45

Ho imparato molto presto su quel taglio & incollare il codice di qualcun altro richiede più tempo nel lungo periodo che scrivere da solo. Secondo me a meno che tu non lo capisca davvero, taglia e amplifica il codice incolla avrà probabilmente problemi che saranno un incubo da risolvere.

Non fraintendermi, voglio dire trovare il codice di altri popoli e imparare da esso è essenziale, ma non lo incolpiamo nella nostra app. riscriviamo i concetti nella nostra app.

Ma ascolto costantemente persone che tagliano e amp; incolla e ne parlano come se fosse una pratica comune. Vedo anche commenti di altri che indicano che è pratica comune.

Quindi, la maggior parte dei programmatori taglia e amplifica; incolla il codice?

    
posta John MacIntyre 31.10.2016 - 08:46
fonte

14 risposte

45

Due casi generali:

Da un progetto all'altro:

La maggior parte dei programmatori taglia e incolla il codice in questa capacità. Potrebbero trovare un progetto precedente o qualcosa in linea e copiarlo / incollarlo esattamente o copiare / incollare e apportare modifiche ad esso. Penso che questa pratica sia in genere valida. Questo è particolarmente utile quando è provato il codice. (Esempi: una sorta di oggetto di utilità da un progetto passato che ha funzionato bene, o forse da un blog con poche modifiche necessarie). Dove questo può essere negativo, è quando copi codice che non capisci, o dove il codice è scarso, o dove c'è una soluzione alternativa molto migliore del codice che stai incollando.

All'interno dello stesso progetto: Copia e incolla nello stesso progetto non è in genere una buona idea. Questo è un cattivo odore che il codice che viene copiato dovrebbe essere in qualche modo in una classe / metodo e chiamato ripetutamente. Ci sono alcune eccezioni a questo, ma in generale il programmatore dovrebbe pensare: " C'è un modo per parametrizzare questo codice che sto copiando? ".

    
risposta data 17.04.2014 - 17:03
fonte
36

La maggior parte dei programmatori lo fa, ma ciò non significa che dovresti

Uno dei miei mantra di programmazione è: "Se sto copiando e incollando il codice, sto facendo qualcosa di sbagliato" . In sostanza, DRY .

Penso che dovrebbe essere ovvio che riutilizzare il codice significa usare il codice come una risorsa, non un codice ripetitivo. A volte ho copiato e incollato il codice del mio codice, nella maggior parte dei casi ho terminato con codice della piastra della caldaia o cose che sembrano davvero simili.

Dopo aver investito ancora un po 'di tempo con quel codice, ho finito con il seguente:

  • A componente (vedi anche: separazione delle preoccupazioni )
  • Posso ricorrere alla riflessione per rendere le cose più semplici, più pulite e più facile da reapeat in futuro.
  • Un design migliore , perché anche se funziona, perché non farlo di nuovo da capo dopo aver appreso le lezioni?.
  • Un pattern che posso astrarre, trasformare in un componente della libreria e rimuovere il codice duplicato.

Può essere discutibile se dovremmo o non dovremmo copiare & incolla il codice dal momento che il client / capo non si cura (almeno direttamente e nel breve periodo) e potresti finire con gli stessi risultati, ma il problema arriva quando porta a bug, perdita di modularità e, in definitiva, a manutenere la manutenzione .

Cosa dovresti fare: refact al più presto

Nessuno scrive codice perfetto, anche se funziona, anche quando non stai copiando e amp; incollare ed è il tuo codice, se non sei abbastanza soddisfatto basta mettere una nota nei commenti (ad esempio un docblock "@todo") per ricordare a te stesso cosa è il refactoring e perché ... anche se non lo si refactoring te stesso, potrebbe diventare la differenza tra felicità e totale frustrazione per il manutentore.

Alla fine, finirai con buon codice alla fine, anche se copi e incolli.

tramite XKCD

    
risposta data 11.02.2012 - 04:26
fonte
8

Quando sono bloccato e cerco cose per risolvere il mio problema e succede su qualche utile snippet di codice che fa ciò che voglio, lo copio naturalmente. A volte è solo l'essenza di ciò. Quindi lo cambio in suite i miei bisogni. Ciò accade più spesso quando approfondisco cose che non sono un esperto in (attualmente, Objective-C).

Mi prendo sempre del tempo per imparare qualcosa dal codice, quindi per me è un ottimo modo per imparare e per evitare di reinventare la ruota.

    
risposta data 15.01.2011 - 00:44
fonte
6

Ho intenzione di parlare di copiare / incollare il codice di altre persone qui. L'acquisizione di parti del mio lavoro dalla mia biblioteca personale è un gioco leale. Li conosco e li capisco per definizione.

Trovo che la situazione più frequente in cui il codice "taglia e incolla" sia quando ho un problema particolare e mi imbatto in un post del blog che lo risolve. La maggior parte delle volte ho ridigitare la soluzione nel mio progetto (dopotutto, probabilmente è scritto nello stile dell'autore del blog, se non altro). Non è veramente il mio codice, ma non mi dispiace di usarlo in quello scenario.

Uscire e afferrare interi metodi o sistemi per incollarli nel mio progetto così com'è e chiamarlo fatto è qualcosa che non capisco. C'è stata una domanda su StackOverflow l'altro giorno che ha illustrato perfettamente il problema nel fare qualcosa del genere.

Unire un mostro di Frankenstein con parti di codice diverse non può essere così efficiente. Voglio dire, se ci si abitua, significa che stai replicando la stessa soluzione più e più volte o se hai ottenuto una comprensione sufficiente del codice di altre persone che lo stesso livello di copia / incolla non dovrebbe più essere necessario e il tuo la produttività migliorerebbe non dovendo risolvere i problemi tra campioni di codice incompatibili.

Personalmente non ho incontrato molti programmatori che copia / incolla su larga scala. Ho visto molte persone che si identificano negli angoli più profondi e oscuri, ma questa è una storia diversa. Sulla base dei miei aneddoti personali, direi che la maggior parte dei programmatori non copia / incolla intere applicazioni insieme, ma è davvero difficile dirlo con certezza.

    
risposta data 23.05.2017 - 14:40
fonte
4

Scorretto: copia e incolla lo stesso blocco di codice più e più volte

Se ti ritrovi a farlo, probabilmente dovresti pensare un attimo a cosa può essere estratto dal codice che viene copiato e creare una funzione / metodo per gestirlo. Questo è dove conta il principio DRY (Non ripeterti).

Buono: copia un blocco di codice funzionante

DRY (Do not Repeat Yourself) si applica anche qui, solo in un senso diverso. IE, non ripetere il lavoro che hai già fatto in passato. Se hai avuto il tempo di scrivere una sezione di codice, esegui il debug, testalo e ha dimostrato di funzionare in una base di codice di produzione; saresti stupido a non riutilizzarlo.

La maggior parte delle persone si occupa di copiare e incollare un brutto colpo perché molti programmatori principianti passano il loro tempo a setacciare la rete ea copiare / incollare un miscuglio del codice di altre persone senza capire cosa realmente fa.

Scrivere tutto da capo ogni volta non è migliore. So che ci sono molti programmatori di puristi della vecchia scuola che tutto dovrebbe essere scritto da zero e spero di non rimanere bloccato a lavorare con loro. Se hai 5 anni di esperienza nella programmazione, dovresti disporre di una libreria di codice piuttosto consistente che è fondamentale per il riutilizzo. È una delle migliori risorse che un programmatore esperto può portare sul tavolo perché potenzialmente può risparmiare molto tempo di sviluppo.

Se inizialmente non capisci con il tuo vecchio codice, prenditi un momento per leggere i commenti e ri-familiarizzare. Se i tuoi commenti fanno schifo ... beh, questo è un altro problema.

    
risposta data 14.12.2012 - 01:49
fonte
3

Dopo 25 anni di scrittura del codice, ci sono stati momenti in cui (senza accesso al codice che ho scritto per un precedente datore di lavoro) ho desiderato poter tagliare e incollare. TUTTAVIA questo è stato molto raro (e continua a leggere).

Forse il miglior esempio è un parser da riga di comando molto semplice che ho trovato anni fa per i sistemi operativi unix. Un semplice ciclo che sfrutta le discussioni e elabora le opzioni. Era incredibilmente semplice ed elegante, e l'ho usato molte volte (più come modello che come copia e incolla letterale). Questa è l'eccezione piuttosto che la regola.

Di solito un semplice taglio e incolla ole è del tutto inappropriato - è più taglia e incolla il concetto, o algoritmo, che è stato importante.

Non sono troppo orgoglioso - cercherò volentieri in giro per trovare un algoritmo di verifica del codice di parata o hamming veramente veloce o qualcosa di esotico come quello. Quindi dedica alcune ore a capirlo per vedere se è davvero la cosa super veloce che stavo cercando, o un ingenuo mucchio di cianfrusaglie.

Mi preoccupo ogni volta che qualcuno copia semplicemente il codice senza fermarsi a capirlo. Sono o un genio (comprendilo e tutte le sottigliezze in un colpo d'occhio), o un pazzo. Non c'è molto spazio per qualsiasi cosa nel mezzo. Oh, e non ci sono molti veri geni.

Senza capire, non hai davvero idea di ciò che hai appena lanciato VERAMENTE, non solo per le circostanze felici o infelici o per le condizioni di inserimento. A volte questo non importa perché sei fortunato. E a volte questo fa soffrire molto a lungo termine.

    
risposta data 15.01.2011 - 02:02
fonte
3

C'è una situazione comune in cui è fondamentalmente necessario farlo per essere produttivi.

Qualsiasi tecnologia sconosciuta a te è difficile da imparare a meno che tu non abbia un esempio funzionante per iniziare. Quindi copia e incolla per avere qualcosa che in realtà viene eseguito e quindi iniziare a lavorarci su.

    
risposta data 15.01.2011 - 11:17
fonte
3

Come nuovo programmatore (4 mesi nel mio primo lavoro), mi affido molto all'aiuto (sia dalla SO che da altri posti). Faccio un punto di NON copiare e incollare ciecamente il codice degli altri. Anche se il codice fornito è quello che userò, lo inserirò nel mio programma e quindi impiegherò un po 'di tempo per assicurarmi di capire completamente cosa fa e le sue ragioni.

Voglio assicurarmi di imparare costantemente e non semplicemente un esperto di copia e incolla

    
risposta data 15.01.2011 - 11:30
fonte
1

Ho tanti sentimenti su questo argomento, e onestamente non posso dire che nessuno di loro sia completamente oggettivo.

Ci sono molti argomenti per tagliare e incollare il codice di altre persone nella tua applicazione. Alcuni di essi possono avere senso, altri no. Ad esempio, se hai un metodo dal blog di qualcuno che prende un input e gestisce un complicato algoritmo matematico che è al di fuori delle tue abilità matematiche e sputa un risultato - questo è un argomento per tagliare e incollare - ottenere il permesso dell'autore di usare il loro codice e li accredita dove dovuto - è la cosa più onorevole da fare.

Ci sono argomenti per non reinventare la ruota - di nuovo, questo ha senso, in teoria. Ma se non ti prendi il tempo di familiarizzare con il codice che stai tagliando e incollando, non sai se c'è un modo migliore per risolvere questo problema, non sai se ci sono errori nel codice . Cosa succede se la ruota che stai incollando è rotta?

Ci sono argomenti per la velocità e l'efficienza - costruisci una libreria di codice di altre persone che hai derubato, rubato, plagiato o altro, vieni a pensarci, potresti anche non aver bisogno di sapere come programmare oltre Frankensteining alcune applicazioni insieme di parti recuperate.

Ci sono momenti e luoghi in cui ritengo questo comportamento completamente accettabile. Per l'hacking insieme a strumenti quick throw-away che non sono progettati per la longevità, ma per portare a termine un'attività, in questo momento tramite hook o by crook. Ai fini della prototipazione e dello studio dei contenuti, per apprendere e avanzare in un contesto teorico, penso che questo sia un gioco assolutamente equo.

Tagliare e incollare il codice di altre persone è un plagio - se hai la loro benedizione e comprendi il codice che stai incollando e rientra nella struttura degli standard di codifica per la tua applicazione, allora ammetto che è un gioco leale.

In qualità di ingegnere software professionista, sono pagato per mantenere uno standard e un codice etico. Non sono stato pagato per rubare, plagiare o infrangere il copyright di altre persone mettendo il mio cliente a rischio di essere perseguito. A parte questo, c'è un rischio molto reale che quando si esegue detto codice tagliato / incollato ha effetti collaterali catastrofici.

Non rivolgendo questa risposta a te John, so che sei molto incline all'etica quando si tratta di argomenti come questo, quindi questo è solo uno slancio generale nella direzione della domanda stessa.

Addendum : Detto questo, ritengo che tagliare e incollare il tuo codice tra i progetti sia abbastanza accettabile, a meno che non sia stato scritto come un lavoro per conto di qualcun altro, nel qual caso non lo fai t possedere il copyright e dovresti ottenere il permesso della persona per la quale lo hai codificato. Ho scoperto che, a meno che il codice non sia pertinente ai concetti funzionali di proprietà, la maggior parte dei datori di lavoro va bene con il riutilizzo delle proprie idee per altri clienti.

    
risposta data 15.01.2011 - 16:56
fonte
1

Dato che, in un repository open source, il 15% di tutti i metodi sono copiati da uno progetto a un altro (pdf), la risposta sembra essere un chiaro sì.

    
risposta data 14.12.2012 - 16:51
fonte
0

Se il codice è buono, invece di copiarlo e incollarlo dovrebbe essere trasformato in una libreria comune. Ma le persone non possono essere disturbate dal refactoring e preferiscono avere la stessa funzionalità diffusa con la copia e il metodo.

Invece di avere una legge universale assoluta di copia e incolla è buona o cattiva, si dovrebbe vedere quando usarla.

I professionisti di copia e incolla sono: ti fa andare veloce Contro: Lo stesso codice è diffuso in più punti e qualsiasi problema trovato / risolto deve essere risolto ovunque, se invece di copiare e incollare uno lo ha usato come libreria comune, l'aggiornamento si propagherà ovunque. Per un piccolo investimento iniziale sull'utilizzo di una libreria invece di diffondere lo stesso codice ovunque.

La scelta è se risparmiare un po 'di tempo inizialmente rispetto a molto più tardi, quindi copiare e incollare è la strada da percorrere, altrimenti refactore e metterlo in una libreria comune.

    
risposta data 16.01.2011 - 01:17
fonte
0

Nella maggior parte dei casi, il codice che troverai in rete non si adatta ai tuoi scopi precisi.

Quello che mi vedo fare molto è copiare codice da qualcuno, spoglio fino all'essenza e poi aggiungere codice finché non soddisfa i miei requisiti. Lo rifatterò sempre per abbinare le mie convenzioni di denominazione e lo stile di codifica.

Personalmente lo odio quando leggo un tutorial e iniziano a mostrare il codice per un caso complicato. Inizia con l'essenza e mostra i blocchi costitutivi per estendere il codice. Se mai avvierò un blog personale, fornirò alle persone un esempio di codice commentato che mostra l'essenza di ciò che voglio fare, come puoi aggiungere funzionalità / casi speciali e un esempio pienamente funzionante della funzione di base.

    
risposta data 11.02.2012 - 13:16
fonte
-1

Perché reinventare la ruota se capisci cosa sta facendo il codice, hai il permesso di riutilizzare il codice (o il suo codice aperto) e non hai necessariamente bisogno di tutto il codice scritto dall'altra persona. Copio spesso un'implementazione dell'algoritmo e lo modifico secondo le mie esigenze. Di solito però quando taglio e incollo è perché non ho bisogno di tutto ciò che era nell'esempio, quindi aggiungere un altro file sarebbe solo uno spreco (o è qualcosa dentro una funzione). Sono d'accordo con jzd se stai tagliando e incollando il tuo codice all'interno dello stesso progetto, allora c'è qualcosa di sbagliato e probabilmente dovresti trovare un modo economico per liberarlo o condividere la funzione.

    
risposta data 15.01.2011 - 00:41
fonte
-1

Trovo che i membri del team " integration " o quelli che non hanno tanta esperienza con il codice o in programmazione tendono a copiare & incolla più spesso e non capisci cosa hanno fatto (entrando nei problemi menzionati nella tua domanda).

Inoltre, trovo che i programmatori stiano spesso lontani da cut & incollare al proprio dispiacere perché amano il codice e spesso reinventano la ruota, solo perché vogliono farlo meglio o imparare di più.

    
risposta data 15.01.2011 - 17:03
fonte

Leggi altre domande sui tag