Eu estava lendo o artigo da Wikipedia sobre Douglas McIlroy e encontrei uma citação que menciona
"O verdadeiro herói da programação é quem escreve código negativo".
O que isso significa?
Eu estava lendo o artigo da Wikipedia sobre Douglas McIlroy e encontrei uma citação que menciona
"O verdadeiro herói da programação é quem escreve código negativo".
O que isso significa?
Respostas:
Isso significa reduzir linhas de código, removendo redundâncias ou usando construções mais concisas.
Veja, por exemplo, esta famosa anedota da equipe original de desenvolvedores da Apple Lisa:
fonte
Há uma citação de Bill Gates, ao longo das linhas de medição da produtividade do programador por linhas de código, é como medir o progresso da construção de aeronaves em peso.
Gostaria de acrescentar que a métrica do LOC incentivou o uso de linguagens muito longas e reinventou deliberadamente a roda para atender às cotas.
fonte
Quando eu estava no ensino médio - e sim, tínhamos computadores nos anos 70, embora precisássemos fazê-los com peles de animais usando facas de pedra - um dos professores de matemática fez um concurso de programação. As regras eram que o programa vencedor seria aquele que produzisse a saída correta e que tivesse o menor produto de linhas de tempo de código em tempo de execução. Ou seja, se o seu programa pegou, digamos 100 linhas de código e funcionou por 5 segundos, sua pontuação foi de 500. Se alguém escreveu 90 linhas de código e correu por 6 segundos, sua pontuação foi de 540. Baixas vitórias, como o golfe.
Pareceu-me um sistema de pontuação brilhante, recompensando concisão e desempenho.
Mas a inscrição que atendeu tecnicamente aos critérios de vitória foi desqualificada. O problema era imprimir uma lista de todos os números primos menores que 100. A entrada desqualificada era algo assim (a maioria dos estudantes usava o BASIC naquela época):
O aluno que escreveu essa entrada destacou que não era apenas curto e muito eficiente, mas o algoritmo deveria ser óbvio para qualquer pessoa com um conhecimento mínimo de programação, tornando o programa altamente sustentável.
fonte
É explícito. Se custar US $ N por linha média codificada, a codificação de "linhas negativas" certamente será uma vencedora.
Isso significa, como conselhos práticos, que o código pequeno que realiza o trabalho é muito melhor que o código grande que faz a mesma coisa, todas as outras coisas sendo iguais.
fonte
X
linhas. Em seguida, ao longo de várias iterações, reduzindo o produto final porY
linhas. Portanto, as(X-Y)
linhas restantes parecem muito caras porque a carnificina da refatoração cortou todo o lixo.Escrever o mesmo programa em menos código é uma meta para todos.
Se um programa levou 200 LOC para codificar e eu o escrevi em 150, escrevi -50 LOC. Então eu escrevi código negativo.
fonte
A resposta de Thilo é provavelmente a mais precisa historicamente, mas a metáfora do "código negativo" também pode incluir desempenho e uso de memória - esforços recompensadores para adiar a execução ou alocação de algo até que seja realmente necessário.
Essa mentalidade de "procrastinação vale a pena" produziu axiomas explícitos como "Não fazer nada é sempre mais rápido do que fazer alguma coisa", "O código mais rápido é o código que nunca é executado" e "Se você pode adiá-lo por tempo suficiente, talvez você nunca precise fazer isso "(referindo-se ao adiamento de operações caras até que seja realmente necessário)
Uma técnica para realizar código negativo é desafiar suposições e definições iniciais do problema. Se você pode redefinir o problema / domínio de entrada de modo que "problema persistente nº 3" seja categoricamente impossível, não será necessário gastar tempo ou código lidando com o problema complexo nº 3. Você eliminou o código otimizando o design.
fonte