Design Patterns — Elements of Reusable Object-Oriented Software

By Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

Gosh! It’s almost ten years old, this book! Ten years. It’s a long time in programming. When this book was published I had just started using Linux full-time, having made its first acquintance in 1993 or 1992, I don’t remember exactly. At that time, I only knew Basic, Pascal, Snobol and SGML; in 1994 I started learning SQL, PL/SQL and C. And since then I’ve picked up Java, Python, C++ and Visual Basic. And a smattering of Bash.

  • Author: Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
  • Title: Design Patterns — Elements of Reusable Object-Oriented Software
  • Pages: 395
  • Published: 1994
  • Publisher: Addison Wesley
  • ISBN: 0-201-63361-2

Of course, in 1994 I was trying to retrain as a software engineer, because it was clear there wasn’t much money in comparative linguistics of the Sino-Tibetan languages. And our first daughter had just arrived, and numbers two and three were close at hand. I didn’t learn about this book until 1998, when I was starting work with Tauw as a Visual Basic programmer (to leave in 2000 for Tryllian, where I started with Java).

At Tauw, I was dismayed at the lack of even the most basic knowledge about programming my colleagues showed. People my age who with dry eyes could proclaim that all this new-fangled object-oriented stuff was just a fad that would fade away soon. So I set out to fill the programmer’s library with good, solid stuff. And this was one of the first books I made Tauw order.

Because it’s great, and seminal, and makes communication about the larger aspects of a program easier. It’s not perhaps really relevant to Python (or Visual Basic) — many of the patterns are roundabout hacks to get past some misfeature in Java or C++; but being able to speak about ‘factory’ and know that your colleague knows what you mean, being able to hack up an application in large pieces and say that this is a ‘facade’, and that there’s a composite hidden in there makes it possible to quickly ‘get into’ an application you haven’t written yourself.

And now I’ve dug it out because I started hacking on Krita, and Krita had been recently (2002) refactored to make all use of design patterns overt. Very useful; I am managing to learn both C++ and the Krita code at the same time, and after a week or so I was already contributing code. Now there’s the proof of the importance of this book: it makes programmers more productive.

It is also available on CD-Rom. Geared towards old-fashioned browsers, it is true, but still very useful. Carry it with me on my laptop when I take the train to Amsterdam.