A must read for modern software developers. This book does a good job of compiling almost all the relevant coding practices in a concise 400+ pages. I definitely learned a lot, even though I consider myself a knowledgeable, continuous learner of programming practices.
For example, throughout the book, Uncle Bob emphasizes tiny methods that are less than five lines. Previously, I would have said that as long as you can fit it on one page, its good enough, but from his examples using concise methods, it really helps make the code more readable and cleaner. Some of his recommendations are debateable, such as limiting the use of the final keyword, but still valuable to consider.
I take a star off because I felt that a few chapters were too short, rushed, and incomplete. The 16-page Systems chapter was all over the place, talking briefly about aspect oriented programming and then mentioning the purpose of specific technologies such as EJB, Spring, Java proxies, and AspectJ.
Other chapters explained examples of lengthy sections of code stored all the way in the appendix section. This made it hard to navigate and see what was going on in each step of the example.