It's also, incidentally, a book that every software engineer using term "design patterns" should spend some time looking at -- it's the origin of the term, and it will probably make you think about whether what we call design patterns are really the same thing or solving the analogous problem.