Whenever I teach a debugging
class, the first thing I talk about is one of the most important points I make though the entire class: read Steve McConnell’s masterpiece, Code Complete 2nd Edition. I ask for an honest show of hands as to who hasn’t read Code Complete, and it always amazes me how many developers haven’t. It’s the best book on software ever written and if you haven’t read Code Complete, you’re not doing your job! The focus is all about the part of development where you’re sticking all the bugs in the code, the construction phase.

When I see that sea of hands go up from the people who haven’t read it, I tell everyone that at 9:00 AM the morning after the class they have an assignment: “I don’t care what your boss has scheduled for you, I have a much higher priority task: read Code Complete. To ensure you read it, you all owe me a book report. You know, like those ones you did in high school. Don’t try to skip out on doing the book report because I have your email address and will be checking up on you!” I try to say that as serious as I can. However, I can’t help but laugh and tell the class that if someone actually sent me a book report I would probably have a heart attack in amazement.

Guess what? I had a heart attack today! John Gorski, an SDET (Software Design Engineer in Test) on the Microsoft System Center Configuration Manager team, took one of the internal Microsoft versions of my class and sent me a book report! John was kind enough to allow me post it here. John obviously earned an A+:

Code Complete, 2nd Edition by Steve McConnell is my fourth favorite book of all time. Considering the books that beat it out were The Once and Future King, Surely You’re Joking, Mr. Feynman! and The Complete Calvin and Hobbes, this is quite the honor for a software engineering book.

 Code Complete is first a reminder of everything you may have forgotten as a programmer, especially when first coming upon the field of software testing. In first studying software testing, the inherent complexity of software and the sheer number of possible test cases is overwhelming. The idea that a human being could possibly create such a complicated system that works becomes a laughable premise. Code Complete not only reminds the reader that this is possible, but reminds him of exactly how to go about doing it.

 Code Complete presented to me, for the first time, the idea that high-quality software is cheaper to develop, debug and maintain than low-quality software. Imagine that–a product that is cheaper to produce when it’s of higher quality! The only other place in life where this seems to be true is the case of in-season produce. The book’s frequent allusions to the Pareto Principle bolster the idea that a good programmer is, quite literally, worth his weight in gold (despite the quantity of good programmers that are hardly of a slender build).

 Throughout the book, McConnell is relentlessly practical, even down to seemingly aesthetics-only issues like how to format code or the question of when to comment. Not one of the 850+ pages is without some insight on how to improve your own coding practices. Chances are, even if you’re already following the guidelines themselves, McConnell makes the case for these practices with more clarity and more measured reason than all but the most both battle-hardened and well-read coders in his audience.

 Code Complete embraces and eloquently evangelizes the sentiment that programming  is
essentially a human task, the most powerful tool for which is the mind. Once we internalize this insight, nothing strikes us as more natural than that a good programmer must look into at least a little psychology and set high standards that must be enforced by his self-discipline alone. Since the primary activity of programming is transferring knowledge amongst human beings and from person to machine, razor-sharp communication skills (non-verbal as well as verbal) are just as critical.


p style=”margin-left:36pt”> It’s baffling that Code Complete isn’t required reading for every aspiring computer scientist and software engineer in the country. No other book is so beneficial to the student’s technical future while being so digestible in the course of a lazy summer that may be otherwise full to the brim with the debauchery of youth (tempered by the student’s discovery of the tangible value of self-discipline and integrity).

For those of you perusing this blog entry who haven’t read Code Complete, you too owe me a book report. I’m not kidding! Post your book review on your blog or in the comments. I also have a challenge for any managers reading this: how about we require reading Code Complete as part of the yearly goals for everyone who hasn’t read it?