Steve Yegge's review of Design Patterns: Elements of Reusable Object-Oriented Software