Não existe algo como Clean Code
(steveonstuff.com)- As pessoas se esforçam por código “clean”, mas “clean” não é um critério útil
- Código não pode simplesmente ser “clean”, porque “clean” não explica nada sobre o código
- Quando as pessoas dizem que um código é clean, normalmente é porque ele é excelente de alguma forma
Clean Code é mesmo um bom código?
-
Um código pode ser excelente por vários motivos
→ fácil de ler, fácil de entender, simples, com bom desempenho, seguro, elegante, testável, encapsulado, extensível, de fácil manutenção, reutilizável.. -
Porém, em certos aspectos, essas características entram em conflito entre si
→ o código mais simples provavelmente não será o mais fácil de testar
→ interfaces e dependências injetadas tornam os testes mais convenientes, mas se afastam da simplicidade
→ usar muitos singletons pode facilitar o entendimento, mas talvez não resulte em uma aplicação de fácil manutenção -
Algumas dessas coisas são fundamentalmente opostas, então pode ser difícil satisfazer todas ao mesmo tempo
→ como engenharia envolve trade-offs, a equipe pode até discutir quais concessões fazem mais sentido aqui
Se o código é excelente, precisamos falar sobre "por que"
- Quando alguém diz que uma solução é “clean”, muitas vezes não consegue justificar o motivo e apenas afirma que é a melhor escolha
- Para ter discussões construtivas sobre soluções técnicas, é preciso conseguir explicar com clareza por que uma solução é melhor do que outra
→ em vez de apenas dizer “é clean”, dizer “é desacoplado, fácil de entender, bom para testar...”
É preciso usar termos precisos
- Programação, em geral, é um esporte coletivo. Quando se está hackeando sozinho, dá para fazer do seu jeito, mas ao trabalhar em equipe é preciso discutir ideias
- Discutir soluções técnicas usando uma linguagem específica e garantir que toda a equipe compartilhe o mesmo entendimento é muito importante para que todos se entendam
- A expressão “clean code” significa coisas diferentes para cada pessoa
→ para alguém, porque a arquitetura é bem definida; para outro, porque o código foi escrito de forma simples com um estilo de formatação consistente.. - Palavras como “encapsulado”, “testável” e “reutilizável” têm significados com os quais todos concordamos
- Quando usamos termos mais específicos para descrever características do código, podemos ter mais confiança de que estamos na mesma página
- “Clean” tem o mesmo nível de precisão que “bom”
Então, o que é "clean code"?
-
Cheguei à conclusão de que, quando descrevo um código como “clean”, muitas vezes isso significa “o código é bom, mas não consigo ter total certeza do porquê”
→ ou então eu sei por que o código é bom, mas não encontro palavras claras para explicar -
Desenvolver essa intuição também é bom, mas não devemos parar aí. É preciso ir mais fundo e tentar entender “por que esse código é bom”
→ esse código tem alguma característica que os outros não têm? E essa característica é a mais adequada para o nosso projeto? Talvez essa nem seja a solução certa -
Espero que possamos ter certeza de que o que precisamos não é de clean code, mas de código ______
6 comentários
Obrigado pelo ótimo texto ~~
Não saia por aí chutando código legado sem pensar duas vezes
você ao menos já conseguiu satisfazer o primeiro requirement de alguém alguma vez?
Concordo.
Parece que, em "aquele livro", o que o autor chamava de código limpo tinha foco, entre estes aspectos, em ser "fácil de entender" e "testável". Claro, acho que ambos são métricas muito importantes. Mas, por causa de especificações ainda não padronizadas ou bibliotecas incompletas, às vezes acabamos usando o chamado "hack" e, nesses casos, parece inevitável abrir mão da qualidade do código em certos pontos para garantir a qualidade do programa.
Concordo. Quando entendemos “limpo” como “alta qualidade”, (como Weinberg disse) qualidade é algo que tem valor para alguém, então acho que é necessário haver critérios e definições de qualidade dentro da equipe.
Este é um texto que defende que, em vez de falar de forma vaga e ambígua em “código limpo”, é melhor apontar exatamente do que se está falando.
Sobre isso, no Hacker News também há vários comentários discutindo diferentes interpretações de “código limpo”. Vale a pena ler os comentários também.
There’s No Such Thing as Clean Code https://news.ycombinator.com/item?id=30111516
O tema é um pouco diferente, mas vale consultar também o texto abaixo, que foi publicado anteriormente.