Gente, faço softwares há mais de 20 anos (sou da época do cartão perfurado

). Começei com FORTRAN, passei pelo Basic, fui no Assembly (desde o 6502, 8085, Z80, 8051, etc.), cheguei no C, mexi com Delphi e VB... e o que posso dizer é que no início, enquanto implementava, Deus e eu sabíamos o que eu estava fazendo... 2 dias depois, só Deus sabia, porque eu já nem lembrava prá que servia a variável y.
Comentar só traz vantagens (exceto comentários de estagiários do tipo "incrementa X"... sem preconceito!). O bom senso e a coerência é que devem prevalecer (na minha humilde opinião).
Hoje trabalho praticamente só com C, e tenho o hábito de incluir um cabeçalho em cada função, descrevendo para que serve, os seus parâmetros de entrada e de retorno. Além disso costumo incluir alguma observação importante ou nota de projeto (tipo: "A chamada deve ser efetuada com as interrupções desabilitadas", ou algo do tipo: "este procedimento deverá ser executado antes de chamar a função Z")
No interior da função comento apenas o que é relevante, mas usando comentários referentes à aplicação, explicitando o significado daquela linha.
Além de ter este hábito para meu próprio benefício, meus clientes (quando recebem o código-fonte) ficam muito satisfeitos, porque percebem a transparência da coisa, ou seja, notam que não escondo nada e nem omito informações importantes. Afinal, eles pagam pelo meu serviço e se, no dia de amanhã me der uma daquelas "caganeiras", eles saberão se virar e dar manutenção ou realizar adequações.
Conselho do velho Fandango... Comente sempre, mas nunca sobre a mulher ou a filha do chefe.

... e assim falou Zaratustra !