About Comments
A comment is a part of a program that isn't part of the program.
Don't comment who or when. That's the source control system's job.
Don't comment what. If I'm a programmer worth my salt, I can read your code and figure out the what.
Don't spend a lot of space commenting how. Just provide a reference, like "Implements topological sort (see CLR)". If I'm an engineer worth my salt, I can look it up if I'm not already familiar with it. If I can't obtain the source, I can spend an hour or two studying the code, and I'll probably pick up the gist of the how.
PLEASE PLEASE PLEASE ALWAYS COMMENT WHY. No matter how good I am, no amount of time I spend looking at your code will tell me what the hell the reason for its existence is. I can only guess the why.
Lastly, commenting where is optional, but can be quite entertaining.