Actually, I am not so sure if comments are really that great. Naresh Jain has a point
http://blogs.agilefaqs.com/2009/08/19/a ... ents-evil/ . ("Also the first thing I do when I see some code is delete all the comments in it.") Also, comments can easily get outdated compared to the code that they supposed to apply to.
Martin Fowler has said a similar thing in
http://martinfowler.com/bliki/ComposedRegex.html
This is easier to follow, but comments never quite satisfy me. Occasionally I've been accused of saying comments are bad, and that you shouldn't use them. This is wrong, in both senses. Comments are not bad - but there are often better options. I always try to write code that doesn't need comments, usually by good naming and structure. (I can't always succeed, but I feel I do more often than not.)
Of course, Donald Knuth goes completely to the other extreme with his literal programming, but that never really took off.
In schools they teach aspiring programmers to write comments but that is not really convincing. In general, one learns a lot of goofy things in schools. Fortunately, I never went to a school where the main purpose was to learn programming.