I wouldn't, for example, comment a piece of code which is used internally to automate the generation of more repetative code... because that code is only for me to see and consume.
However, as someone who invests a great deal of time into writing development articles for others, I instinctively comment any "complex" routines that I know will be consumed by others.
I'm certainly not going to apologize for doing so, and I certainly don't expect others to comment every piece of code they produce.
However, when comments serve to shed light on the "why" (rather than the "how", which the code should explain in its own right), then they can be helpful at giving new developers some insight into the "big picture" of a system.
Incidentally, I just had this argument with a very large number of developers in a particular community.
110 William St. New York, NY 10038
After someone asks a question, members of the community propose answers. Others vote on those answers. Very quickly, the answers with the most votes rise to the top. You don’t have to read through a lot of discussion to find the best answer.
Like topics on Wikipedia, questions and answers on Stack Exchange can be edited. If someone writes the beginning of a great answer, someone else can elaborate and make it even better.
The site is free and open to everyone. You don’t have to register, but if you do, you collect reputation points when people vote up your answers, which will appear next to your name.