A couple days ago I was involved in a conversation regarding the use of references (i.e., books, Internet, magazines, etc) when looking for approaches to solve technical issues that architects, designers, and developers may face on their day to day operations. It seems like some people have the idea that using a reference to refresh a known concept that, due to lack of use, needs some dusting, indicates lack of ability and knowledge. It all depends on how references are used and what is the individual looking for.
The quote “Never memorize something that you can look up” (quote by Albert Einstein) tends to apply to the discussion. As usual with most concepts, it has a positive and a negative side. On the negative side many engineers turn on to the Internet to look for the exact or similar solution to the task / problem on hand. If the individual does not have full understanding of the problem and the solution, it is almost sure that grater problems will appear down the line. On the positive side, if an engineer does not recall the name of a principle used in C++, or the names of some Creational Patterns (e.g., Abstract Factory, Builders, Factory Method, etc) in Object Oriented Design (OOD), or needs to determine which pattern is best for the problem at hand, a consultation and further reading is necessary. If I am designing a system, I would not like engineers to just come with ideas without proving them applicable to the task at hand. Ideas are great after they are validated. Of course, like any other concepts there are limits. Tell this to the people that created Uber.
I always fall on the side of consulting before embarking on a solution. My steps are: research, architect, design, test, implement, and repeat. For improvement, I tend to read and experiment with concepts and technologies. I never know when something I have learned may come up. Most people (never say all) that have attended higher level education understand the fact that all the algorithms and data structures learned in class not be used on a daily base, will need some refreshing when the time to select and use them arrives.
As an example, I have taken several data structure and algorithm classes. I have also read several books on the subject. I am currently reading “Algorithms” third edition by Thomas Cormen, Charles Leiserson, Ronald Rivest and Clifford Stein. Lately I have encountered several articles and source code from the book “Algorithms” 4th edition by Robert Sedgewick and Kevin Wayne. This book is currently on my Amazon wish list. The authors claim their book covers at least “50 algorithms that every programmer should know”. I will get the book in a few months and will make sure I refresh, experiment and if needed learn ones that I have missed.
Several years ago I implemented a library of data structures that have and are currently being used in several commercial products. That does not mean I will skip chapters that deal with the different structures I believe I am fluent (do not like the connotation of the word expert). Enough said; let’s get to the topic of providing my opinions on a book I just finished reading and experimenting yesterday evening. The book is “Design Patterns” by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides. By the way, just like many other books I have read, will keep it for future reference next to my set of “The Art of Computer Programming” by Donald Knuth (When I was typing this blog I could not remember professor Knuth’s first name. I had to look it up on the Internet :o)
The book is easy to read but one must spend time experimenting with examples to fully get the concepts. The book has different examples that are used in different chapters. I tried downloading the source code. Most of the references are very old and have not been maintained. Some are no longer available. I fully understand that if the authors are not in academia, and are constantly adding and refining examples, they tend to become stale. It is a shame because I wanted to take a look at some working code associated with several design patterns used in the main example which implements a simple but well thought out document editor named Lexi.
A second item that you should consider is the publication date for the book. 1999 is somewhat a long time for computers. That said, the concepts there covered are very current in today’s world (2016 – 1999 ~ 25 years later).
Today, many developers like to learn from a video. If you are interested in OOD design patterns there is a set of YouTube videos by Derek Banas. They include very well documented examples written in Java. I consider the presentations very well done and quite educational. More important, they are free. Derek has his own web site at the following URL: http://www.newthinktank.com/
In conclusion, the “Design Patterns” book is good but somewhat outdated. There are more recent and easy to follow resources if you wish to polish your OOD design patterns for personal improvement or like I always do, before starting a new project.
If you have comments or questions please feel free to drop me a line.