Design Patterns: Elements of Reuseable Object-Oriented Software
Design Patterns taught me dozens of software patterns I can now recognize and use in my daily life as a Software Engineer. This is a must read for any developer working in a large and complex Object-Oriented codebase