Design Patterns: Elements of Reusable Object-Oriented Software
This book is probably not for a total beginner. Its part one is filled with insight on how software should be built efficiently - many of these concepts have been used to builds todays more usable programming languages. The second part is a guide describing some of the more common patterns. The goal of this book is first and foremost to define and document common code constructs such that engineers could better communicate