This article in ACM Queue reminded me of the most valuable
argument I once heard in favor of code comments.
You don't explain what the code does, you tell why it does it.
I'm all for the concept of self-documenting code, and except
for the obvious iterator i and counter n, I do try to find descriptive
names for my data structures.
The strongest argument against comments is that they can be wrong.
There's nothing as frustrating as a comment that contradicts the code.
Especially when you believe it.
So yes, comments are good, but let them tell why.