ti-enxame.com

Qual é a sua opinião sobre o uso do código de outras pessoas?

Conforme this question: Decidi implementar a especificação BitTorrent para criar meu próprio cliente/rastreador.

Agora, eu estava analisando as especificações, concluí cerca de 70% a implementação do BEncoding quando encontrei um link para uma implementação do BEncoding em C # escrita por outra pessoa.

Normalmente, se eu estivesse trabalhando no código de produção, eu o usaria como uma referência para verificar meu próprio trabalho e como uma linha de base para escrever alguns testes para executar meu código, mas me vi pensando "Estou fazendo isso, é um projeto divertido, sem prazos; eu realmente deveria implementá-lo - eu poderia aprender muito ", mas uma voz na minha cabeça estava dizendo:" Por que se preocupar em reinventar a roda? Pegue o código, trabalhe para que seja você sua convenção de estilo/nomeação e pronto. "

Então, eu estou um pouco em conflito. Acabei fazendo o último, e algumas partes achei melhor do que o que havia escrito, mas quase sinto que 'traí'.

Qual é a sua opinião? Está me traindo? Perfeitamente normal? Uma oportunidade perdida de aprender sozinho? Uma boa oportunidade para aprender com o exemplo de outra pessoa?

29
Steven Evers

Se eu tenho visto mais, é por estar sobre os ombros dos gigantes.

Isaac Newton

Não é trapaça se o código for de código aberto e você tiver tempo para entendê-lo. Agora, obviamente, isso nem sempre é possível devido a restrições de tempo, mas tente e sempre tenha uma visão geral de alto nível do código que você está usando. Lembre-se sempre de que C foi derivado de B.

24
ChaosPandion

Copie de um, é plágio; copie de dois, é pesquisa.

m bom ouvinte não é apenas popular em todos os lugares, mas depois de um tempo ele conhece alguma coisa.

Em outras palavras, copie tudo o que quiser, mas aprenda algo com isso também. Nenhum grande pesquisador/cientista/engenheiro chegou a lugar algum confiando apenas em seu próprio trabalho.

14
Rook

Enquanto Newton poderia dizer: "Se eu vi um pouco mais longe do que os outros, é porque fiquei nos ombros de gigantes", sou forçado a dizer: "Hoje estamos nos pés um do outro". Talvez o problema central que enfrentamos em toda a ciência da computação seja como devemos chegar à situação em que construímos sobre o trabalho de outras pessoas, em vez de refazê-lo em um trivialmente diferente maneira.

- R.W. Hamming , 1968 palestra do Prêmio Turing [ênfase minha]

6
Roger Pate

Nessa situação, realmente depende de como você se sente sobre isso. Eu passei por algumas coisas e as tornei compatíveis com o Markdown. Reescrevi o analisador de remarcação em PHP? Não, emprestado de outra pessoa. Também adicionei PDF conversões. Escrevi meu próprio conversor PDF? Conversor de PDF $ ===? Uma olhada na documentação do Zend_PDF me deu vontade de correr gritando para as montanhas, então eu vou confesse novamente usando o código de outra pessoa.


Se a expectativa é um processo de aprendizado, eu o usaria como um guia. Escreva o seu e compare. Use a comparação para melhorar seu próprio código.

4
Josh K

A melhor maneira de responder a essa pergunta é avaliar seus objetivos. Por que você começou esse seu projeto de estimação?

Você queria aprender a tecnologia ou experimentar um novo idioma ou uma nova técnica? Se sim, escreva o seu.

Ou você começou porque queria um produto final de trabalho? O projeto preenche alguma necessidade sua? Nesse caso, peça emprestado e empreste frequentemente.

3
AShelly

bem, aqui estão meus 2 centavos ... Por que as faculdades insistem em que os alunos escrevam suas próprias hashtables, listas de links, matrizes etc. em vez de permitir que usem as bibliotecas existentes? 1) para que eles entendam os conceitos subjacentes dessas estruturas de dados ...

Mas, como desenvolvedor profissional, sou a favor de não reinventar a roda, a menos que você esteja aprendendo algo novo ou melhorando a atual "roda". Sou a favor de aprender com o código de outras pessoas, porque às vezes não tenho tempo para escrever uma nova biblioteca, ou às vezes só preciso de um módulo funcional sem conhecer seu funcionamento interno ... como dirigir um carro sem realmente entender todas as máquinas ...

Mas, para enriquecimento pessoal - bem, depende totalmente de você: P. Aprenda o máximo que puder, enquanto não reinventar a roda seria um bom princípio. Ou ... invente algo que substitua a roda ...

2
aggietech

Você está usando C #, então suponho que você já esteja usando uma estrutura (.Net ou Mono). O .Net Framework vem com muitas coisas já feitas para você (por exemplo, a comunicação tcp), e tenho certeza de que você também copia alguns trechos de código encontrados em sites como o stackoverflow.com, então, por que reinventar a roda?

Além disso, você já aprendeu o suficiente (fazendo 70% sozinho) para entender o código do outro cara e perceber que era melhor do que o seu em alguns pontos.

Se o código atender às suas necessidades e for de código aberto, aceite-o. Mas, por outro lado, o que eu não faria é alterar o código para torná-lo mais como o se. Adicione seus comentários, defina alguns cabeçalhos para saber de onde você extraiu o código, mas não o modifique se não puder aprimorá-lo.

2
jmservera

"O melhor código é o código que você não precisa escrever." - Desconhecido

Se o código é gratuito e os termos da licença são adequados para o que você o usará, então qual é o problema?

Usar o código de outras pessoas é uma ótima maneira de economizar tempo e esforço e, desde que você o faça legalmente, acho que apenas coisas boas podem resultar disso.

2
Jasarien

Minha resposta será tendenciosa do meu ponto, com certeza, mas usar código de outras pessoas é como brincar com uma caixa preta: você conhece a entrada e a saída, mas você não sabe o que está acontecendo, mas também há algo verdadeiro: você não precisa reinventar a roda todos os dias

Dependendo de como foi escrito o código de terceiros, ele também pode traçar uma linha com um aviso "a partir daqui entramos no domínio das consequências desconhecidas"

1
rmontagud