-
Design Patterns: Elements of Reusable Object-Oriented Software - Must-read for all programmers, regardless of are of expertise. The authors begin by describing what patterns are and how they can help you design object-oriented software. They then go on to systematically name, explain, evaluate, and catalog recurring designs in object-oriented systems.
-
Refactoring: Improving the Design of Existing Code - A good read for programmers who have been in the field for some time (in order to be able to appreciate gow important it is to refactor your code).
-
Adaptive Code: Agile coding with design patterns and SOLID principles - A book about building robust code that can scale and performs well in Agile settings.
-
Head First Design Patterns - A book that is equally valuable both for begginers and for novice/expert developers.