Code complete, second edition

Code complete will not change your world.

There, now that bit is over with.

Code complete by Steve McConnell is one of those books which pops up all the time in recommendations, "greatest books in software development" lists and other such places. Basically, it is a wide and shallow overview of practices in software construction. Whenever possible, it backs opinions of what is good and less good with hard data from scientific surveys, papers and experiments. McConnell states early on that one core goal in software construction is to manage complexity. The book is about giving you an overview of what is out there to help accomplish this, and to provide as much sound advice and hard facts as possible to help you sift through it.

Is it a great book? It brings up a feeling I get most often from movies and computer games. The feeling comes once you are through a highly praised experience, try to judge what you think about it and find yourself wondering if the experience actually was really great, or if most other experiences in the same genre are just kind of crappy. Code complete is as much about facts as it can, it introduces you to a wide array of topics and wants to raise the bar in software construction. It is also a hair over 850 pages. If you think that sounds like a brick someone might throw at you for some dull academic course in software development, you would not be wrong. It does feel like a textbook.

But here comes the "perhaps everything else is just kind of crappy"-part: Code complete pulls it off. I thought it felt kind of dry to begin with, but it is not. Steve McConnell is a good writer; to the point, easy to understand, funny and knowledgeable. I do not know how many people can pull off 900 pages of overview and manage to make every topic feel interesting and graspable (I suspect it is a very small subset of those who try), but McConnell does. It may feel like a computer science textbook, but I would have loved to have it over many others.

Then again, I have read it at my leisure without deadlines or tests. I bet many a book in a university literature list would be greatly improved by such circumstances.

So, it is a great book. That bit about it not changing your world? Code complete is not about silver bullets, the one magical solution to all problems. Quite the opposite: it is about telling you about tools and options, valuing them as objectively as possible and giving the author's opinion. In the end everything boils down to two words:

It depends.

Code complete gives a whole lot of recommendations, but no one checklist, tool or work flow to cure all wrongs. If you go into it expecting to be taught the secrets of mastery, to be shown the path, you will probably be disappointed (especially since a lot of things will seem very plain and obvious to you). But if you go in to get your views widened and get words put on to thoughts and practices you already know you will greatly enjoy Code complete. If you have the right mindset, you will get much from it. But what if you do not? I find myself thinking that those who would benefit most from this book would not enjoy it. Can a book like this find and nudge some new ideas into someone uninterested in good practices, or is it doomed to be more or less preaching to the choir?

I do not know, but I figure it will at least not hurt if I add one more voice to the crowd shouting about Code complete. It made me want to think more about how I build software, and if that sounds good to you it will do the same for you.