Overall the books is nice and extremely easy to read.
The main problems, at the current state of Java, it is possible to apply some of the principals but not all at once. Therefore, some of the suggestions become unpractical. Another problem that comes from the library vendors it is not always possible, especially in the production code ignore null paradigm and static objects. Also, when enterprise code is huge and becomes legacy code create each time new object may be costly and fail safe approach may not be avoidable. I am not saying that the all above is good and should be as it is BUT my main concern you cannot apply all these principals at once and even if you do, you would be in much bigger troubles as before because you automatically becomes the opposition of all existing practices in the industry for years. Also, as mentioned by some of the reviewers. Examples are not apply principles from the previous chapters, so when Yegor takes code, it always bad and never tuned with suggestions from previous chapters. It creates certain feeling of contradiction, it is not always bad, it is just how it is.
Concrete points I disagree with:
- Lazy evaluation using ctors is always good (I imagine many scenarios when without applying other principles from the book, this paradigm will put the knife into the develops back)
- Chain exceptions but not log them (Logging is a very powerful technique and with large application you cannot recover on few points, sometimes you need notify customers, business that something went wrong and also do retrospective when failure was missed or was of less priority)
- Functional programming is a bad design and not wise ides to use among OOP code (I will not any arguments to this, it is up to each individual to decide either use FP or not. My opinion it creates immutable objects that is good and comes along with ideas from the book and it reduces amount of boilerplate code has to be written, sometimes remove need of utilities)
Point I like:
- The style of book is awesome, I really like it
- It is both easy to read and understand
- If I disagree with some points, this book is still triggers some points into my head to ponder deeper about some concepts, approaches, etc.
- There are many more my stars just say after me
I recommend this book people who just started learning OOP or mostly for those who are professionals and disagree, dissatisfied with the state of the industry and what to revisit some of the old concepts and look on them from different angle.