Eu acho que o tópico está bem escolhido. É "legal" escrever uma linha de Perl que faça dez mil coisas de uma só vez, mas é uma merda quando você precisa revisitá-la.
Em uma nota diferente, inteligente ou não, o código deve ser documentado. Existe uma incompatibilidade inerente de impedância entre as linguagens de programação aceitas pelo setor e os conceitos de alto nível que nós, como seres humanos, estamos acostumados em nosso pensamento. O código de auto-documentação simplesmente não é realizável - até que se torne uma linguagem natural. Mesmo o código Prolog precisa ser documentado, pois, por mais alto nível que seja, ele ainda é bastante formal.
O código imperativo de granulação fina serve para implementar planos de granulação grossa - que precisam ser documentados. Não quero ter que ler todas as 50 linhas do método quando um comentário rápido de um roteiro de 3 linhas for suficiente.
Edição posterior: Um exemplo mais eloquente é aquele que transcende os computadores. Um livro pode ser muito bem escrito, mas geralmente queremos processá-lo em diferentes níveis de abstração. Muitas vezes, um resumo do livro é suficiente, e é isso que os comentários podem oferecer ao código. É claro que o código bem abstraído pode percorrer um longo caminho para a auto-documentação, mas não pode fornecer todos os níveis de abstração.
E os comentários também podem agir como notas de rodapé de um livro, quando precisamos explicar o processo de raciocínio por trás de uma reivindicação no texto principal sem descarrilá-la.
Nesse contexto, acho que minha declaração anterior referente à linguagem natural que transcende a necessidade de comentários está incorreta. Mesmo a linguagem natural, como em um livro, pode se prestar a documentação, explicar de maneira esparsa a abstração incorporada no texto ou fornecer desvios sem atrapalhar o texto principal. Com a observação de que um código bem abstraído já pode ter sido um longo caminho para se auto-documentar.
Por último, mas não menos importante, os comentários podem ajudar o codificador a manter um alto nível de abstração. Muitas vezes, percebo que dois comentários consecutivos incluídos em uma lista de etapas não falam no mesmo nível de abstração, o que justifica imediatamente uma análise crítica do que estou fazendo com esse código.
Certos problemas transcendem a codificação e afetam a codificação como outras atividades. Os comentários podem fornecer essa ajuda para esclarecer a lógica por trás e as facetas do nosso código, e eu os acho um companheiro agradável que fala um idioma mais suave para beneficiar a pessoa por uma mudança.