Code should be the 'what' sure - as in, 'what does this do' - but comments are needed for 'why did we do this/do this this way', 'how and where this function is used', 'when this was added', 'who added it', etc. Only one of the fundamental questions can be answered by code, regardless of how clear the code is.
I'm of the mind that how and where are better addressed via Unit Tests (demonstrating the how) and "Find Usages" (to find the where), and a good code structure that breaks things down into collected set of namespaces that naturally build upon each other (to indicate the where it goes, the intent behind those namespaces may need to go in comments or documentation though).
I do tend to write more thorough comments when not also writing unit tests and specification tests and such, but in my mind that's me trying to compensate for the lack of having time to do it the 'proper way'
And yeah, When and Who are surely source control concerns?
git blame and svn blame. Kinda dislike the names of those (you aren't blaming anyone! That word has negative connotations! Negative!), but they are useful when you need to know who did a thing and when. Back and before the VSS legacy project days, "Who and When" comments had more purpose though, and I've had to crack open a legacy project or two in my time.
Which is how I view commenting: It's a fallback for when your tools and process are currently limiting your capacity to do things the 'proper way' due to time or technology constraints. Deadlines gonna deadline and managements gonna management, and some tools just don't allow you to encode things effectively in the code or the tool.