Design patterns: They sound like something scary academics come up with to make life harder for programming students doing complicated object-oriented stuff no one understands. But really, design patterns are simply a way of discussing common solutions to common problems, and they don't have to have anything to do with objects. By learning about and leveraging common solutions, you can make better APIs that are more consistent, easier to understand, and more flexible than would have been possible with a one-off solution.