Top critical review
Still worth a read...
Reviewed in the United States on June 14, 2014
There are a few reasons why I rated this book a 3. So let me list some pros/cons.
The book is worth a read because it contains some valuable information. Especially the chapters on the SOLID principles, the component packaging principles (analogous to the SOLID principles, but for components), and the chapter on component and class metrics that was very interesting. Those chapters are well written and I think demonstrate the principles well. Granted, you can probably find this information elsewhere. Probably why I rated the book a 3 instead of a 4.
In addition, the refactoring chapter was pretty good, too. And there were several chapters that covered the basic, most common design patterns that most programmers should know if they already don't.
The book was written in 2007, and so is dated. For example, there is no use of generics anywhere in the sample code. IIRC, generics came out just after this book was published. Therefore, some of the examples given don't translate quite as well to the features now available in C#. Secondly, you can tell the examples are translated from Java. The original Clean Code book written by Robert C Martin is in Java--as that is a language the he programs in often. His son, who helped write this book, does program in C# (and probably Java)--but you can tell the examples still have Java programming idioms in them. (Full disclosure, I'm not a huge Java fan--that's my personal preference.) More importantly, however, is that Java has it's own coding conventions adopted by those who program in it, e.g. getSomething, setSomething (since Java doesn't have syntactic sugar for getters/setters), no 'I' in interfaces, it's just a List, not an IList--unlike C#. But the authors routinely ignore C# coding conventions in their examples, such as using camel case for methods and preferring getXXXX/setXXXX over .NET properties, and not prefixing interfaces with 'I'. For the record, I agree with the authors that prefixing interfaces with 'I' should not be necessary, nonetheless, it's a .NET coding convention.
What I'd really like to see is the author update this book, including all the examples. Show us how you would write SOLID code using .NET generics; the role that lambdas play when writing SOLID code; and use .NET coding conventions throughout.
Other than that, as I said at the beginning, the book still has a lot of good information in it that makes it worthwhile to pick up and read.