Regarding comments, I really liked a technique Martin Fowler talked about in Refactoring.
Whenever he feels the need to comment, he extracts the commented block into a new method and gives it a name that explains the purpose - instead of the comments.
The result is code cut into small self-explaining blocks that reads pretty much like a sentence.
I tried to follow it these last weeks and IMO it works great.
Instead of a comment - use a function name.