A very well-written, seminal book on software construction. It very effectively covers almost all of the important topics in software construction. This book partly also served as a revision of my software engineering classes in university. It very effectively, in fact blatantly reminds us that software engineering is all about managing complexity. However at the same time I have to be honest also in that it is not as "must have" as it is often projected. It also comes from the fact that for someone with 3-4+ years of professional experience, this book is not going to offer that much (though still recommended). With some 3.5 years working in industry, I already knew roughly some 70% of things told in this book. For example all those chapters on coding and naming conventions are not going to offer you much if you haven't already learned these things in first few years of your career. Many practices this book recommends are too good that are too obvious and many practices it condemns are too bad that make me wonder if people are really using them. Some chapters are really awesome, like "Design in Construction" and "Working Classes", some are very good such as "Managing Construction", most of them are good such as "Using Conditional" and "Unusual Control Structures", and a few are so so, e.g. "Layout and Style" , "Refactoring". Another problem with this book is that it is unnecessarily long, and verbose. It is composed of 35 chapters. In places it feels too redundant. In my opinion, the size of the book could have cut down by fixing these redundant things. e.g. why to include chapter 34, and why those Checklist sections? Also note that this book is more about coding than programming, e.g., it does not even remotely discuss data structures or algorithm analysis (Big O and stuff) etc.
Summary: Highly recommended to beginners in professional software development, moderately recommended to people with some experience, and not necessarily recommended to veterans.