A maioria dos programadores copia e cola código? [fechadas]

45

Aprendi muito cedo sobre o corte & colar o código de outra pessoa leva mais tempo a longo prazo que você mesmo escreve. Na minha opinião, a menos que você realmente entenda, corte & colar código provavelmente terá problemas que serão um pesadelo para resolver.

Não me entenda mal, quero dizer, encontrar código de outras pessoas e aprender com ele é essencial, mas não o colamos em nosso aplicativo. Reescrevemos os conceitos em nosso aplicativo.

Mas estou constantemente ouvindo sobre pessoas que cortam & cole, e eles falam sobre isso como se fosse uma prática comum. Eu também vejo comentários de outros que indicam que é uma prática comum.

Então, a maioria dos programadores cortam & colar código?

    
por John MacIntyre 31.10.2016 / 08:46
fonte

14 respostas

45

Dois casos gerais:

De um projeto para outro:

A maioria dos programadores recorta e cola código nessa capacidade. Eles podem encontrar um projeto anterior ou algo online e copiá-lo / colá-lo exatamente ou copiar / colar e fazer alterações nele. Eu acho que essa prática é normalmente bem. Isso é especialmente bom quando é comprovado código. (Exemplos: algum tipo de objeto utilitário de um projeto anterior que funcionou bem ou possivelmente de um blog com poucas alterações necessárias). Onde isso pode ser ruim, é quando você copia um código que não entende ou onde o código é ruim ou onde há uma solução alternativa muito melhor do que o código que você está colando.

Dentro do mesmo projeto: Copiar e colar no mesmo projeto geralmente não é uma boa ideia. Este é um mau cheiro que o código que está sendo copiado deve ser apenas em um método / classe em algum lugar e chamado repetidamente. Existem algumas exceções, mas geralmente o programador deve estar pensando: " Existe uma maneira de eu poder parametrizar este código que estou copiando? ".

    
por 17.04.2014 / 17:03
fonte
36

A maioria dos programadores faz isso, mas isso não significa que você deva

Um dos meus mantras de programação é: "Se estou copiando e colando código, estou fazendo algo errado" . Essencialmente, SECA .

Eu acho que deveria ser óbvio que a reutilização de código significa usar código como um recurso, não repetindo código. Às vezes eu copiei e colei o código em meu próprio código, na maioria dos casos eu termino com o código da placa de caldeira ou coisas parecidas.

Depois de investir mais algum tempo com esse código, acabo com o seguinte:

  • Um componente (veja também: separação de preocupações )
  • Eu posso recorrer a reflexão para tornar as coisas mais simples, mais limpas e mais fácil de se reaproveitar no futuro.
  • Um design melhor , porque mesmo que funcione, por que não fazer tudo de novo depois que você aprendeu as lições?
  • Um padrão que eu posso abstrair, transformar em um componente de biblioteca e remover código duplicado.

Pode ser discutível se devemos ou não copiar & colar o código desde que o cliente / chefe não se importa (pelo menos diretamente e no curto prazo) e você pode acabar com os mesmos resultados, mas o problema realmente vem quando leva a erros, perda de modularidade e, finalmente, inferno de manutenção .

O que você deve fazer: refator o mais rápido possível

Ninguém escreve código perfeito, mesmo que funcione, mesmo quando você não está copiando & colando e é o seu próprio código, se você não estiver satisfeito com isso, basta colocar uma nota nos comentários (por exemplo, um bloco de documentos "@todo") para lembrar a si mesmo o que refatorar e por que ... mesmo se você não refatorá-lo a si mesmo, pode se tornar a diferença entre a felicidade e a frustração total do mantenedor.

Eventualmente, você terminará com bom código no final, mesmo que copie e cole.

via XKCD

    
por 11.02.2012 / 04:26
fonte
8

Quando estou preso e procuro por coisas para resolver o meu problema e acontece com algum trecho útil de código que faz o que eu quero, copio-o naturalmente. Às vezes é apenas a essência disso. Então mudo para as minhas necessidades. Isso acontece com mais frequência quando eu me aprofundo em coisas que não sou especialista (atualmente, Objective-C).

Eu sempre aproveito o tempo para aprender algo com o código, então, para mim, é uma ótima maneira de aprender e evitar a reinvenção da roda.

    
por 15.01.2011 / 00:44
fonte
6

Vou falar sobre copiar / colar o código de outras pessoas aqui. Agarrar partes do meu próprio trabalho da minha biblioteca pessoal é um jogo justo. Eu os conheço e os entendo por definição.

Eu acho que a situação mais frequente em que eu "corto e colo" código é quando eu tenho um problema específico e me deparo com uma postagem no blog que resolve isso. Na maioria das vezes eu redigito a solução no meu projeto (afinal, é provavelmente escrito no estilo do autor do blog, se nada mais). Não é realmente o meu código, mas não me sinto mal em usá-lo nesse cenário.

Sair e pegar métodos ou sistemas inteiros para colá-los em meu projeto como estão e chamá-lo de feito é algo que não entendo. Houve uma pergunta no StackOverflow outro dia que ilustrou perfeitamente o problema de fazer algo assim.

Cobrir um monstro Frankenstein de diferentes partes de código não pode ser tão eficiente assim. Quero dizer, se você ficar bom nisso, isso significa que você está replicando a mesma solução várias vezes ou adquiriu conhecimento suficiente do código de outras pessoas que o mesmo nível de copiar / colar não deve mais ser necessário e seu a produtividade melhoraria por não ter que resolver problemas entre amostras de código incompatíveis.

Eu pessoalmente não conheci muitos programadores que copiam / colam em larga escala. Já vi muitos que se codificam nos cantos mais profundos e sombrios, mas essa é uma história diferente. Com base em minhas anedotas pessoais, eu diria que a maioria dos programadores não copia / cola aplicativos inteiros juntos, mas é realmente difícil dizer com certeza.

    
por 23.05.2017 / 14:40
fonte
4

Ruim: Copiando e colando o mesmo bloco de código várias vezes

Se você estiver fazendo isso, provavelmente levará um segundo para pensar sobre o que pode ser abstraído do código sendo copiado e criar uma função / método para lidar com isso. É aqui que o princípio DRY (Don't Repeat Yourself) conta.

Bom: copiar um bloco de código que é conhecido por funcionar

DRY (Don't Repeat Yourself) também se aplica aqui, apenas em um sentido diferente. IE, não repita o trabalho que você já fez no passado. Se você tiver tempo para escrever uma seção de código, depure, teste e está provado que funciona em uma base de código de produção; você seria burro para não reutilizá-lo.

A maioria das pessoas copia e faz um mau rap porque muitos programadores iniciantes passam o tempo vasculhando a rede e copiando / colando uma mistura do código de outras pessoas sem entender o que realmente faz.

Escrever tudo do zero toda vez não é nada melhor. Eu sei que há muitos programadores puristas da velha escola que dizem que tudo deve ser escrito do zero e espero não ficar preso trabalhando com eles. Se você tem 5 anos de experiência em programação, você deve ter uma biblioteca substancial de código que seja primordial para reutilização. É um dos melhores recursos que um programador experiente pode trazer para a mesa, porque potencialmente economizará muito tempo de desenvolvimento.

Se você não entender com seu código antigo a princípio, reserve alguns minutos para ler os comentários e se familiarizar novamente. Se seus comentários sugam ... bem, essa é outra questão.

    
por 14.12.2012 / 01:49
fonte
3

Após 25 anos escrevendo código, houve ocasiões em que (sem acesso ao código que escrevi para um empregador anterior) eu desejei poder cortar e colar. No entanto, isso tem sido muito raro (e continue lendo).

Talvez o melhor exemplo seja um analisador de linha de comando muito simples que eu encontrei anos atrás para sistemas operacionais unix. Um simples loop zipando os argumentos e processando as opções. Foi incrivelmente simples e elegante, e eu usei isso (mais como um padrão do que como um literal de recortar e colar) muitas vezes desde então. Esta é a exceção e não a regra.

Normalmente, um simples corte e colagem é completamente inadequado - é mais recortar e colar o conceito, ou algoritmo, que tem sido importante.

Eu não estou muito orgulhoso - eu vou procurar por aí procurando um algoritmo de verificação de código de paridade ou hamming realmente rápido ou algo exótico como esse. Depois, passe algumas horas a entender para ver se realmente é a coisa massivamente super rápida que eu buscava, ou uma pilha ingênua de lixo.

Eu me preocupo toda vez que alguém simplesmente copia o código sem parar para entendê-lo. Eles são ou um gênio (entenda isso e todas as suas sutilezas de relance), ou um tolo. Não há muito espaço para nada entre os dois. Ah, e não há muitos gênios verdadeiros também.

Sem entender, você realmente não tem ideia do que você acaba de fazer, não apenas das circunstâncias felizes, mas também das circunstâncias insatisfatórias. Às vezes isso não importa porque você tem sorte. E às vezes isso causa dor a longo prazo.

    
por 15.01.2011 / 02:02
fonte
3

Existe uma situação comum em que você basicamente PRECISA fazer isso para ser produtivo.

Qualquer tecnologia desconhecida para você é difícil de aprender, a menos que você tenha um exemplo de trabalho para começar. Portanto, você copia e cola para ter algo que realmente é executado e, em seguida, começa a mexer nele.

    
por 15.01.2011 / 11:17
fonte
3

Como um novo programador (4 meses no meu primeiro emprego), eu confio em ajuda bastante (seja de SO ou outros lugares). Eu faço questão de não copiar e colar cegamente outros códigos. Mesmo que o código fornecido seja o que eu usarei, vou digitá-lo em meu programa e depois dedicar um pouco de tempo para que eu entenda completamente o que ele faz e as razões para isso.

Quero garantir que estou aprendendo constantemente e não simplesmente um especialista em cortar e colar

    
por 15.01.2011 / 11:30
fonte
1

Eu tenho muitos sentimentos sobre esse assunto, e não posso dizer honestamente que nenhum deles seja totalmente objetivo.

Existem muitos argumentos para recortar e colar o código de outras pessoas na sua aplicação. Alguns deles podem fazer sentido, outros não. Por exemplo, se você tem um método do blog de alguém que recebe uma entrada e executa algum algoritmo matemático complicado que está fora de suas habilidades matemáticas e cospe um resultado - que é um argumento para recortar e colar - obtenha a permissão do autor para usar codifique e credite-os onde devidos - é a coisa honrada de fazer.

Existem argumentos para não reinventar a roda - novamente, isso faz sentido, em teoria. Mas se você não dedicar tempo para se familiarizar intimamente com o código que está cortando e colando, você não sabe se existe uma maneira melhor de resolver esse problema, você não sabe se há erros no código . E se a roda que você está colando estiver quebrada?

Existem argumentos para velocidade e eficiência - você cria uma biblioteca de código de outras pessoas que você roubou, roubou, plagiou ou não, chegou a pensar nisso, talvez nunca precise saber como programar além Frankensteining alguns aplicativos juntos fora de peças recuperadas.

Há momentos e lugares em que considero este comportamento completamente aceitável. Por hackear ferramentas de jogadas rápidas que não foram projetadas para a longevidade, mas para realizar uma tarefa agora mesmo, seja por malfeitor ou por trapaça. Com o propósito de prototipar e estudar os conteúdos, aprender e avançar em um contexto teórico, acho que isso é um jogo completamente justo.

Recortar e colar o código de outras pessoas é plágio - se você tiver sua bênção e entender o código que está colando e se encaixar na construção dos padrões de codificação do seu aplicativo, tudo bem, concedo que seja um jogo justo.

Como engenheiro de software profissional, estou sendo pago para manter um padrão e um código de ética. Não estou sendo pago para roubar, plagiar ou infringir os direitos autorais de outras pessoas, colocando meu cliente em risco de ser processado. Além disso, há um risco muito real de que quando você executa o código cortado / colado, ele tenha efeitos colaterais catastróficos.

Não direcionando essa resposta para você, John, sei que você é muito inclinado a questões éticas quando se trata de tópicos como esse, então isso é apenas um discurso geral na direção da pergunta em si.

Adendo : Dito isso, acho que cortar e colar seu próprio código entre projetos é bastante aceitável - a menos que tenha sido escrito como trabalho para contratação de outra pessoa, caso em que você não usa Você possui os direitos autorais e você deve obter a permissão da pessoa para quem você a codificou. Descobri que, a menos que o código seja pertinente aos conceitos funcionais de propriedade, a maioria dos empregadores não tem problema se você reutilizar suas próprias ideias para outros clientes.

    
por 15.01.2011 / 16:56
fonte
1

Dado que, em um repositório de código aberto, 15% de todos os métodos são copiados de um projeto para outro (pdf), a resposta parece ser um claro sim.

    
por 14.12.2012 / 16:51
fonte
0

Se o código for bom, em vez de copiar e colar, ele deve ser transformado em uma biblioteca comum. Mas as pessoas não podem ser incomodadas com a refatoração e preferem ter a mesma funcionalidade difundida por cópia e método.

Em vez de ter uma lei absoluta universal de copiar e colar é boa ou ruim, deve-se ver quando usá-la.

Os profissionais de copiar e colar são: Contras são: O mesmo código é espalhado em vários lugares e qualquer problema encontrado / resolvido precisa ser resolvido em todos os lugares, se em vez de copiar e colar um deles for usado como biblioteca comum, a atualização será propagada para todos os lugares. Por um pequeno investimento inicial de usar uma biblioteca em vez de espalhar o mesmo código em todos os lugares.

A escolha é se economizar um pouco de tempo inicialmente comparado a muito mais tarde, então copiar e colar é o caminho a seguir, senão refatorar e colocá-lo em uma biblioteca comum.

    
por 16.01.2011 / 01:17
fonte
0

Na maioria dos casos, o código que você encontra na rede não atende às suas finalidades exatas.

O que me vejo fazendo muito é copiar código de alguém, desmembrando-o da essência e adicionando código até que ele atenda aos meus requisitos. Eu sempre refatorarei isso para combinar com minhas convenções de nomenclatura e estilo de codificação.

Eu, pessoalmente, odeio quando leio um tutorial e eles começam mostrando código para um caso complicado. Comece com a essência e mostre blocos de construção para estender o código. Se eu começar um blog próprio, darei às pessoas um exemplo de código comentado que mostre a essência do que quero fazer, como você pode adicionar funcionalidade / casos especiais e um exemplo completo do recurso básico.

    
por 11.02.2012 / 13:16
fonte
-1
Por que reinventar a roda se você entender o que o código está fazendo, tem permissão para reutilizar o código (ou o código aberto) e você não precisa necessariamente de todo o código que a outra pessoa escreveu. Eu freqüentemente copio uma implementação de algoritmo e modifico-a para minhas próprias necessidades. Normalmente, quando eu apenas corto e colo, é porque eu não preciso de tudo que estava no exemplo, então adicionar outro arquivo seria apenas um desperdício (ou é algo dentro de uma função). Eu concordo com jzd se você está cortando e colando seu próprio código dentro do mesmo projeto, então há algo errado e você provavelmente deve descobrir uma maneira econômica de lib-lo ou compartilhar a função.

    
por 15.01.2011 / 00:41
fonte
-1

Acho que os membros da equipe " integração " ou aqueles que não têm tanta experiência com código ou programação tendem a copiar & colar com mais frequência e não entender o que eles fizeram (entrar nos problemas mencionados na sua pergunta).

Eu também acho que os programadores costumam ficar longe do corte & colar para o seu próprio desgosto, porque eles amam o código e muitas vezes reinventam a roda, só porque eles querem fazer melhor ou aprender mais.

    
por 15.01.2011 / 17:03
fonte