Neste post, vou dar uma olhada no que a cópia de código realmente significa para o desenvolvimento de software, o que o bom roubo de código significa, e as armadilhas de copiar mal.
É um segredo aberto entre os codificadores que alguns dos códigos de exemplo que são postados como parte de respostas para perguntas acaba em código de produção. Talvez você tenha feito uma pergunta e conseguido o perfeito for loop em troca. Talvez você tenha encontrado uma ótima resposta que já tinha o async await exato aguardando implementação para se adequar à sua aplicação.
Então, quando eu encontrei este tweet promovendo os benefícios de roubar código eu comecei a me perguntar; copiar e colar códigos poderia realmente ser benéfico?
Copiar e colar pode ser perigoso, mas, novamente, muitos aspectos do desenvolvimento de software podem quando feitos de forma incauto. Neste post, vou dar uma olhada no que a cópia de código realmente significa para o desenvolvimento de software, o que o bom roubo de código significa, e as armadilhas de copiar mal.
Só para constar, não estou defendendo que você copie e cole código do nosso site público de Perguntas e Respostas, há casos em que ele pode colocá-lo em apuros. Mas, como nossa convidada de podcast Anna Lytical nos mostrou,ele pode ser feito bem para produzir rapidamente protótipos em funcionamento.
Se você copiar exemplos de código, lembre-se de fornecer atribuição. Dependendo de quando o código foi editado pela última vez, ele é licenciado sob uma versão da licença Creative Commons, sendo o mais recente o CC BY-SA 4.0, que requer atribuição.
Código uma vez, executar milhões de vezes
Copiar código de resposta a sua pergunta é uma forma de clonagem de código; ou seja, duplicar código de dentro de um projeto ou entre projetos e reapusi-lo. Dependendo de quem você perguntar, apenas 5-10% ou até 7-23% do código é clonado de outro lugar. Se esses clones são bons ou maus está em debate.
Independentemente da quantidade exata, a clonagem de código é extremamente comum. O código boilerplate é essencialmente código repetido regularmente ao longo de um projeto. As chances são muito boas de que esses codificadores não estão digitando cada um deles à mão. Ferramentas como lombok tentam reduzir a necessidade de caldeira, mas o fato permanece:
Haverá algumas peças de código que vão aparecer em um projeto mais e mais
Como eles podem precisar de uma pequena modificação, esses trechos de código não podem ser desviados para uma função ou dependência separada.
Falando nisso, bibliotecas e dependências externas são uma maneira eficiente de reutilizar a funcionalidade sem reutilizar o código. É quase como copiar código, exceto que você não é responsável pela manutenção dele. Heck, a maior parte da web hoje opera em uma variedade de frameworks e bibliotecas plugin que simplificam o desenvolvimento. Reutilizar o código na forma de bibliotecas é incrivelmente eficiente e permite que cada biblioteca focada seja muito boa no que faz e só isso. E ao contrário da academia, muitas bibliotecas nem precisam de nada que indique que você está construindo com ou em cima do código de outra pessoa.
O gerenciador de pacotes JavaScript npm leva isso ao extremo. Você pode instalar bibliotecas minúsculas e de função única,algumas tão pequenas quanto uma única linha de código,em seu projeto através da linha de comando. Você pode pegar qualquer um dos mais de um milhão de pacotes de código aberto e começar a construir suas funcionalidades em seu aplicativo.
Claro, como em toda abordagem para o trabalho, há desvantagem para este método. Ao instalar um pacote, você desiste de algum controle sobre o código. Alguns codificadores maliciosos criaram pacotes legitimamente úteis, esperaram até terem uma taxa de adoção decente e atualizaram o código para roubar carteiras de bitcoin. Para seu crédito, a equipe da NPM consegue liderar esse tipo de ataques rapidamente, mas quanto mais dependências externas você tem, maior a superfície de ataque que você apresenta.
Mesmo as respostas não são imunes à clonagem de código. Um pesquisador independente encontrou vários casos em que as respostas tinham código copiado de outros lugares. Um trecho de Java encontrou seu caminho em mais de 40 respostas.
Bons artistas emprestam, grandes artistas roubam
No mundo da arte, o roubo faz parte de como grandes obras surgem. Lembro-me de ir ao museu Van Gogh em Amsterdã e ver alguns de seus primeiros trabalhos. Fiquei encantada, mas o que eu não sabia na época era que estes eram estudos de arte japonesa e xilogravuras. O que eu tinha pensado era um estilo único para o seu tempo era na verdade parte de um contínuo, e não o contínuo que eu tinha pensado. Em vez de apenas progredir ao longo do caminho que os mestres holandeses tinham colocado à sua frente, ele pegou ideias de estampas japonesas que encontrou em Paris - ideias de composição, pincel - e as fundiu.
Picasso tem um ditado creditado a ele: "Bons artistas emprestam, grandes artistas roubam." O próprio Picasso foi levantado muitas de suas ideias da arte africana e polinésia e as combinou com seu próprio estudo. Roubar parece errado, e de fato, reivindicar o trabalho de outra pessoa como seu é plágio. Mas a citação está usando a palavra "roubar" para dizer algo um pouco diferente. Um objeto emprestado ainda pertence a outra pessoa; você copia um estilo e ainda pertence a outra pessoa. Roubar, no entanto, é fazer essa ideia sua. Levar crédito pela ideia de outra pessoa é pedir emprestado; entendendo uma ideia e tecendo-a em seu próprio trabalho, isso é o que ele quis dizer com roubo. Steve Jobs era um fã desta citação, e a Apple fez sucesso com ele porque eles roubaram, incorporaram e refinaram.
Quando você clona o código, você corre o risco de simplesmente emprestá-lo. O código emprestado entra no projeto por atacado, desde que compile ou não jogue erros, mas pode ter bugs ou intenção maliciosa assados no que você não está ciente. Os riscos de código mal copiado — ou código copiado com modificação — são legião. Na verdade, a maioria das reclamações sobre código clonado pode ser rastreada aos mutuários. Se você não entende o código, você está sujeito a deixar falhas de segurança no que era para ser apenas uma demonstração de um conceito. Mesmo o trecho mais copiado provavelmente terá um bug nele.
Por outro lado, quando você rouba código, você sabe exatamente o que ele faz. O cerne disso, as peculiaridades, tudo isso se torna uma parte perfeita do seu próprio código. Se você pudesse escrevê-lo novamente de memória, isso é um sinal de um bom roubo; uma reformulação que te deixou com algo mais do que um clone, com algo original.
Então, sim, roubar código. Pegue, entenda e implemente em seus próprios projetos. Faça com que seja seu. Você pode ser mais eficiente, melhorar seus projetos e talvez até melhorar seu currículo (também conhecido como seu ctrl+C ctrl+V). Mas se você copiar sem entender completamente seu código recém-adquirido e o que ele faz, você corre o risco de tornar seu código pior.
O Avance Network é uma comunidade fácil de usar que fornece segurança de primeira e não requer muito conhecimento técnico. Com uma conta, você pode proteger sua comunicação e seus dispositivos. O Avance Network não mantém registros de seus dados; portanto, você pode ter certeza de que tudo o que sai do seu dispositivo chega ao outro lado sem inspeção.