Books Software
Refactoring: Improving the Design of Existing Code
The Pragmatic Programmer: From Journeyman to Master
Design Patterns: Elements of Reusable Object-Oriented Software
Head First Design Patterns