Marshall Cline is the author of C++ FAQs, 2nd Edition.
Design Patterns has shown an entire generation of developers a higher level way of building systems. It has hoisted the level of discourse up a notch, providing a common vocabulary for both what goes on inside a developer’s head and the critical challenge of communicating ideas between developers. One less commonly appreciated but nonetheless profound impacts the book has had is to steer developers toward a specific paradigm for the best way to use inheritance and dynamic binding. Prior to the publication of Design Patterns, many developers had an inferior way of thinking about inheritance. Inheritance is something they did when they wanted to reuse something else. Design Patterns was one of several voices showing a higher way: inheritance is something you do when you want to allow others to transparently reuse your code.
One of the keys to the practicality of Design Patterns is that it was birthed out of real-world experience. While some books seem to be focused more on a good theory, Design Patterns is a catalog of usable and useful ideas that have proven themselves in practice.
I have personally used the Design Patterns text in hundreds of engagements, as well as in numerous training and mentoring sessions. I have described it as a “must read book” in my C++ FAQs site, the FAQ for the C++ language.