Reading through this blog, I was just reminded that Code Complete 2* was released. Since this book is the first entry on my prioritized list of Recommended Reading for Developers, and Steve is the patron saint of this web site, you better believe I just placed an order for it! Also, if you don't own the first five books on that reading list, shame on you, and get your ass over to Amazon immediately. If I was rich enough to buy a copy of those books for every developer on earth, I would.
TNC: How does your book fit in the history of books about software development methodology?
SM: Well, I think “Code Complete” was the first attempt that anyone had ever made to try to capture nearly all of what was known or what had been published about effective software construction practices. And so I think in that sense it was really something new that no one had tried to do before. There were some other books out at the time that had captured some small pieces of software construction. For example, Kernighan and Plauger’s “Elements of Programming Style” had been out for more than ten years. But it captured only a very small part of what made for effective software construction.
I have a running joke that every sequel should always be subtitled The Revenge for dramatic effect, hollywood style. You know, like Bridges of Madison County 2: The Revenge
Revenge of the Nerds II: Nerds in Paradise: The Revenge. hmm, doesn’t seem quite right…
My first coding hero was also Michael Abrash and PSi of future crew. Then all the others that you’ve mentioned and I would have to add at least Whil Hentzen for his Software Developer’s Guide.
I’m buying the first two books, it better be good Jeff or else! xD
Right now I just do freelance user interface design and web development, but I want to be an in-house developer later so I’m sure it’ll be a nice read.
NVM, more like 3 or 4 books actually. I do have Don’t make me think already, however.
.. and in the resulting conversation he added some more interesting historical background, and gave me permission to post it here. This is direct from Steve himself!
On Farming vs. Construction metaphors in CC2, a direct reference to this post:
I don’t really disagree with any of what you said, except that I think you took my incredibly brief discussion of the farming metaphor too seriously I included that one primarily as comic relief.
My dad’s degree was in animal husbandry, so I talked to him about what would be the most appropriate “farming” crop to rotate. One of my favorite memories of my dad (who died in 1994) was him suggesting that vetch would be a good crop. He was quite amused with himself, and I thought that was hilarious, but didn’t think anyone would know what vetch was
OTOH, I like the way you developed the metaphor for web programming. Metaphors aren’t right or wrong – they’re more or less useful. I don’t see a lot of difference between metaphors and models. As George Box said, “All models are wrong; some are useful.” The same applies to metaphors. I think you developed the metaphor in a useful way that was applicable to the modern programming of that time.
I had carried forward that section of the book from 1993 when web programming didn’t exist and didn’t modify it in the 2004 edition, so I think you saw a way it had become applicable by 2008 that I hadn’t considered when I updated the book in 2004.
As far as the construction metaphor goes, I think many software people don’t appreciate how much buildings change over time. They often change a lot . Check out Stewart Brand’s book How Buildings Learn. I still defend the construction metaphor as a good one both for initial construction and for ongoing evolution. That said, I agree with your point about web software that buildings don’t tend to grow from a tiny kernel incrementally; there’s usually, initially, a more defined “done” point with buildings, so the construction metaphor applies more to types of software development that have an initial defined endpoint (embedded systems, safety critical systems, etc.) than to web or mobile development. Which is another way of saying the construction metaphor applies to a smaller percentage of software development than in did when CC1 came out in 1993 or CC2 came out in 2004.
[the editing of Code Complete] took about 500 hours of my time, which would have been much better spent in other ways. Believe it or not, Microsoft Press agreed to publish CC because they thought it would be good for their catalog to have a well-researched book, but they didn’t think it would sell very well, so they engaged in vigorous content reduction during the editing process to reduce the length and save costs. A lot of the edits were inane. For example, I had a paragraph where I described putting in a “glue layer”. The editor changed the wording to say, “put in a layer of glue.” The editing process made the book better in the end, but mostly because all their terrible edits forced me to come up with better edits.
Wait, why didn’t they think Code Complete would sell?? And who specifically? I need to know this history!
One factor was that no one really understood what I was trying to do with Code Complete. I’d explain the concept to people, and they’d respond, “But we already have Kernighan and Plauger’s Elements of Programming Style.” Nobody could see how it would be different from the books that were already published. I had a reviewer who reviewed my outline and proposal before I submitted the proposal to Microsoft. He reviewed every draft chapter as I wrote them over the course of about a year. When the book finally came out and he got his copy, he called me and said, “This is incredible. I had no idea what you were doing. I reviewed your entire manuscript but didn’t really get it until I had the whole book in my hands.”
Another factor was that Microsoft Press was all about product-linked books in the early 1990s. Their rule of thumb was that something like 75% of a book’s sales occurred within the first 3 months of the associated product release. E.g., “Step by Step Excel” would launch in conjunction with an Excel release.
Microsoft took a chance with Code Complete 1 and Steve Maguire’s Writing Solid Code. They were surprised when those books sold well, and so they expanded their offerings within what they later branded as their “best practice series.”
I was the beneficiary of the product-link strategy for CC2. We’d been talking about doing a 2nd edition beginning about 7 years after CC1 came out. At the beginning of 2003, MS Press came to me and said, “Microsoft has a hole in its product launch schedule in summer 2004. We’re not going to launch any product-related books in that timeframe. If you can commit to getting CC2 to us by Jan 1 2004, we’ll put our entire quarterly marketing budget behind your book (about $200K).” This is in an industry where a typical marketing budget for a tech book is $0, and publishers never put more than $5K or $10K behind any book. That offer was too good to pass up, so I agreed to do CC2. The schedule was critical, and I willingly signed a contract with a $1000/day penalty for late delivery of the manuscript. No regrets!
This whole situation reminds me of how far ahead another Steve was..
I mention it because I was doing some digital gardening on that post today, and it is relevant. Sometimes your work is breaking new ground.
(There are a few people in the comments who adamantly maintain that Steve Martin is not funny. I deleted those comments, because they didn’t add anything to the discussion. )
Also may I quote parts of these emails, with attribution, in the blog comments for relevant Code Complete 2 blog posts?
Feel free to quote the parts you want to [with one very minor exception].
Have you watched the Steve Martin 2-part documentary on Apple TV? Part 1 was fascinating. I was a teenager during his meteoric rise, and his sense of humor was a big part of my childhood.