This is a list of programming observations that I intend to look over every now and again to keep them in my mind:
When approaching a problem, don't just dive in and start looking at one area of the problem. This is particularly important if you have already been pointed in a certain direction. Don't take anything for granted, step back and take a broad look at the problem and try to get to the core of what the real issue is. A bit of thought upfront can make sure you are not following a false lead.
Formulate different ways you might tackle a situation and then determine which one is most likely to pay off. If there is some kind of small probing tests you can make, try these before delving into something that will take a long time.
Try to make comments generic if possible. Writing specific details in a comment can lead to a maintenance nightmare and can easily turn into incorrect comments when cut and pasting to a new location.
Take time to make your error messages meaningful and contain any relevant data that will make it easy to determine exactly what caused the problem to occur. This may save you a lot of pain in the future when you are looking at logs or some screenshot captured by a user.