Aprendi muito cedo que cortar e colar o código de outra pessoa leva mais tempo a longo prazo do que você mesmo escrever. Na minha opinião, a menos que você realmente entenda, o código de recortar e colar provavelmente terá problemas que serão um pesadelo para resolver.
Não me entenda mal, quero dizer, é essencial encontrar o código de outras pessoas e aprender com ele é essencial, mas não o colamos apenas em nosso aplicativo. Nós reescrever os conceitos em nosso aplicativo.
Mas eu estou constantemente ouvindo sobre as pessoas que recortam e colam, e elas falam sobre isso como se fosse uma prática comum. Também vejo comentários de outras pessoas que indicam que é prática comum.
Então, a maioria dos programadores recorta e cola código?
programming-practices
John MacIntyre
fonte
fonte
Respostas:
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 copiar / colar exatamente ou copiar / colar e fazer alterações nele. Eu acho que essa prática normalmente é boa. Isso é especialmente bom quando é um código comprovado. (Exemplos: algum tipo de objeto utilitário de um projeto passado que funcionou bem ou possivelmente de um blog com poucas alterações necessárias). Onde isso pode ser ruim, é quando você está copiando um código que não entende, ou onde o código é ruim, ou onde existe 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 normalmente não é uma boa ideia. É um mau cheiro que o código que está sendo copiado deve estar 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 parametrizar esse código que estou copiando? ".
fonte
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, SECO .
Eu acho que deveria ser óbvio que a reutilização de código significa usar o código como um recurso, não repetir o código. Às vezes, copiei e colei o código com meu próprio código; na maioria dos casos, termino com código de placa da caldeira ou coisas que parecem realmente semelhantes.
Depois de investir mais tempo com esse código, acabo com o seguinte:
Pode ser discutível se devemos ou não copiar e colar código, já que o cliente / chefe não se importa (pelo menos diretamente e a curto prazo) e você pode terminar com os mesmos resultados, mas o problema realmente ocorre leva a erros, perda de modularidade e, finalmente, um inferno de manutenção.
O que você deve fazer: refatorar o mais rápido possível
Ninguém escreve código perfeito, mesmo que funcione, mesmo quando você não está copiando e 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 docblock "@todo") para lembrar você mesmo o que refatorar e por que ... mesmo que você não refatore você mesmo, isso pode se tornar a diferença entre felicidade e frustração total para o mantenedor.
Eventualmente, você terminará com um bom código no final, mesmo se você copiar e colar.
via XKCD
fonte
Quando estou parado e procuro coisas para resolver meu problema e deparei com algum trecho útil de código que faz o que eu quero, copio-o naturalmente. Às vezes é apenas a essência disso. Depois, mudo para atender às minhas necessidades. Isso acontece com mais frequência quando me aprofundo em coisas nas quais não sou especialista (atualmente, Objective-C).
Eu sempre dedico um tempo para aprender algo com o código, portanto, para mim, é uma ótima maneira de aprender e evitar reinventar a roda.
fonte
Vou falar sobre copiar / colar o código de outras pessoas aqui. Pegar partes do meu próprio trabalho da minha biblioteca pessoal é um jogo justo. Eu os conheço e os entendo por definição.
Acho que a situação mais frequente em que "corro e colo" o código é quando tenho um problema específico e encontro uma postagem de blog que o resolve. Na maioria das vezes, redigito a solução no meu projeto (afinal, provavelmente está escrito no estilo do autor do blog, se nada mais). Não é realmente o meu código, mas não me sinto mal por usá-lo nesse cenário.
Sair e pegar métodos ou sistemas inteiros para colá-los no meu projeto como está e concluí-lo é algo que não entendo. Havia uma pergunta no StackOverflow outro dia que ilustrava perfeitamente o problema de se fazer algo assim.
Juntar um monstro Frankenstein de diferentes partes do código não pode ser tão eficiente assim. Quero dizer, se você é bom nisso, significa que você está replicando a mesma solução repetidas vezes ou obteve uma compreensão suficiente do código de outras pessoas para que o mesmo nível de cópia / colagem não seja mais necessário e seu a produtividade melhoraria se não fosse necessário 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 escuros, mas essa é uma história diferente. Com base em meus dados pessoais, eu diria que a maioria dos programadores não copia / cola aplicativos inteiros juntos, mas é realmente difícil dizer com certeza.
fonte
Ruim: copiar e colar o mesmo bloco de código repetidamente
Se você se encontra fazendo isso, provavelmente deve levar um segundo para pensar sobre o que pode ser extraído do código que está sendo copiado e criar uma função / método para lidar com isso. É aqui que o princípio DRY (não se repita) conta.
Bom: copiar um bloco de código conhecido por funcionar
DRY (Não se repita) também se aplica aqui, apenas em um sentido diferente. IE, não repita o trabalho que você já fez no passado. Se você reservou um tempo para escrever uma seção do código, depure-a, teste-a e comprovadamente funcione em uma base de código de produção; você seria burro para não reutilizá-lo.
A maioria das pessoas dá uma má reputação ao copiar e colar, porque muitos programadores iniciantes passam seu 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 sempre não é melhor. Eu sei que existem muitos programadores puristas da velha escola que sabem 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, deve ter uma biblioteca de códigos bastante substancial, ideal para reutilização. É um dos melhores ativos que um programador experiente pode trazer para a mesa, pois potencialmente economizará muito tempo de desenvolvimento.
Se você não entender com o seu código antigo, a princípio, reserve um momento para ler os comentários e se familiarizar novamente. Se seus comentários forem ruins ... bem, isso é outra questão.
fonte
Após 25 anos escrevendo código, houve momentos em que (sem acesso ao código que escrevi para um empregador anterior) desejei poder recortar e colar. No entanto, isso tem sido muito raro (e continue lendo).
Talvez o melhor exemplo seja um analisador de linha de comando realmente simples que me deparei anos atrás para sistemas operacionais unix. Um loop simples percorrendo os argumentos e processando as opções. Era incrivelmente simples e elegante, e eu usei isso (mais como um padrão do que como um recorte e colar literal) muitas vezes desde então. Esta é a exceção e não a regra.
Normalmente, um simples recorte e colar é completamente inapropriado - é mais recortado e colado o conceito, ou algoritmo, que tem sido importante.
Não estou muito orgulhoso - vou procurar com facilidade um algoritmo de verificação de código de paridade ou impedimento muito rápido ou algo exótico assim. Depois, passe algumas horas entendendo para ver se realmente é a coisa super rápida que eu estava procurando, ou uma pilha ingênua de lixo.
Preocupo-me sempre que alguém simplesmente copia o código sem fazer uma pausa para entendê-lo. Eles são um gênio (entenda tudo e todas as suas sutilezas de relance) ou um tolo. Não há muito espaço para nada no meio. Ah, e também não existem muitos gênios verdadeiros.
Sem entender, você realmente não tem idéia do que acabou de lançar REALMENTE, sob não apenas as circunstâncias felizes, mas também as infelizes ou condições de entrada. Às vezes isso não importa, porque você tem sorte. E às vezes isso causa muita dor a longo prazo.
fonte
Há uma situação comum em que você basicamente precisa fazer isso para ser produtivo.
É difícil aprender qualquer tecnologia desconhecida para você, a menos que você tenha um exemplo de trabalho para começar. Portanto, você copia e cola isso para ter algo que realmente seja executado e depois começa a mexer nele.
fonte
Como novo programador (quatro meses após o meu primeiro emprego), conto com bastante ajuda (seja em SO ou em outros lugares). Faço questão de NÃO copiar e colar cegamente o código de outros. Mesmo que o código fornecido seja o que eu usarei, digitá-lo-ei no meu programa e, em seguida, dedicar um pouco de tempo para garantir que eu entenda completamente o que ele faz e os motivos.
Quero garantir que estou aprendendo constantemente e não apenas um especialista em recortar e colar
fonte
Eu tenho muitos sentimentos sobre esse tópico, e não posso dizer honestamente que algum deles seja inteiramente objetivo.
Existem muitos argumentos para cortar e colar o código de outras pessoas no seu aplicativo. Alguns deles podem fazer sentido, outros não. Por exemplo, se você tem um método no blog de alguém que recebe uma entrada e executa algum algoritmo matemático complicado que está muito além de suas habilidades matemáticas e cospe um resultado - esse é um argumento para cortar e colar - obtenha a permissão do autor para usar seu código e credite-os onde for devido - é a coisa honrosa a se fazer.
Existem argumentos para não reinventar a roda - novamente, isso faz sentido, em teoria. Mas se você não reservar um tempo para se familiarizar intimamente com o código que está cortando e colando, não saberá se há uma maneira melhor de resolver esse problema, não saberá se há bugs 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ódigos de outras pessoas que você roubou, roubou, plagiou ou não, pensou nisso; talvez você nem precise saber como programar além de Frankensteining. juntos a partir de peças recuperadas.
Há momentos e lugares em que considero esse comportamento completamente aceitável. Para hackear ferramentas rápidas e descartáveis que não são projetadas para a longevidade, mas para realizar uma tarefa, agora por gancho ou por bandido. Com o objetivo de criar protótipos e estudar as novidades, aprender e avançar em um contexto teórico, acho que este é um jogo completamente justo.
Cortar e colar o código de outras pessoas é plágio - se você tem a bênção deles e entende o código que está colando e ele se encaixa na construção dos padrões de codificação para seu aplicativo, tudo bem, admito que é 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, existe um risco muito real de que, quando você executa o código cortado / colado, ele tenha efeitos colaterais catastróficos.
Não visando essa resposta para você, John, eu sei que você é muito eticamente inclinado quando se trata de tópicos como esse, então isso é realmente 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 contratado por outra pessoa; nesse caso, você não possui os direitos autorais e deve obter a permissão da pessoa para a qual você o codificou. Descobri que, a menos que o código seja pertinente aos conceitos funcionais proprietários, a maioria dos empregadores concorda com você reutilizar suas próprias idéias para outros clientes.
fonte
Como 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 clara.
fonte
Se o código estiver bom, em vez de copiar e colar, ele deve ser transformado em uma biblioteca comum. Mas as pessoas não podem se incomodar com a refatoração e preferem ter a mesma funcionalidade distribuída por cópia e método.
Em vez de ter uma lei absoluta universal de copiar e colar é bom ou ruim, deve-se ver quando usá-lo.
Os profissionais para copiar e colar são: Acelera rapidamente Os contras são: O mesmo código está espalhado em vários locais e qualquer problema encontrado / resolvido precisa ser resolvido em todos os lugares, se em vez de copiar e colar um o usou como biblioteca comum, a atualização será propagar em todos os lugares. Para um pequeno investimento inicial de usar uma biblioteca em vez de espalhar o mesmo código em todos os lugares.
A escolha é economizar um pouco de tempo inicialmente comparado a muito mais tarde; copiar e colar é o caminho a seguir; caso contrário, refatorar e colocá-lo em uma biblioteca comum.
fonte
Na maioria dos casos, o código que você encontrará na rede não se ajusta exatamente aos seus propósitos.
O que me vejo fazendo muito é copiar código de alguém, reduzi-lo até a essência e, em seguida, adicionar código até que ele atenda aos meus requisitos. Eu sempre refatorá-lo para corresponder às minhas convenções de nomenclatura e estilo de codificação.
Eu pessoalmente odeio quando leio um tutorial e eles começam mostrando o código para um caso complicado. Comece com a essência e mostre os blocos de construção para estender o código. Se eu começar um blog próprio, fornecerei às pessoas um exemplo de código comentado que mostra a essência do que eu quero fazer, como você pode adicionar funcionalidades / casos especiais e um exemplo completo do recurso básico.
fonte
Por que reinventar a roda se você entende o que o código está fazendo, tem permissão para reutilizá-lo (ou está aberto) e você não precisa necessariamente de todo o código que a outra pessoa escreveu. Geralmente copio uma implementação de algoritmo e a modifico de acordo com minhas próprias necessidades. Normalmente, quando apenas recordo e colo, é porque não preciso de tudo o que estava no exemplo, portanto, adicionar outro arquivo seria apenas um desperdício (ou é algo dentro de uma função). Concordo com o jzd se você está cortando e colando seu próprio código no mesmo projeto, então há algo errado e você provavelmente deve descobrir uma maneira econômica de liberá-lo ou compartilhar a função.
fonte
Acho que os membros da equipe de " integração " ou aqueles que não têm tanta experiência com código ou em programação tendem a copiar e colar com mais frequência e não entendem o que fizeram (entrando nos problemas mencionados em sua pergunta).
Também acho que os programadores geralmente ficam longe do cut & paste para seu próprio desgosto, porque amam o código e muitas vezes reinventam a roda, apenas porque desejam melhorá-lo ou aprender mais.
fonte