A colleague and I were discussing about which were the things that we learned from other programmers which made us better. I went on and on about how I learned to engineer software in baby-steps and how that helped me, but we ended up figuring out what makes great code robust and easy to use:
Keep it simple.
Not trying to over-engineer systems, not trying to hide things inside obfuscated APIs, basically not trying to look 'smart', and giving very simple pieces/components that have thin layers, will make you a better programmer.
If it is hard to explain, it probably is hard to mantain and expand.
At least on my experience, it has been a good rule of thumb. Specially now that I have it on my conscious mind :)