Design Patterns

Dive Into Design Patterns #book - "Design patterns help you solve commonly-occurring problems in software design. But you can’t just find a pattern and copy it into your program, the way you can with off-the-shelf functions or libraries. A pattern is not a specific piece of code, but a general concept for solving a particular problem. They are like pre-made blueprints that you can customize to solve a recurring design problem in your code."
Head First Design Patterns #book - by Eric Freeman, Kathy Sierra, Bert Bates, Elisabeth Robson
Introduction to Algorithms #book - by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein
Refactoring to Patterns #book - by Joshua Kerievsky, Martin Fowler (Foreword by), Ralph Johnson (Foreword by)