43 pontos por xguru 2022-02-03 | 6 comentários | Compartilhar no WhatsApp
  • 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

 
kkw855 2023-04-18

Obrigado pelo ótimo texto ~~

 
choijaekyu 2022-02-04

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?

 
sumkim 2022-10-12

Concordo.

 
rtyuiop 2022-02-03

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.

 
spilist2 2022-02-03

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.

 
xguru 2022-02-03

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.