Por que os comentários são tão ruins?

Comentários ainda são extremamente utilizados e em algumas empresas obrigatórios. Mas por que existem pessoas que consideram tão ruim utiliza-los?

Andrew Hunt e David Thomas no "The Pragmatic Programmer", lembram que comentar o próprio código é furar o DRY, pois você está se repetindo(o que está no código está no comentário). E a cada manutenção no código é necessário revizar o comentário(se parece muito com o problema de código duplicado, né?).

Em Clean Code, somos alertados que muitas vezes o comentário é uma desculpa para mantermos um código ruim. Sabemos que precisamos refatorar aquela parte do código, mas ficamos mais aliviados com um simples comentário. Como se disessemos a nós mesmos, olha tá ruim, mas agora é possível entender.

Comentários em códigos limpos e legiveis por outro lado são perca de tempo e imprecisos, comentários são escritos na "linguagem humana" e podem ser subjetivos, levando os leitores a entenderem outros significados e forçando eles a lerem o código de uma forma ou de outra.

Apesar de a primeira vista coisas como o javadoc fazer sentido, com um olhar mais cuidadoso podemos ver que a obrigatoriedade que algumas empresas dão para ele, fazem os programadores contarem o óbvio:

/** * @param name The name to be set **/ public void setName(String name);

Já trabalhei em projetos, onde eram adicionados comentários a cada mudança de código, delimitando a onde le aconteceu e quem foi o responsável. Mas por que usar isso, se hoje em dia usamos SVN, GIT e diversas outras ferramentas de versionamento de código? Podemos encontrar muito mais rápido por essas ferramentas o por que de uma alteração do que lendo comentários que aprendemos a ignorar. De fato, Robert Martin nos lembra em seu livro que essas informações costumam ficar irrelevantes de forma extremamente rápida. Daqui há 3 anos, você vai mesmo se importar em saber que Fulano que saiu da sua empresa alterou aquele código?

Como desculpa para este tipo de coisa, estava a problemática do merge, mas não estamos criando um workarround ao invés de solucionar o problema?

Mas nem sempre comentários são ruins, algumas vezes são necessários para explicar alguma regra complexa de negócio que não seria possível demonstrar de forma "codificada", ou até mesmo explicar o porque de uma escolha.

Então antes de adicionarmos um comentário, precisamos parar e refletir se é possível eliminar ele com alguma refatoração.