-
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
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