Code should speak for itself. It is better to explain things in and through the code. Comments are at best a necessary evil when you can't express something in code.
Comments can lie because they are hard to maintain. When the code changes, the comments are usually forgotten or ignored.
Comments are no substitute for bad code.
Good Comments
Legal comments: Copyrights, Authors. It's best to reference a standard license or external document so as not to deface the code.
Informative comments
Statement of intent
Clarifications
Warnings of consequences
TODO comments
Reinforcement of code that is otherwise perceived as unimportant
Javadocs in public API's.
Bad Comments
Whispers
Redundant comments
Misleading comments
Prescriptive comments
Diary comments
Chatter
Do not use a comment if it can be replaced by a descriptive function or variable.
Position identifier
Comments after closing parentheses to emphasize sections may make sense for long functions. They should be avoided and the function abbreviated.
Attributions and asides are unnecessary because source control systems take over this job.