Holub on Patterns


Allen Holub: Holub on Patterns: learning Design Patterns by Looking at Code ,
2004, Apress, ISBN 1-59059-388-X, 400 pages
reviewed by Conrad Weisert, August 2009


Why do some authors deliberately insult the audience they're aiming at?1 Although Mr. Holub's book is about programming, he expresses disdain for many of us in snide assertions of very doubtful validity:

"Programmers love complexity, so they have a strong tendency to overcomplicate their work."— p. 7

"Many programmers assume that the libraries they use regularly are 'right', and if that library does things in a certain way, then that library sets a standard. This disease is particularly prevalent with people who learn programming from how-to books focused on particular tasks."—p. 11

Mr. Holub's book isn't about design patterns patterns in general, but about the same specific design patterns presented in the well-known book by Gamma, Helm, Vlissides, and Johnson. The author illustrates those design patterns with Java code, which may aid the reader in understanding the original patterns.

Mr. Holub concedes at the start that he makes no attempt at neutrality:

"I have opinions and intend to express them, and I don't usually qualify my statements with apologies. If you don't like that, buy a different book."—preface, p. xiv.

Many of his opinions are quite sound. For example, he joins me in condemning the misguided common practice of providing accessor functions for almost every member data item (so-called quasi classes).

On the other hand Mr. Holub doesn't understand the difference between analysis and design. Here's a step from his recommended design process (p. 56):

"Talk to your users to figure out the problems they need to solve."

The examples are drawn entirely from GUI classes (Java containers) and container classes (Java collections), with scarcely a mention of anything from an application domain. One exception is a fleeting example which he states backwards ("an employee is a manager"—p. 57)

Chapters 3 and 4 (of 4) are lengthy presentations of a couple of "applications" which give the author a chance to use the design patterns:

The code is nicely formatted, understandable, and apparently well-structured within the constraint of Java's requirements for repetition.

The author endorses current fad methodology, including UML, use-cases, agile development, and CRC cards.

The so-called "fragile base class problem" may or may not be a flawed practice, but introducing obvious bugs to discredit it (pp. 41-47) is an unpersuasive argument, as we noted a couple of years ago.

If you're a serious practitioner of design patterns and you're having trouble understanding the Gamma et. al book, you may find some helpful guidance here. Otherwise not recommended


1—I complained several years ago about another book that did that.

Return to book reviews.
Return to table of contents.

Last modified August 21, 2009