I believe that you can tell the experience of a developer fairly quickly from their commenting habits.

Going by my completely made up chart, my experience has been that initially developers do not comment much at all, but as they progress they switch to over-commenting before eventually learning how to comment appropriately.
Part of the reason for this is from university education and being forced to explain your work with heavy commenting.
However, developers will learn that an incorrect comment is worse than no comment at all.
My philosophy is that there is only one place comments belong, and that is the XML Comment (Or JavaDoc, DocString, etc depending on your language of choice) that provides information about each method.
These comments do not explain your code. They explain your interface, and are much more useful to an experienced developer, especially with the modern IDE's of today (Visual Studio, Eclipse, NetBeans etc) that can read these comments and provide documentation on the fly.
I create these religiously, even for private methods.
The code in your methods should act as a commentary on itself. If you need a comment to explain what it does, then I would consider breaking it out into multiple methods until the code is clearly understandable.
The need to comment code often indicates unneeded complexity.
Of course, you cannot always adhere to this, and there are occasions where I have to comment an obtuse line, usually because I am using an already obtuse 3rd party API...However, I try to avoid this if at all possible.
Or, you might have a single line of code that describes a complex mathematical equation, and you might want to stop and explain the purpose behind it, a comment is appropriate there.
So, before you write your next comment, stop and think about how the code might be cleaned up to make its intent more obvious.
You will end up with cleaner code, with less noise between the lines and anyone who has to work on your code later will thank you.
Posted by Jonathan Holland on 2/4/2009.