This is, no less, an encyclopedia of "programming practices". Everything you think of when you ponder about programming and software engineering (bar a specific programming language/environment) can be found in this 800-page book, explained in detail.

Being encyclopedic in nature, "Code complete" is very hard to read cover-to-cover quickly. So, I just put it at work and read a chapter here and there when I got the free time. It took me more than a year to complete it, and meanwhile the 2nd edition was released. Note that this review refers to the first edition.

The scope of this book is overwhelming. Everything is carefully chewed, starting with low-level stuff of how to write loops, name variables, and use white-space, and up until high-level software architecture and design, QA, system integration and even philosophic ventures into the topics of personal character and "software craftsmanship" and their relation to programming. The detail McConnell gets into is sometimes astonishing. For example, 12 pages are devoted to correct programming of if and case statements, and there are 30 pages on naming (variables, data types, etc.)

I didn't learn much new from this book. This is both surprising, encouraging and dissapointing.

It's surprising because the book is so large and vast, and contains (literally!) loads of information. It was written about 10 years ago, and it appears that since then these ideas sunk well in the software community and became common-sense. That's probably why most of what I've read sounded familiar - I usually try to keep up with software practices and professional books.

It's encouraging because I now know that I have all this information somewhere in my head. I can't be sure I always use it correctly, but that is another issue. Having the information in my head is a good prerequisite to being a better programmer, I hope.

It's dissapointing because... well, because I bought the book and spent a lot of time reading it. I think that I'm quite happy overall, since the "encouraging" part overweights the "dissapointing".

If you're an experienced programmer and have read a couple of similar books/articles, I don't think you'll gain much from this book. Maybe a couple of specific chapters here and there, but there's no need to read it cover to cover. If these topics are new to you, then the book is a must. Each serious programmer should read about these topics at least once in his lifetime, and later come back to specific details when needed. In any case, don't spend money buying it, as the draft of the 2nd edition is available online.

By the way, I think this book would be a great basis for a course (or two) in Uni. Collecting the most important points and teaching them, along with proper excercises, to students that have just completed a few basic CS/programming courses would be great. There are software engineering courses in Uni, but they focus only on the high-level issues, while this book covers the whole scope of the trade.