People keep bashing on GoF for conflicting reasons: it’s too simple, requiring no thought; it’s too complicated, the patterns are huge; it’s too low level, bogged by implementations instead of abstractions; it’s too abstract, not considering real world implementation issues; and so on…
The truth is that even the best books are not for everyone. Some will call Fred Brooks’ book largely irrelevant. “Code Complete” is huge and contains a lot of advice that is just a matter of style and not quality. “Effective C++” is too simple, and only shows toy examples and not real world examples. The list goes on.
Yet most of us agree that these books are very important, and many would agree that they are among the best available. GoF (and other books) are very easy targets. So is C++ (in a different way, perhaps).
People like bashing them, but the truth is that they enabled breakthroughs in real world software development, and are still very useful tools on the road to quality.
On another, related note:
Steve Yegge also doesn’t like design patterns, and believes like others here that they point to deficiency in the language.
“The problem is, about 1/3 to 1/2 of them were basically cover-ups for deficiencies in C++ that don’t exist in other languages. Although I’m not a huge Perl fan anymore, I have to admit the Perl community caught on to this first (or at least funniest). They pointed out that many of these so-called patterns were actually an implementation of Functional Programming in C++.”
http://steve.yegge.googlepages.com/singleton-considered-stupid
That’s fine. Maybe we should all use LISP, or at least Haskell. C++ really sucks, or whatever. Man, overload resolution is a real hack.
In the meanwhile, I have real work to do.
I really need to get that image display UI for that digital camera working. I don’t know of any LISP implementation that runs well enough on a digital camera. LISP is simply not an option (yet?). So I am gonna do it in C++. I might use a design pattern here or there, even (GASP!) a Visitor. Because I recognize that patterns are simply that: recurring OO design solutions to recurring problems.
When you are holding that digital camera and browsing through your hundreds of photos in lightning speed, organizing them, and resorting them, you will be glad I used C++, and employed all tools and methods available to me. You won’t know it, of course. Your software will simply work. It will work very well: fast, easy, no crashes. But it will do so because I considered the design carefully, coded with discipline, and tested as best as I could. The design patterns book is just another tool.