Clean Code Review

Se você já pesquisou indicações de livros sobre programação, há uma grande chance de Clean Code, do Robert C. Martin (Uncle Bob), ter aparecido na lista. É quase um rito de passagem: alguém vai te dizer “leia Clean Code".

O que eu gostei no livro

Mais do que um manual de boas práticas de programação, eu enxergo o Clean Code como um verdadeiro ponto de virada na história do desenvolvimento. Ele conseguiu dar nome a um conceito que já existia, mas que ainda não tinha ganhado força suficiente: a busca por código de qualidade. Antes dele, falávamos sobre código “bom” ou “ruim” de forma solta e desorganizada. Depois dele, o debate ganhou um termo claro, uma bandeira, quase um movimento dentro da comunidade dev.

Uma das frases mais marcantes do livro traduz bem essa essência:

“A única maneira de ser rápido é fazer as coisas direito.” — Uncle Bob

O impacto que essa obra causou no universo da programação é difícil de mensurar. De repente, temas como clareza, leitura fácil e manutenção sem sofrimento deixaram de ser vistos como “frescura” e passaram a ser tratados como prioridade. Na minha opinião, isso ajudou a elevar o nível das discussões técnicas e tornou nossa área mais madura, colaborativa e menos caótica.

Mesmo com a maioria dos exemplos sendo em Java, o livro não se limita a uma linguagem específica. Pelo contrário, os aprendizados são amplos e se aplicam a praticamente qualquer stack. Para quem está iniciando na carreira, o valor é ainda maior, porque o livro apresenta fundamentos que muitos desenvolvedores experientes já usam sem perceber. Como, por exemplo: nomear variáveis, classes e funções de um jeito que revele intenção e facilite a busca no código. Ele também reforça princípios clássicos, como o DRY (evitar repetição), a separação entre comandos e consultas, além de metáforas poderosas que ficam na cabeça, como a regra do escoteiro, que nos lembra de sempre deixar o código melhor do que encontramos.

O livro também reúne uma série de práticas que parecem simples, mas que mudam tudo quando viram hábito:

  • Usar nomes baseados no domínio do problema, e não termos genéricos, algo que se conecta diretamente com DDD.
  • Lidar com erros usando exceções que não atrapalham o fluxo o tempo todo, mas que trazem o máximo de contexto quando algo falha.
  • Criar testes unitários que sejam rápidos, independentes, repetíveis, auto-validáveis e escritos no momento certo, verificando apenas um comportamento por vez.
  • Estruturar classes para que tenham uma responsabilidade clara e única.
  • Garantir que cada função faça só uma coisa, mantendo a mesma camada de abstração do começo ao fim.
  • Priorizar funções puras, sem efeitos colaterais inesperados.
  • Separar métodos entre ações (que alteram estado) e perguntas (que retornam dados), seguindo Command-Query Separation.
  • Evitar comentários desnecessários e remover código obsoleto sem medo, já que o versionamento guarda a história.
  • Esconder dependências externas atrás de interfaces para manter o código testável e desacoplado.
  • Usar encapsulamento e abstração de dados para criar APIs mais seguras, compreensíveis e resistentes a erros.

O mais curioso é que percebo esses ensinamentos voltando constantemente no meu dia a dia. Em revisões de PR, sessões de pair programming e conversas com o time, eu me pego repetindo esses mesmos conselhos, o que prova que o livro não ensina apenas a escrever código melhor, mas também a identificar e consertar o que já existe.

Outro ponto alto é o enorme catálogo de code smells. Ele treina nosso olhar para detectar padrões problemáticos no código e mostra caminhos práticos para combatê-los. Porque no fim, código limpo não é só o que a gente escreve, é aquilo que a gente aprende a reconhecer e melhorar sempre que encontra.

O que eu não gostei no livro

É muito opinativo

O livro traz diretrizes como se fossem verdades absolutas. Só que engenharia é contexto. Às vezes uma regra boa em Java 2008 não se aplica tão bem em projetos modernos, sistemas distribuídos, ou até times pequenos onde pragmatismo vence formalismo.

Algumas recomendações envelheceram

  • Aversão a classes maiores pode não funcionar bem com design orientado a dados
  • Nem todo código precisa ser hiper-abstrato pra ser limpo
  • Às vezes menos padrões, mais clareza

O lado perigoso

A forma como o livro apresenta seus princípios pode ser vista como rígida e inflexível, o que acaba sendo uma faca de dois gumes. Ao mesmo tempo em que traz conselhos valiosos, ele nem sempre explica o contexto ou os impactos negativos de seguir essas ideias ao pé da letra. Isso pode confundir, principalmente quem está começando na carreira e ainda não desenvolveu um senso crítico mais apurado.

Levar regras como “funções minúsculas” ou “não repita código (DRY)” como verdades absolutas pode, na prática, piorar um projeto. Por exemplo: aplicar o DRY cegamente pode criar abstrações demais, gerando uma enxurrada de classes pequenas, mas cheias de complexidade desnecessária. O resultado é um código fragmentado, difícil de entender, e que dá mais trabalho para manter do que se algumas repetições tivessem sido toleradas.

Um bom desenvolvedor precisa entender que, às vezes, duplicar um trecho é a escolha mais sensata — seja para deixar a leitura mais clara, evitar indireções confusas ou até melhorar a performance. Em software, nem toda repetição é um problema, assim como nem toda abstração é uma solução.

Outro ponto crucial: práticas táticas de escrita de código não podem vir acima de fundamentos maiores de design, como:

  • Acoplamento baixo
  • Coesão alta
  • Encapsulamento e ocultação de detalhes
  • Separação clara de responsabilidades

Priorizar regras pontuais sem enxergar o impacto na estrutura do sistema pode levar a decisões que parecem “limpas” na teoria, mas causam mais dano do que benefício no longo prazo. No fim, código sustentável nasce do equilíbrio: seguir boas práticas, sim, mas sempre considerando o cenário real, os custos e os trade-offs.

Conclusão

Clean Code é uma obra de grande influência e continua sendo uma leitura relevante.
Seus princípios são valiosos, mas não devem ser tratados como regras universais e imutáveis.

O maior aprendizado que levo do livro não é seguir cada recomendação à risca, e sim desenvolver um olhar mais crítico sobre qualidade, clareza e responsabilidade no código.
Código limpo, no fim, é aquele que equilibra boas práticas com contexto, evitando complexidade desnecessária e favorecendo a colaboração.

Vale a leitura. Melhor ainda é a aplicação consciente.