Qual è la tua opinione sull'uso del codice di altre persone? [duplicare]

28

Come per questo domanda: ho deciso di implementare la specifica BitTorrent per creare il mio client / tracker.

Ora, stavo esaminando le specifiche, avevo circa il 70% delle implementazioni di BEncoding quando ho trovato un collegamento a un'implementazione di BEncoding in C # scritta da qualcun altro.

Normalmente, se dovessi lavorare sul codice di produzione, lo userei come riferimento per controllare il mio lavoro contro, e una linea di base per scrivere alcuni test per eseguire il mio codice contro, ma mi sono trovato a pensare "Sono facendo questo, è un progetto divertente senza scadenze, dovrei davvero realizzarlo da solo - potrei imparare molto "ma una voce nella mia testa diceva" Perché preoccuparsi di re-inventare la ruota? Prendi il codice, fallo così che si tratta di convenzioni di stile / denominazione e il gioco è fatto. "

Quindi sono un po 'in conflitto. Ho finito per fare il secondo, e alcune parti di esso ho trovato migliore di quello che avevo scritto, ma mi sento quasi come se fossi stato "truffato".

Che cosa ne pensi? Mi sta prendendo in giro? Perfettamente normale? Un'occasione persa per imparare da sola? Una buona opportunità per aver imparato dall'esempio di qualcun altro?

    
posta Steven Evers 27.09.2010 - 02:34
fonte

9 risposte

23

If I have seen further it is by standing on the shoulders of giants.

Isaac Newton

Non è barare se il codice è open source e hai avuto il tempo di capirlo. Ora ovviamente questo non è sempre possibile a causa dei limiti di tempo, ma cerca sempre di avere una panoramica di alto livello del codice che stai utilizzando. Ricorda sempre che C è stato derivato da B.

    
risposta data 27.09.2010 - 03:18
fonte
13

Copia da uno, è plagio; copia da due, è ricerca.

Un buon ascoltatore non è solo popolare ovunque, ma dopo un po 'arriva a sapere qualcosa.

In altre parole, copia tutto ciò che vuoi, ma impara anche qualcosa da esso. Nessun grande ricercatore / scienziato / ingegnere è mai arrivato ovunque basandosi solo sul proprio lavoro.

    
risposta data 27.09.2010 - 03:05
fonte
6

Whereas Newton could say, "If I have seen a little farther than others, it is because I have stood on the shoulders of giants," I am forced to say, "Today we stand on each other's feet." Perhaps the central problem we face in all of computer science is how we are to get to the situation where we build on top of the work of others rather than redoing so much of it in a trivially different way.

- R.W. Hamming , conferenza del 1968 Turing Award [emphasis mine]

    
risposta data 27.09.2010 - 13:31
fonte
4

In quella situazione dipende molto da come tu ti senti a riguardo. Ho passato un paio di cose e le ho rese conformi a Markdown. Ho riscritto il parser markdown in PHP? No, preso in prestito da qualcun altro. Ho anche aggiunto le conversioni PDF. Ho scritto il mio convertitore PDF? Uno sguardo alla documentazione di Zend_PDF mi ha fatto desiderare di correre urlando sulle colline, quindi confesserò di nuovo di usare il codice di qualcun altro.

Se l'aspettativa è un processo di apprendimento, la userei come guida. Scrivi il tuo, quindi confronta. Usa il confronto per migliorare il tuo codice.

    
risposta data 27.09.2010 - 03:12
fonte
3

Il modo migliore per rispondere a questa domanda è valutare i tuoi obiettivi. Perché hai iniziato questo tuo progetto per animali domestici?

Volevi imparare la tecnologia o sperimentare un nuovo linguaggio o una nuova tecnica? Se è così, scrivi il tuo.

O hai iniziato perché volevi un prodotto finale funzionante? Il progetto riempie un bisogno del tuo? Se è così, prendi in prestito e prendi in prestito spesso.

    
risposta data 28.09.2010 - 04:03
fonte
2

bene ecco i miei 2 centesimi ... Perché i college insistono sul fatto che gli studenti scrivano i propri hashtables, linklists, matrici, ecc. Invece di permettere loro di usare le librerie esistenti? 1) in modo che capiscano i concetti di base di quelle strutture di dati ...

Ma, come sviluppatore professionista, non mi piace reinventare la ruota, a meno che tu non stia imparando qualcosa di nuovo o migliorando l'attuale "ruota". Sono tutto per imparare dal codice di altre persone perché a volte non ho tempo per scrivere una nuova libreria, o qualche volta ho solo bisogno di un modulo funzionale senza conoscerne il funzionamento interno ... come se guido un'auto senza capire veramente tutto macchinario ...

Ma, per l'arricchimento personale - beh, dipende totalmente da te: P. Impara il più possibile mentre non reinventare la ruota sarebbe un buon principio. Oppure ... inventati qualcosa che sostituisce la ruota ...

    
risposta data 27.09.2010 - 04:22
fonte
2

Stai usando C #, quindi presumo tu stia già utilizzando un framework (.Net o Mono). Il .Net Framework contiene molte cose già fatte per te (per esempio la comunicazione tcp), e sono sicuro che copi anche alcuni frammenti di codice che trovi in alcuni siti come stackoverflow.com, quindi, perché reinventare la ruota?

Inoltre, hai già imparato abbastanza (facendo il 70% da solo) per capire il codice dell'altro ragazzo e rendersi conto che è stato meglio del tuo in alcuni punti.

Se il codice soddisfa le tue esigenze ed è open source, prendilo. Ma, d'altra parte, quello che non farei è di cambiare il codice per renderlo più come il tuo . Aggiungi i tuoi commenti, imposta alcune intestazioni per sapere da dove hai estratto il codice, ma non modificarlo se non puoi migliorarlo.

    
risposta data 27.09.2010 - 16:13
fonte
2

"The best code is the code that you don't have to write." - Unknown

Se il codice è gratuito e i termini della licenza sono adatti a quello che utilizzerai, allora qual è il problema?

Usare il codice di altre persone è un ottimo modo per risparmiare tempo e fatica, e finché lo fai legalmente penso che solo le cose buone possano venire da esso.

    
risposta data 27.09.2010 - 18:23
fonte
1

La mia risposta sarà sicuramente distorta dal mio punto di vista, ma usare il codice di altre persone è come giocare con una scatola nera: conosci l'input e l'output, ma non sai cosa sta succedendo, ma c'è anche qualcosa vero: non è necessario reinventare la ruota ogni giorno

A seconda di come è stato scritto il codice di terze parti, può anche disegnare una riga con un avviso "da qui entriamo nel dominio delle conseguenze sconosciute"

    
risposta data 27.09.2010 - 12:15
fonte

Leggi altre domande sui tag