Fog Creek Software
Discussion Board




Books on Sodftware Development

I am thinking about buying the following book from Amazon:

Code Complete: A Practical Handbook of Software Construction
by Steve C McConnell

A couple of the reviews said that the book is outdated - it was published in 1993.

Is this valid? I have neard very good things about books from Steve McConnell - he has quite a few listed on Amazon. But it is difficult deciding which to get - they do seem to overlap.

Ram Dass
Wednesday, September 17, 2003

As long as you read the book and evaluate the advice inside it in the context of your work, the book is a gem.  In other words, read what the books says and then think about whether it makes sense in your environment - don't just take it all as gospel.

book critic
Wednesday, September 17, 2003

"Code Complete" includes a significant number of specific code samples (I believe mostly in C++...coincidentally I was browsing through this book at the Chapters bookstore last night), and this is the reason why it's a bit dated nowadays, or less appropropriate for differing environments.

A much less code-specific book is "Rapid Development", also by "Steve McConnell"...it deals more with general problems in software development teams such as underestimating up-front design costs, team issues, requirements gathering, etc. It is a timeless classic that is highly recommended.

Dennis Forbes
Wednesday, September 17, 2003

Buy it. Read it. Use it. You'll never regret it.

Rob Warner
Wednesday, September 17, 2003

I'm reading Code Complete now. If you're using C/C++ it is certainly worth it, in spite of age.

Pretty soon I'm even going to hook to to that Internet thing. :)

sgf
Wednesday, September 17, 2003

Yes get it. Every coder should read this book.

McConnell deliberately uses several different languages in his code examples, because of the fact that good coding standards has nothing to do with the language you are using.

The Mythical Man-Month is from 1975 and still very valid too. Good books don't age.

jan Derk
Wednesday, September 17, 2003

If you write code, read it.  You won't regret it. 

Code Complete focuses on code at a granular level.  It does get into some broader issue such as programmer personality and different approaches to the development cycle but it's mainly oriented towards code at the statement level.  His other books are focused more on project management (and are also worth it if you're interested in that). 

I think people say it's "outdated" because they feel the need to criticize and will grab at straws to do so.  It contains examples in a variety of languages, some of which might not be in common use today (Fortran for example), but your missing the point of the book if that matters. 

By the way, Joel lists it in his book section:
http://www.joelonsoftware.com/navLinks/fog0000000262.html

SomeBody
Wednesday, September 17, 2003

"McConnell deliberately uses several different languages in his code examples, because of the fact that good coding standards has nothing to do with the language you are using."

There are only a few best practices that are universal among all languages (be they linear, procedural, object oriented, aspect oriented, etc), and they could realistically be summed up in about 3 pages.

"The Mythical Man-Month is from 1975 and still very valid too. Good books don't age."

The Mythical Man-Month has virtually nothing whatsoever to do with specific applied technology, and hence it is largely ageless. If, on the other hand, it was the "Mythical Smalltalk Programmer's Man Month", discussing the scaling problems of Smalltalk programs, then the story might be a tad different.

Dennis Forbes
Wednesday, September 17, 2003

"""There are only a few best practices that are universal among all languages (be they linear, procedural, object oriented, aspect oriented, etc), and they could realistically be summed up in about 3 pages."""

Sounds like you haven't read Code Complete, then.  :)  IIRC, it has 30+ chapters, and quite a lot of them contain no code at all.  Some have code only to illustrate a concept, and I believe only one or two are specifically about writing actual code, as opposed to design and construction principles.

Every professional programmer should know the things that are in Code Complete; it summarizes literally decades of research on what works in programming and what doesn't.

Many of the more important matters in Code Complete are also covered in The Pragmatic Programmer, but Code Complete covers them in more detail.  You could look at The Pragmatic Programmer as an update/supplement to Code Complete, reviewing its high points and then adding some relatively "newfangled" subjects.

Phillip J. Eby
Wednesday, September 17, 2003

"I think people say it's "outdated" because they feel the need to criticize and will grab at straws to do so."

Interesting perception. Perhaps instead they say that it's a bit dated because they think it is, and your defensive posturing is purely because it's a sacred cow in your eyes and you're grasping at straws to defend it? I think this is similar to people claiming that "Who Moved My Cheese?" is a great book...

My development in reflective C# is quite a bit different than my Object Pascal development which was very different from my templated C++ development which was quite different from my C development, which was different from my Basic development which was different from my QuickBasic programming which was different than my...

Even "best practices" are dramatically different than what is considered best practices in modern tools (hungarian notation anyone?).

Code Complete has a lot of great content, but you can find that same content expanded out in Rapid Development, without all of the crusty code techniques. Of course I say all of this realizing that most people buy books like "Code Complete", or "The Mythical Man Month" (great book, btw) just to stock their shelf at work to portray the visage of being versed in the black-arts of software development. If that's the purpose, then go ahead and get yourself a copy. Pick up a copy of "Who Moved My Cheese?" while you're at it.

Dennis Forbes
Wednesday, September 17, 2003

"Sounds like you haven't read Code Complete, then"

I read it about 7 years ago, but it was an employer's copy so I returned it. Humorously last night I was considering buying a copy (to line the shelf...) but after a refresh decided that I'd rather grab a copy of Rapid Development. Unfortunately it was out of stock.

Dennis Forbes
Wednesday, September 17, 2003

Hm.  Well, I bought my copy of Code Complete back in the early nineties, pretty much right when it came out, so I don't have library building as an excuse.  At the time, I was shipping product in compiled QuickBasic, which was not one of the languages covered.  But the book still had a huge impact on my way of thinking about (and doing) programming.

Meanwhile, Rapid Development didn't come out for another few years, and to be honest, I didn't care for it as much as I did Code Complete.  It used to be that every year or two I'd reread Code Complete to see if it still had anything else I could use to advance my craft.  I never did that with Rapid Development.

Phillip J. Eby
Wednesday, September 17, 2003

I don't think it's a black book of computing because it reads as fast as Harry Potter.  In fact, all those ex-Microsoft programmers write very similarly.  I just received Whitehorn's _Inside Relational Databases_, and it reads like McConnell and Joel.  Similar sense of irony.  Pragmatic without losing theory.

Code Complete ages well because it talks about fundamentals others ignore, like whitespace.  Python programmers would definitely benefit, so can lispers if they're not too stuffy.  For example, even extremely good lispers use "l" as a variable name.  I don't know what fonts you'll use to read this, but it's usually near-identical to "1".  "lst" is almost as bad, since "1st" is a perfectly good name in every lisp I know.

The bibliography (iirc) was very good, and you'll be able to learn the old dinosaurs of engineering like the Waterfall and Spiral methods; lingo everyone needs to know to sound authoritative in an argument.

I have Rapid Development too, but if I had to choose one, definitely Code Complete.  Of course, you should tell us more about yourself for better advice.

Tayssir John Gabbour
Wednesday, September 17, 2003

I think my grabbing-at-straws theory is proved quite nicely by statements such as "There are only a few best practices that are universal among all languages ... and they could realistically be summed up in about 3 pages."  Do you really believe that?

SomeBody
Wednesday, September 17, 2003

"For example, even extremely good lispers use "l" as a variable name.  I don't know what fonts you'll use to read this, but it's usually near-identical to "1".  "lst" is almost as bad, since "1st" is a perfectly good name in every lisp I know."

I don't see how that's a bad thing in Lisp.  Yes, it would be a bad variable name in nearly any other language.  But, in the context of Lisp, I think "l" or "lst" is a reasonable choice of variable name because it clearly identifies the datum as a list and lists are the very core of Lisp programming.  Similarly, you'll often see "a" as a function argument in Lisp to represent that the datum is an atom.  These would be lousy variable names in any other language and they'd be bad choices in Lisp for a global variable, but I don't see anything wrong with using them as arguments for a general function that does some operation on a list and/or an atom in Lisp.  This is really no different than mathematicians using x and y to represent the independent and dependent variables in a relation.  It's an agreed-upon convention within the community.

Matt Latourette
Wednesday, September 17, 2003

"There are only a few best practices that are universal among all languages ... and they could realistically be summed up in about 3 pages"

Practices that require specific code samples: Absolutely. Of course the need to test, and the basics of good time planning don't need code samples, now do they?

Dennis Forbes
Wednesday, September 17, 2003

The Pragmatic Programmer is a must.

foo
Thursday, September 18, 2003

Just so people don't get confused, it's probably worth emphasizing that Code Complete and Rapid Development address very different topics.

Code Complete is primarily focused on the actual act of writing code.

Rapid Development is primarly focued on project management.

Both books are great, though-provoking reads for anyone involved with software development. I would add The Mythical Man Month and Peopleware to that list as well.

Mike Treit
Thursday, September 18, 2003

I loved Code Complete back when it first came out. Read straight through it.
While its been a while, a lott of the coding stuff might be a bit outdated, unless you are stuck into a yesteryear development environment. In my memory it was mostly focussed on simple C stuff.

However, Code Complete is in the first place a feel good book for developers. It is a "developer as the sole voice of reason in the center of a clueless univers" story. That is the main reason why this crowd loves it, and that is the reason why it has lasted long past its technical "Best before" date.

Just me (Sir to you)
Thursday, September 18, 2003

  I might be missing something here...

  Don't the "modern" languages have variables ?  Don't them have routines ?  Conditional statements ?  Loops ? User-defined data types ? Comments ? 

  If they don't, them yes, Code Complete IS out-dated.

Ricardo Antunes da Costa
Thursday, September 18, 2003

Uh...ok.  I suppose if someone is absolutely green and excited about working "with computers", then the code sections can be valuable. I suppose if one is new to English, or brushing up, then the sentence composition can be a great, highly relevant learning tool as well. The page numbers can be great assistance in learning to count.

Dennis Forbes
Thursday, September 18, 2003

Wow.  I hated this book.  My memory of this book is that was full of wonderful insights like:  "Do daily builds to ensure you build daily."  I vote for "Writing Solid Code."

fancy
Thursday, September 18, 2003

"Writing Solid Code"?

Would that be, by any chance, "Writing Solid Code: Microsofts Techniques for Developing Bug-Free C Programs"?

What, pray tell, would Micro$soft know about writing solid code? What? What's that, you say? You don't actually *use* any Microsoft products? Alrighty then, that explains a lot. :-P

Cynical Coder
Thursday, September 18, 2003

Pragmatic Programmer is also EXCELLENT.

It focuses even more narrowly on CODING.

Code Complete and Rapid App Development (by McConnell) are both great as well.

Entrepreneur
Thursday, September 18, 2003

Using l/lst is actually controversial in lisp.  People know about it and usually deal with it, but it.s one of those things trotted out early in discussions about punning the function and var namespaces.

It.s not a big deal, but clearly some of our letters were not meant to stand alone as notation.  O as well.  This is why Greek characters are often used, even when it.s Greek to most of us...

Tayssir John Gabbour
Thursday, September 18, 2003

Association of C & C++ Users book review section: http://www.accu.org/bookreviews/public/

A good place to look for books.

Code Complete is on their Highly Recommended list.
(as is the excellent The Pragmatic Programmer)

Clutch Cargo
Thursday, September 18, 2003

*  Recent Topics

*  Fog Creek Home