Agile Software Development, Principles, Patterns and Practices is a book that belongs on every software engineers bookshelf. It’s a book filled with the right balance of the pragmatic and theoretical.
Don’t let the title put you off. Though agile principles are dealt with there is a wealth of content concerned with the practical application of design patterns. Each design pattern is placed in an overall design context and the forces shaping it are clearly presented (unlike many of my own ideas). The pattern is then explained and it’s use demonstrated through code. The examples are numerous and, with one or two exceptions, well written. What I like most about the pattern coverage was the pragmatic context in which each pattern was placed. Unlike many other books that are presented in a “This is the way it’s done and I’m right ’cause I wrote this book and you’re an idiot if you don’t do it my way.” This book provides clear presentation of the forces that effect the pattern as well as the theory behind it and practical advice on it’s usage.
I can’t say I took a lot from the agile sections of the book, I’ve been using light weight processes for a long time now, and I’m fortunate (?) enough to be working with a guy who’s soapbox is TFD (I still don’t quiet grok it, though I love TDD). It did serve to re-enforce things I either already knew and had chosen to ignore or already knew and used.
If you don’t want to fork out the cash go find one of those bookstores with a cafe, grab a coffee (or your beverage of choice) and read the chapter on package design. You’ll be better for it and, like me, you might just buy the book.