Besides SOLID (Single Responsibility, Open/Closed, Liskov, Interface Segregation and Dependency Inversion), a programmer's toolchest should contain
DRY - Don't Repeat Yourself
SLAP - Single Level of Abstraction
especially SLAP, but I aggregated some of this info already.
Many working programmers have never seen clean, simple code that does real work. They've seen toy code in books that is clean and simple and they've seen actual, valuable code that does real work in their job and it's crap. As a result, they don't know that they should be striving for clean, simple code in their jobs.... Motivation grows by small successes.
Glenn's Tactical Design talk at RailsConf.