New book in My Library - Design Patterns: Elements of Reusable Object-Oriented Software by GoF - Gang of Four

I’ve done with reading another great book about fundamentals of software engineering - Design Patterns: Elements of Reusable Object-Oriented Software by GoF - Gang of Four - Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides.

https://images-na.ssl-images-amazon.com/images/I/51szD9HC9pL._SX395_BO1,204,203,200_.jpg

Amazon says that this book is #1 Best Seller in category “Software Reuse”. Could I miss it, feeling so passionate about this topic? No way, friends, no way. I feel really happy that this book has appeared on my bookshelf and I’m hurrying to share some feedback with you.

My history with patterns goes back to 2012.

In 2012 I’ve had ~ 5 years of experience working with object-oriented paradigm and I was looking for some answers about object-oriented design that I hadn’t slept well without. The way I’ve faced the answers was a book for PHP programmers that contained classic GoF Design Patterns catalog with examples written in PHP. I, unfortunately, don’t remember the name of the book and its author, but it was rather good, and I’ve discovered object-oriented paradigm as a quite different, quite more powerful tool. I remember that one of the great epiphanies was that algorithms could be represented as objects. Strategy is still one of my favorite patterns…

So, I’ve been using object-oriented paradigm for 12 years, last 7 of them actively working with patterns? Guess, have I found anything new in this book? - Of course, and a lot.

About the book

#1 Best Seller in category “Software Reuse”?

Well, there are a lot of different opinions, but I think that this title is justified and deserved.

First, book is very well structured. Really cool thing is that each pattern is described approximately on 10 pages. It’s quite convenient cause you could split the reading to minimal blocks and do it whenever you feel comfortable. There is not need to book big time slots to stay in context during reading big chapters.

Second, each pattern is described quite extensively and laconic at the same time. Pattern description contains summary of the problem, solution, implementation issues and (what’s very important) consequences. What I also liked a lot is that pattern implementation details contain description of pattern variations - I often had a problem with some cases whether it was a bit hard to identify if particular decision could still be qualified as a classic GoF pattern or it’s something different. Good news, now I have answers.

Third, book answers fundamental questions - “What is pattern?”, “Why patterns are needed?”, “What is the difference between object-oriented analysis and object-oriented design?”, “How to use patterns right?”. First two chapters and conclusion are really doing great job on this field.

Recommendations

I would recommend to read this book to all software engineers even not because it would be beneficial for performance and career, but just because it’s kind of classic of software engineering domain.

I’ve met a lot of people saying that they “Don’t like Patterns”. Most of the times they felt hard to explain what exactly they don’t like…

I’ve also met a lot of people saying that “They already use all the Patterns (cause they are experienced programmers)”. Most of the times they felt hard to explain what exactly they are using and what are the consequences of such decisions…

I’ve also met a lot of people saying that “They’re not actual anymore (cause 25+ years past since the book was written and Python is not Java / C++ / etc)”. Most of the times they felt hard to explain what exactly is not actual and why patterns are not applicable to XYZ language…

As it was revealed during further conversations, such people just have very superficial understanding of what Design Patterns are.

Don’t be like that. Make your opinion being grounded. Understand what exactly you don’t like and why.

I’m a fan, but not a fanatic, of Design Patterns. I would recommend you to read GoF Design Patterns in original to make your own impression. Like it or hate it? Decide after, with opened eyes.