I comment anything I feel I may forget in the future. When I was first getting expoed to C#, I commented just about everyother line, unless the line was self-explainatory. In c++ I comment things that need to be commented. When putting in new variable to help get something to work, I often don't name it very well the first time (ok ok I use single letter vars -_-), so I comment them on what they are supposed to do. Commenting everyline, I feel, should only be done in the very very beginning of learning a language.