1 pontos por GN⁺ 2025-01-12 | 1 comentários | Compartilhar no WhatsApp
  • Percepção sobre o efeito Makefile

    • Efeito Makefile refere-se ao fenômeno de não criar do zero uma ferramenta complexa ou pouco familiar, mas sim copiar e modificar um exemplo anterior que já funcionava bem.
    • Esse efeito aparece com frequência quando diversos engenheiros usam ferramentas como o Make.
    • Quando um trabalho semelhante já foi feito no passado, o engenheiro copia um Makefile anterior e o adapta à nova situação.
  • Problemas e impactos

    • Problemas na fase de projeto: a ferramenta é complexa demais ou incômoda de usar do zero.
    • Configuração de CI/CD: é comum copiar e ajustar configurações YAML no GitHub Actions ou no GitLab CI/CD.
    • Configuração de linter e formatter: conjuntos básicos de regras são copiados entre projetos e reforçados ou flexibilizados conforme a necessidade.
    • Sistema de build: tudo que é minimamente não trivial passa a se parecer com o sistema de build anterior.
  • Por que esse fenômeno é importante

    • Falta de suporte para diagnóstico e depuração: é preciso executar a ferramenta repetidamente, e ela fornece pouca informação.
    • Dificulta o aprendizado: apenas alguns especialistas conhecem bem a ferramenta, enquanto os demais copiam e ajustam com conhecimento mínimo.
    • Problemas de segurança: tarefas de segurança exigem conhecimento profundo, e sistemas afetados pelo efeito Makefile podem causar confusão entre código e dados.
  • Pontos a considerar no design de ferramentas

    • Se a ferramenta realmente precisa ser configurável.
    • Se ela precisa de uma sintaxe própria.
    • Se é possível reutilizar uma sintaxe existente ou idioms já conhecidos.
    • Se o padrão de copiar e colar acontece com frequência.
  • Fenômenos semelhantes ao efeito Makefile

    • É parecido com cargo cult ou normalização do desvio, mas o efeito Makefile diz respeito ao resultado de um design específico.
    • O efeito Makefile não é, por si só, inerentemente ineficiente ou ruim. É algo de que se deve estar ciente ao projetar ferramentas e sistemas.

1 comentários

 
GN⁺ 2025-01-12
Comentários do Hacker News
  • Sistemas complexos muitas vezes evoluem a partir de sistemas simples. Um sistema projetado como complexo desde o início tende a não funcionar bem; é preciso começar com algo simples

  • Make e Makefiles são muito simples, a menos que sejam gerados automaticamente por autoconf. Quando forem gerados por autoconf, não devem ser modificados e, se possível, é melhor evitar usar autoconf. Escreve-se ou copia-se um pouco de código para usar no projeto e ele vai sendo melhorado conforme a necessidade. Depois, esse código pode ser copiado para outro projeto e adaptado, refletindo as mudanças de volta no projeto original. Após passar por vários projetos, ele pode ser extraído como biblioteca e publicado como open source

  • Cerca de 10% dos desenvolvedores têm a capacidade de começar algo do zero. 40% trabalham por meio de copiar e colar código, e 50% pouco sabem além de resolver problemas do LeetCode. Muitos Makefiles são feitos com base em copiar e colar

  • Cargo Cult Development significa uma forma de desenvolvimento em que se imitam apenas os aspectos superficiais da tecnologia sem entender seus princípios. É uma abordagem de copiar, colar, testar e ajustar, torcendo para que funcione

  • Makefile pode ser uma analogia ruim. Muito código é copiado da web e inclui várias partes que nem chegam a ser usadas. Remover o que é desnecessário é um bom hábito

  • Ferramentas ou sistemas com os quais desenvolvedores precisam interagir são vistos como pouco valiosos para aprender no dia a dia. Configurações de CI e similares são tratadas como "configurou e esqueceu", e as partes complexas ficam com outra equipe. É preciso oferecer ferramentas e documentação adequadas para que os desenvolvedores consigam acessá-las com facilidade

  • Ferramentas como LaTeX, por serem usadas com pouca frequência, muitas vezes levam as pessoas a começar copiando e colando. Ferramentas de uso raro são difíceis de lembrar

  • Make é bem documentado, e quem lê a documentação consegue entendê-lo com facilidade. No entanto, muitas ferramentas têm documentação insuficiente, o que dificulta a compreensão por parte dos usuários

  • Ferramentas complexas são necessárias, mas se o efeito Makefile aparece em aplicações simples, isso significa que a ferramenta é complexa demais. Para projetos pequenos, um Makefile pode ser adequado

  • "Copy-Pasta Driven Development" aponta os problemas gerados pelo ato de copiar e colar código. Ferramentas como o Copilot podem agravar esse problema