posted 25 Jan 2013 in Books and Videos
Thanks to O'Reilly Blogger Review Program I was recently able to read Code Simplicity by Max Kanat-Alexander. First of all, I have to admit I was confused by the title. I thought that the book will be about, well, coding. But it isn't - in the whole text there is almost no code at all! Instead, on a first few pages, you can read that the book is about a design. But again, if you, like me, think about UML charts or design patterns, you will be fooled again. There is nothing about that either. Then, what the book is about?
It's about good practices in software development. The author tries to create the science of software development. Has he succeeded? In my opinion - unfortunately, not.
He wrote that the ultimate goal of software is to help people. He wrote that the cost of software maintenance is much more important than the cost of its implementation. He wrote about YAGNI and the fact that a code should be as simple as possible.
That's all true. But these issues were mentioned in so many books that you probably already know them! At least, if you read any book by Robert Martin or Martin Fowler.
But let's assume for a moment, that you haven't read any. Is Code Simplicity worth buying then? I think it still isn't. Why? Because the biggest drawback of this book is that it tells what but doesn't tell how. You will read that simplicity is the most important factor of software design, but you won't get a practical example of how to achieve it. Nothing about refactoring, single responsibility principle and so on. The book says that each change introduces a possible bug, but it only gives two advices on how to build easy to change systems: DRY and don't fix it if it isn't broken. That's fine, but does mentioning it really help you to build better software? You probably already know that you shouldn't copy-paste your code...
Reading the above you could think that the book is a complete disaster. But it isn't the case. It just isn't a good book for a programmer. Well, at least for a programmer who is interested in his craftsmanship. However, I'd say this is a good book for a non-technical manager who would like to understand his engineering team better. After reading, he'll get a big picture of how software developers think and what is important for them. No details, but do they really need them?
To sum up, I, as a software engineer, am disappointed by Code Simplicity, so I wouldn't recommend it to my teammates. But I'd recommend it to my product manager to make our communication in the future easier.
O’Reilly Product Page: Code Simplicity