As you get more experience ... you need less commenting ... but then you start working on bigger teams, where other programmers need you to comment.
I find that I only FORCE myself to comment in 3 cases:
1. When I'm defining an interface (pure virtual class for c++ peeps), and/or virtual base class method ... so people know what the contract is supposed to be ... not just exactly how its used today.
2. When I had to google something hard or unexpected to solve the problem ... or fix a non-obvious bug.
3. When I couldn't find good enough method names or variable names, so a comment was the only was I could read my own code from top to bottom.
I'm a big fan of long names and short methods ... but sometimes a name like "UpdatePhysicalDamageWithoutResistence" is just a silly method (and also usually a sign your code design / organization isn't great ... but at the end of the day sometimes you just need to write some more code).
Never write comments targeted for beginners or people who've never seen the codebase at all. Write comments targeted at average intermediate programmers who've worked on the project for a short while ... that way you won't need to repeat the standard idioms over and over ... but you will point out the new and interesting stuff.