Reviewed: May 2013
This is an interesting book, well researched and well written. Its basic thesis is that the better known design patters, such as those explored by the ‘Gang of Four’, can be decomposed into more elementary patterns, and so on, until we have a number of elemental patterns which cannot be broken down any further.
As part of this process, the author introduces a new type of diagram which he calls ‘PIN’ – Pattern Instance Notation. Since PIN is used extensively in the book to represent patterns it is essential to understand PIN fully. Unfortunately, there don’t seem to be any tools that allow you to draw the PIN symbols, so it’s difficult to learn it by using the system. This is something of a weakness in the book.
That problem aside, the book is an interesting exposition of the fundamentals of patterns. However, the patterns Smith introduces are so very basic – Create Object, Recursion, and Inheritance, for instance – that I doubt that most application programmers will find its elementary pattern catalog particularly useful on a day to day basis. However, anyone involved in designing and programming refactoring browsers or the refactoring elements of an IDE will find the contents of the book very useful.
As a tool for automatically identifying incipient patterns in existing code I haven’t seen anything that comes near it. Indeed, this was the genesis of the book – a project to automate the identification of certain patterns. Object oriented language designers may also find it useful for figuring out what they might need to build into their languages. The academic nature of the book is emphasized by substantial section on the formal logic involved using p-Calculus, on which I don’t feel qualified to comment.
Overall, I’d say that this may well be a useful book if you want to study patterns in more depth, or you are interested in automatic pattern recognition. As an ordinary programmer, though, you won’t find a great deal that's of instant use, since the patterns described are of a sufficiently low level that they are built into the language and idiom of most object orientated languages.