Back to the bookshelf

Typographic jacket · original cover not fetched

FROM THE SHARED SHELF · 2006–2026 SAMPLE

Design Patterns: Elements of Reusable Object-Oriented Software

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

22 readers recommend it across 13 discussions

Topics are model-inferred labels.

Keep it on your reading list

THE WORD OF MOUTH

What made it worth passing on?

Original Hacker News comments, in the readers’ own words.

remixff2400
I think that some of the advice hasn't aged well into modern language features and computer power, similar to the GoF Design Patterns book. Rather than an entry level book, this would be better for a budding intermediate who can parse what is good and bad about it. But, even then, other resources are better IMO. (Metz, Ousterhout, Kay, PragProg, language-specific design patterns books, etc.) The experience of doing things wrong is valuable, but I think you also don't want to get quagmired there. It just depends on how voraciously/quickly you read and seek out better patterns. (Also, elephant in the room, Uncle Bob has been very vocal and opinionated on the internet about various things and it hasn't endeared many to him because of it)
optymizer
I would split the books into two categories: those that improve the way you structure your code and deliver a software solution, and those that improve your technical understanding of the software platform and the computer you're using. The first are books like Pragmatic Programmer, Mythical Man Month, Code Complete, Design Patterns, talks by Alan Kay on software systems and OOP, even Game Engine Architecture etc. A lot of the content there is distilled experience which is much faster to learn from a book than gain the hard way on the job. The other books are practical deep dives. Here I would recommend a variety of books like Inside the Machine by Stokes, Computer Architecture by Hennessy, 21st Century C by Klemens, Crafting Interpreters by Nystrom, Compilers by Aho, Effective Java, Nature of Code by Shiffman, Ray Tracing Challenge by Buck, Hands on Hacking by Hickey, and others, depending on your interest and area of focus.
warrenm
In my opinion, it's as much a "recommended read" as a lot of other so-called "classics": - Rapid Application Development (also by McConnell) - Soul of a New Machine by Kidder - Mythical Man Month by Fred Brooks - Programming Pearls by John Bentley - Applied Cryptography (2e) by Bruce Schneier - The Cuckoo's Egg by Cliff Stohl - Structured Computer Organization by Tanenbaum & Todd - Design Patterns: Elements of Reusable Object-Oriented Software by Gamma, Helm, etc - A New Kind of Science by Wolfram And many more could be added to this list Sure, some of them use acronyms or reference technology that you've either never heard of or has been supplanted But you could [nearly] do a find-and-replace on those "outdated" terms with a "current" term, and the books would [effectively] be up-to-date Don't get hung-up on specific examples - they're just there to illustrate the problem domain
radicalbyte
It's in the same group as Pragmatic Programmer, Refactoring, Patterns of Application Architecture and the Gang-of-Four book for me. Still recommended for junior programmers as they're all teaching the core of good design. However seeing as the better frameworks/languages/IDEs have internalised a lot of the learnings and that the specific conventions may be outdated - so just follow the recommendations for your platform/framework.

Also recommended in this reply

apo
Design Patterns by Gamma et al. would be an example from software architecture. It catalogs a couple of dozen patterns that recur in projects regardless of their specific domains. Open Source Software Licensing by Rosen is another. It identifies two broad categories of open source licenses and shows how various licenses fit into each. These two books gave me a framework for thinking about large areas that had until I read them been quite confusing. They turn a chaotic jumble of special cases into a simple framework for forming hypotheses and making predictions.

Also recommended in this reply

afandian
On the surface, it's about how to have conversations about difficult topics. Often these are conflict resolution type conversations. These range all the way from "you never take the bins out" to marriage breakups to large international political conflicts. These conversations can often go off the rails and conflicts are made worse, not solved. Whatever the scale, these kinds of conversations tend to follow familiar routes. If you dispair at the way that conversations tend to devolve into personal attacks in national politics, office politics or your day-to-day interactions, this book is a very insightful handbook. The book is the result of a big study at Harvard Business School of a large number of case studies. It spots the patterns that humans tend toward. In each case it identifies the pattern, why it happens, what the result can be (usually negative) and how to spot it coming and mitigate it. It also has snippets of conversation as case studies.…
conjecTech
There is a class at Georgia Tech I colloquially referred to as "making sure your coworkers don't hate you." It covered design patterns, software testing, and project management. I'd tack on a basic knowledge of databases to that. These are things you can gain a true functional knowledge of in a couple of weeks, and which not knowing might make senior engineers hate working with you. So to mimic the class: The Mythical Man Month Design Patterns - Even if some of the particulars are not as relevant, it still provides a useful framework for thought. Lessons Learned in Software Testing: A Context-Driven Approach I'd also add Harry Potter & The Methods of Rationality. A lot of engineers can think empirically, but its not their first reaction. Going through this book helped make it second nature for me. Can't remember if a certain data structure is immutable? Now I'll write a couple of lines of code to see rather than go looking for documentation. A lot of big problems start as false assumptions. Having the instinct to think to test them and knowing how to will prevent a lot of wasted effort, regardless of your role.…
BJanecke
* Douglas Hofstadter - Gödel, Escher, Bach: an Eternal Golden Braid * Fred Brooks - Design Of Design * Fred Brooks - The Mythical Man month * Eric J. Evans - Domain Driven Design * Design Patterns: Elements of Reusable Object-Oriented Software * Kent Beck - Extreme Programming Explained * Kent Beck - Planning Extreme Programming * Michael C. Feathers - Working Effectively with Legacy Code * Daniel Kahneman - Thinking, Fast and Slow [EDIT] Correct the author for legacy code
btilly
I'm nearing 50 so I'm hardly a youth. http://www.perlmonks.org/?node_id=133399 does a very good job of explaining why Design Patterns is a book to be careful with. By contrast Code Complete won't steer people wrong. See https://steve-yegge.blogspot.com/2006/03/execution-in-kingdo... (https://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html) for a cautionary tale about how a pursuit of OO purity can result in great verbosity, hiding intent behind a barrage of patterns. Resulting in code that I, for one, would rather not work with.

Also recommended in this reply

fusiongyro
A Mentoring Course in Smalltalk[0]. I was really surprised, after reading and really loving Design Patterns, that there was still so much to say about OO design. I did love Design Patterns a lot though. Purely Functional Data Structures by Chris Okasaki was also really useful for Haskell, as was Real World Haskell. Programming Prolog probably had a bigger influence on my Prolog than the other books, even though I read Art of Prolog and Prolog Programming in Depth first. Especially the latest edition, it's a really beautiful book. [0]: http://www.lulu.com/us/en/shop/andres-valloud/a-mentoring-co... (http://www.lulu.com/us/en/shop/andres-valloud/a-mentoring-course-on-smalltalk/paperback/product-3788890.html)
sideshowb
Are Design Patterns really so out of fashion with the youth of today that nobody here mentions Design Patterns as their answer? Because it is mine, for better or worse. It took me from understanding OO to understanding how to build large systems with OO, writing maintainable code and using proper encapsulation. A much deeper work than Code Complete (though the latter is worth reading too). I have used functional languages as well (ML, Lisp; not Haskell yet though I think I get what monads are; plus I write a lot of Python, C++, JS in functional style) but I have yet to use them for any project as big. I hope I get the chance to one day. But for now Design Patterns gets my vote.

Also recommended in this reply

garethsprice
The Art of Computer Programming by Donald Knuth is probably the closest to an actual bible for computer scientists - hardly anybody's read it all the way through, people quote bits of it out of context for their own ends and it mostly sits on shelves looking impressive while gathering dust. The Mythical Man-Month by Fred Brooks for tech management. Confessions of an Advertising Man by David Ogilvy for advertising/marketing industry. Design Patterns: Elements of Reusable Object-Oriented Software by the "Gang of Four" for OOP software engineering.
Ping_2_Ur_Pong
Below list are some of my favorite books overall that I didn't see mentioned. ---Non-software related How to win friends and influence people -Dale Carnegie (The definitive guide to helping you work better with people, truly great book, should be required reading) Blink- Malcolm Gladwell Godel Escher, Bach - (Recursion, but not from a software perspective. Its a glorious book that will change the way you think about recursion.) Hitch Hiker's guide to the galaxy, - Douglas Adams (Glorious book that is a fun read, when you need a break pick this up and laugh hard) Foundation Series - Assimov (Great stories from one of the best sci-fi writers ever) -------------------Software related Code Complete Concrete Mathematics The Art of Computer Programming The Design of the Unix Operating System Introduction to Algorithms -Cormen Design Patterns Elements of Resusable OO Design -Gang of Four