This is a very good book by the famous GOF. I feel that this volume is a must have for the experienced application programmer.
On the way to become a more matured programmer, one begins to realize the relationship between machine and man. For system programming, the code should tip towards machine, that is, the ultimate goal is to make the program be as efficient as it can be. On the application programming side, it should be the other way around, and the code should be as readable as possible even when this means that the code would not be running at the most efficient way possible. Machine time is sacrificed for human developing/maintaining time.
After understanding the relation between close to machine and close to man, one then realizes that the programming concepts including OO, Design Patterns and the like are here to serve the purpose of helping human understand the code and not to help the machine. And only when the complexity introduced by using these concepts are much less than the complexity they reduce should people decide to use them. You must know your goals and what you are doing. Applying Design Patterns for the sake of applying Design Patterns do not necessarily add any benefits, and it could potentially do more damage than good.
I realize that this book is like a grammar book in any language in the sense that you do not study grammar books to learn the language itself. Instead, the best time to study the grammar is when you already know how to speak, listen, read and write at a pretty high level. It will, at this point, when you study grammar, greatly enhance your power and control over the language.
This is a very good book to have on the bookshelf and to open and read from time to time. In fact, it has now become so sort after that it is now at #4 on the bestseller list this week.
See the list here >>
2017: The Year of Golang
5 months ago