OMG! Someone Did a Book Report!

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?

John Robbins

View Comments

  • My team of 25-30 software developers hears about that book all the time.
    I've purchased several copies to lend out to the team. I mention the book at meetings about once every three months. A few times per year, the book comes with me - a quote or two and how it applies to something we just delt with, and a reminder to read the book.
    I can't make everybody read it, but I can try.
    I also like the recommend re-reading every 2-3 years. Give that a try if you have not already done so!

  • Bill,
    Excellent! I also endorse the re-reading. I found that re-reading it once a year keeps me from falling into all sorts of bad habits.
    -John Robbins

  • Triple Amen to that!
    Our team bought one for every single developer on our product last summer. That and c++ coding standards by Sutter and Andrescu. However CodeComplete is awesome!
    I read it often, and keep it in a prominant place on my desk.
    I seriously would consider professionalizing computer programming, and the big requirement would be that programmers read this book.
    If I owned a software company, I would not hire anyone who hasn't read this book.
    If I owned a software company and I had a programmer who hadn't read this book, I would FIRE them, plain and simple.
    I read this book as a junior person in our department, and soon bypassed senior folks in my knowledge. I owe a lot of it to this book.

  • Back in April, inspired by John Robbins' blogpost about it, I promised I'd read Code Complete and review it here. I finished it last night (I confess I've read one or two other novels in between), but I can't believe it's taken me almost three months. Lest you think I'm some kind of slow reader, I will add at this point that there were also nights when I didn't read at all!
    As soon as I finished it I felt like I should pick it up again and start from scratch - it's easy to see why people read it once a year. It's also easy to see why those who have read it suggest that everyone else should read it too - it's chock full (and I mean it's absolutely full at 862 pages plus bibliography and index) of tips, suggestions and methods to enable you to be a better developer.
    I loved the checklist at the end of each section that you can apply to your development processes - these are also available (registration required) on the book's website though it's a slight disappointment that they aren't available as a Word or PDF download.
    The message of the book is that creating high-quality software doesn't have to cost more and/or take longer than creating low-quality software, and it then lays out tools to help you do that.
    It's nice to come across recommendation for things like coding styles and think 'I'm doing that already'. It's also good that the coding examples in the book are done in a variety of languages - I was fully expecting all the samples to be in C and therefore impenetrable to me, however they are done in a mix of C, Java and VB.
    What didn't I like? McConnell talks in several places about programming into a language rather than programming in a language, and if I'm honest I'm not qure I entirely got what he means with this. And I found it a bit dry in places, but then I'd expect a book on software engineering written by Matthew Reilly (whose books are faster paced than anything else I've ever read) to be at least a little dry.
    And I can already report some success traceable directly to Code Complete; I've tried laying out some code in a class using pseudocode that then forms the comments in the body of the code. And it is definitely a useful technique as I found it did make me think about the structure of the code before writing the code itself. So something to take forward there...
    What's next for me? I may read it again in a few months - I suspect it's going to go round all our team first as I have two takers lined up already. In the interim, I have Professional ASP.NET MVC to read. I guess I should also read Writing Secure Code as I haven't read that either!

  • Phil,
    You have so totally made my day!
    - John Robbins
    PS: Where's the book reports from the rest of you!?

  • I spent a few weeks for the first reading, and repeated a few times in toilet picking some topics important but easy to forget / ignore.

Recent Posts

8-Step AWS to Microsoft Azure Migration Strategy

Microsoft Azure and Amazon Web Services (AWS) are two of the most popular cloud platforms.…

6 days ago

How to Navigate Azure Governance

 Cloud management is difficult to do manually, especially if you work with multiple cloud…

2 weeks ago

Why Azure’s Scalability is Your Key to Business Growth & Efficiency

Azure’s scalable infrastructure is often cited as one of the primary reasons why it's the…

4 weeks ago

Unlocking the Power of AI in your Software Development Life Cycle (SDLC)

https://www.youtube.com/watch?v=wDzCN0d8SeA Watch our "Unlocking the Power of AI in your Software Development Life Cycle (SDLC)"…

1 month ago

The Role of FinOps in Accelerating Business Innovation

FinOps is a strategic approach to managing cloud costs. It combines financial management best practices…

2 months ago

Azure Kubernetes Security Best Practices

Using Kubernetes with Azure combines the power of Kubernetes container orchestration and the cloud capabilities…

2 months ago