Fog Creek Software
Discussion Board


It's about time that I updated my crufty old list of recommended books at . What books should I have up there?

Ground rules: to keep this conversation on track, everybody gets to vote for ONE book, and one book only. I really want to hear what people think is the SINGLE best book on "painless software management."

Joel Spolsky
Wednesday, November 14, 2001

The Mythical Man-Month
- by far one of the best books ever.

Prakash S
Wednesday, November 14, 2001

I like "The Pragmatic Programmer" by Andrew Hunt and David Thomas.  Clear advice, good practices, very readable, and a lot of what would otherwise have to be oral tradition.  An excellent book to give programmers joining a team -- and a excellent way to start a discussion about the engineering culture a newly-formed group wants to build.

M. Hedlund
Wednesday, November 14, 2001

Dynamics of Software Development by Jim McCarthy. One of the few books I've had the patience to read cover to cover. A short, entertaining collection of excellent essays on building and shipping quality software on time. Favorite quote: "Portability is for canoes."

Johannes Bjerregaard
Wednesday, November 14, 2001

If you are going to recommend domain-specific books,
Thinking in Java by Bruck Eckel and Tom Kyte's Advanced Oracle Programming are very good.

Matthew Cromer
Wednesday, November 14, 2001

Non-domain books I like include Steve McConnell's Code Complete and Rapid Development.

Matthew Cromer
Wednesday, November 14, 2001

Whoops, I should have read the first message better.

Sorry for mentioning four books.

Matthew Cromer
Wednesday, November 14, 2001

IMO, Peopleware, by Tom DeMarco and Timothy Lister is best among the rest!

Thursday, November 15, 2001

Bruce Eckel's Thinking In C++ for language-specific books. And the best part is that it's available online.

Darren Collins
Thursday, November 15, 2001

The single most influential book I've ever read is by an
ex microsoft employee called Steve Maguire and is called
"Debugging The Development Process".

Liron Levy
Thursday, November 15, 2001

"Zen and the Art of Motorcycle Maintenance" by Robert Pirsig has a tendency to change the way one perceives work. After all managing oneself is the first step towards project management.

Ranjit Nair
Thursday, November 15, 2001

When I have to vote for one, then it's Deadline by Tom DeMarco.

Second are Mr. Bunnies Big Cup O Java (or ActiveX) and then Mythical Man-month, Peopleware, Deathmarch,
or just look at



stephan schmidt
Thursday, November 15, 2001

Have you read "Inmates Are Runnign The Asylum" by A.Cooper?  Personally, I would recommend it to everyone, who is involved in software development.

Sedelnikov Andrei
Thursday, November 15, 2001

Awww Joel, why can't I vote for more than one book? :(

I'm a voracious reader, and I've got several books you could mention

Madhu Menon
Thursday, November 15, 2001

after a very long (three seconds) reflexion, I vote for "don't make me think", by steve krug: it's the only one I read in the list !!

Vincent bénard
Thursday, November 15, 2001

I vote for Software Project Management Survival Guide from Steve Mc Connel... all the above mentioned ones may do it also, especially Peopleware.

Philippe Back
Thursday, November 15, 2001

"How Buidlings Learn" by Stewart Brand. 

A great book that covers the design of a complex system for change.  It really changed the way I thought about software design.  He talks about buildings the way Joel talks about software and its a really fun read.

Tim Randolph
Thursday, November 15, 2001

I'll second the vote for _SPSG_ by McConnell.

Michael A. Losh
Thursday, November 15, 2001

Mythical Man month..

Thursday, November 15, 2001

Design Patterns : Elements of Reusable Object-Oriented Software .  What I wrote of this volume some years back still holds: "The most important computer science book I've read in years. Tremendously influential, intriguing, readable, and highly original. Belongs on the same shelf as Knuth and the Aho & Ullman. Not for beginners, but highly recommended.

Mark Bernstein
Thursday, November 15, 2001

McConnell's Code Complete, by a large margin.  For the reason of its extensive annotated bibliographies at the end of each chapter.  The value of a book is in how much it tells you about other books, like Peopleware and Mythical Man-Month.

And the range of the book is large.  A manager can't be good unless she understands programming issues.  A programmer can't be good unless he understands the bigger picture.

forgotten gentleman
Thursday, November 15, 2001

One book? Mythical Man-Month. If you can't get to the end of that one, or aren't provoked to rethink some of your own processes by what's in it, you're too dumb to be doing software development.

Mike Gunderloy
Thursday, November 15, 2001

Software- Extreme Programming Explained: Embrace Change by Beck

Although Zen and the Art of Motorcycle Maintience is good for the general thought of onself. Kants Critique of Pure Reason is much better with understanding Logic. Which is one of the foundations of modern programming

Michael Lubrano
Thursday, November 15, 2001

"Peopleware" gets my vote...

Larry Liska
Thursday, November 15, 2001

Although "The Pragmatic Programmer" is not strictly a book about painless project management, if managers read it their next project stands a good chance of being painless. Dave Thomas and Andy Hunt did a great job of explaining what it really takes to deliver great software, and that kind of knowledge is essential for managers.

I have to admit that I am somewhat biased since Dave Thomas wrote a great forward for my Software Craftsmanship book

Pete McBreen
Thursday, November 15, 2001

The Manager Pool - Patterns for Radical Leadship...

new book, pretty interesting by Don Olson and carol Stimmel .. just started reading it, it's pretty much the same targeting the same goals as "Peopleware" (which is also #1 in my book).

Steve Makofsky
Thursday, November 15, 2001

Code Complete - the single best book I've ever read about how to write good software.

Chris Dunford
Thursday, November 15, 2001

A one two combo for me -

1. The Inmates Are Running the Asylum : Why High Tech Products Drive Us Crazy and How To Restore The Sanity
by Alan Cooper - for managing the process of figuring out exactly what to build.

2. Dynamics of Software Development by Jim McCarthy, Denis Gilbert  - for managing the process of actually getting things built.

Sorry for breaking the rules Joel

Nick Katsivelos
Thursday, November 15, 2001

My vote goes for "The Pragmatic Programmer". One of the many desireable features is its length (or lack of.)

A. F.
Thursday, November 15, 2001

Code Complete.

It makes me want to be a better programmer,

Stephen Boisvert
Thursday, November 15, 2001

Having to vote for ONE single best book is slightly unfair for those of us who consider multiple books to be crucial.  But you probably know that.  :-)

In the meantime, chalk another vote up for Peopleware, please.

Paul Brinkley
Thursday, November 15, 2001

_Code Complete : A Practical Handbook of Software Construction_ by McConnell, for programming fundamentals.

_The Deadline : A Novel About Project Management_ by Demarco for "painless software management" (you're not tempted to think of it as a 'one size fits all' prescription, unlike e.g. _Rapid Development_ ... it's funny and therefore good ipso facto, and has some memorable passages, e.g. 'Q: how can you tell when a specification isn't a specification? A: when it doesn't specify anything, e.g. inputs and outputs').

Christopher Wells
Thursday, November 15, 2001

Code Complete

I've read several books in the same vein, but this is the only one I've read cover-to-cover - twice!

Brian P. Duckworth
Thursday, November 15, 2001

"TinTin en Amérique" maybe ? ;-)
I've only read Peopleware (thank's to Joel) so... Peopleware!

(I've also read the online version of Joel's book but it's not in the list so.. :-)  )

Thursday, November 15, 2001

Gödel, Escher, Bach: an Eternal  Golden Braid. By Douglas R. Hofstadter, gets my vote any day, I count my reading as before and after GEB :- )
Its not really about any specific computer related discipline but its about the brain, the "I" etc and that must be the ultimate software.   

Allan Coopers books is also great…but I could only recommend one so :- ) (Sorry abot that Allan, If I only could recommend One more…;-)

By the way, as this is my first time writing to joel on software GREAT stuff, thanks Keep it coming…

My Best Regards.
Per Sjoborg

Per Sjoborg
Thursday, November 15, 2001

I'm with Mr Levy. _Debugging the Development Process_ is terrific.

Nick Beaudrot
Thursday, November 15, 2001

Hey Boys n' girls!

Peopleware is already in Joel's list of books. Vote for something *new* (and check his reviews first)

I suggest:
Contextual Design by Hugh Beyer and Karen Holtzblatt

Madhu Menon
Thursday, November 15, 2001

Quite interesting. Seems as if all people have quite the same books on their shelves. Joel wants just one book, so my personal favorite is "Design Patterns" - though Steve McConnel's "Code Complete" is quite a good competitor.

Oliver Eilhard
Thursday, November 15, 2001

Dynamics of Software Development by Jim McCarthy. And  my favorite quote:" expresses the team that created it. Anything you need to know about the team can be discovered by examining the software and vice versa." It is pretty deep if you think of it.

Serge Serguienko
Thursday, November 15, 2001

Without doubt it's gotta be "Large Scale C++ Development" by Lakos.

Andrew Lighten
Thursday, November 15, 2001

Software Fondamentals, by Dr. D. Parnas... not for the faint of hearts but is *THE* book when it comes to software design.

I'm going to cheat but if software fondamentals doesn't cut it, I'd say mythical man-month. Dr. Parnas is quoted several times in mythical man-month.

Olivier Dragon
Thursday, November 15, 2001

I would recommend an oldie but goodie --- Object Oriented Analysis and Design with Applications by Booch.  It is what got me really into OO.

Chris Woodruff
Thursday, November 15, 2001

My vote goes to <a href="">Making it happen - A Non-Technical Guide to Project Management</a> ... a brutally simple guide to project management in a tangent industry (sail boards).  Good application of sense - somethign we don't see enough in the software industry.

Bruce Alderson
Friday, November 16, 2001

I don't know if it counts as a book, but what about <A HREF="">Philip and Alex's Guide to Web Publishing</A>. It is quite specific but Philip Greenspun is very readable and he litters plenty of design advice and good sense throughout the text.

Failing that my vote goes to "Mythical Man Month"

Andy Todd
Friday, November 16, 2001

"Planning Extreme Programming" by Kent Beck, Martin Fowler gets my vote.

I know XP and the other agile methods are a bit of a bandwagon but I still find their perspective valuable and resonates to some degree with my own experiences.

This particular book in the XP series focuses on the project management issues so I guess would be the most appropriate according to Joel's criteria.

Actually the XP entry point on the wiki web ( is probably the best place to go to read up on this stuff but thats not a book :)

Graham Carlyle
Friday, November 16, 2001

The Way by Josemaria Escriva. Sanctify your work; sanctify your software.

Little Donkey
Friday, November 16, 2001

It doesn't say the books have to have anything to do with software development/engineering, but instead that the books you reads says something about you.
Well you read "Microserfs" since you mention it elsewhere on your site, and so did I, so why not review it

Owen Byrne
Friday, November 16, 2001

I think Philip Greenspun's book is one of the most wondeful books on Web Programming (and programming in general). Considering Joel admires Philip so much (but apparently not enough to take Philip's advice about breaking links) I wonder why it wasn't on the origional list.

Rob Schlaff
Friday, November 16, 2001

Steve McConnell's Code Complete

Gerald Brandt
Friday, November 16, 2001

Steve McConnell's Rapid Development.

Peopleware would run a close second.

I was kind of surprised to see Code Complete (and a few others) in this thread; they're primarily books on coding and low-level design, not on software management.

Dave Rothgery
Friday, November 16, 2001

Peopleware. Peopleware. Peopleware. Peopleware. Peopleware!!!!

Don Schenck
Friday, November 16, 2001

It's quite new and quite good -- Software Craftsmanship by Pete McBreen.    

Rob Stevenson
Friday, November 16, 2001

"Debugging The Development Process" did it for me.

Dan Petitt
Friday, November 16, 2001

Contextual Design : A Customer-Centered Approach to Systems Designs
by Hugh Beyer, Karen Holtzblatt

Dody Gunawinata
Friday, November 16, 2001

Steve McConnell's Rapid Development is probably the most useful book on software management.

David Dunham
Friday, November 16, 2001


Friday, November 16, 2001

The Pragmatic Programmer

Friday, November 16, 2001

Steve McConnell's Code Complete

It bridges the gap between theory and practice.

Jim Howard
Friday, November 16, 2001

Design Patterns -- Elements of Reusable Object-Oriented Software

It's not specific about painless project management, it did help the communication and programmers' mind. And I felt that's one of the way to achieve painless project management.

Friday, November 16, 2001

Good call MadMan - my first thought was Contextual Design by Beyer & Holtzblatt

If you're interested in contextual design then see:

and in a similar vein (veen?)

Jess McMullin
Friday, November 16, 2001

Hey Jess, you hang out here too? Fancy that! :)

Saturday, November 17, 2001

"Code Complete" by McConnel is by far my favorite book on general software development process. I've read it twice and will read it again in the future.

For specific issues (like large projects or OOP) there are other books.

Alexander L. Belikoff
Saturday, November 17, 2001

I thought Joel used to have a review of some self help book, about how everyone should always be happy. Does any one have the title or the article?

Saturday, November 17, 2001

Only three votes for *Rapid Development*?  Make it four. (I almost said Debugging the Development Process because "Fix the bugs first" is my #1 mantra but I don't like what Maguire has to say about schedules.)

James Fristrom
Saturday, November 17, 2001

"Expert C Programming" by Peter Van Der Linden. This book talks about all the esoteric things that really good C programmers will learn, eventually. This is one of those rare technical books where the writer's humor and expertise weren't edited away into blandness.

Larry Prince
Saturday, November 17, 2001

The best book to read when things aren't going so well with your software development project (or whatever):

It's a self-help book that's actually based on logic and solid clinical studies, rather than bullshit platitudes and crystal worshipping or something.

Ward Stradlater
Sunday, November 18, 2001

Oooh. A bit late in joining the fray, but here goes. Since someone already recommended "Dynamics of Software Development" by Jim McCarthy, I'm going to break rank and recommend a novel - "Microserfs", by Douglas Coupland. The only author who, IMHO, managed to capture what it is to be a programmer.

Sunday, November 18, 2001

Steve McConnell's Rapid Development.  Far and away the best book I've read on delivering software in a team.

Shawn Wildermuth
Sunday, November 18, 2001

"Rapid Development" by McConnell.

Marcus Price
Monday, November 19, 2001

Steve McConnell's Rapid Development.

It got me started on the right path and I never looked back. It's good because it gives you the lay of the land and points you to all the really good in depth books over the whole range of areas related to project management and software development.

Guy Kelsey
Monday, November 19, 2001

Sorry for not being original, but .. "Rapid Development", again.
I even asked why Joel doesn't mention this book in the old forum

Evgeny Goldin
Tuesday, November 20, 2001

At the moment, I like Software Craftmanship by Pete McBreen.

I would also vote for a good many of the aforementioned books, but you did say just one.

Bernard Farrell
Tuesday, November 20, 2001

_Computer power and human reason : from judgment to calculation_ by Joseph Weizenbaum
( )
is about the ethical considerations of programming and technology in general.  I haven't seen nearly enough books about this fantastically important subject.

Dan Moore
Tuesday, November 20, 2001

This is a great list! Thanks to all for giving me new suggestions, and for reinforcing lots of my own.

Now here's my effort to weasel past the one book rule... While I think lots of the books mentioned are great reads, the book that first inspired me to better project management was Maguire's "Debugging the Development Process". His "Writing Solid Code" was a quick read that showed me programming mistakes I was making and motivated me to be a better coder. That made me want to read weightier tomes like Code Complete. Well, DDP did the same for me as a project manager, making me realize all the ways I was screwing up. That inspired me to seek out books like Peopleware, Software Project Survival Guide, Dynamics of Software Development, and Mythical Man Month.

Martin L. Shoemaker
Tuesday, November 20, 2001

Peopleware, by Tom DeMarco and Timothy Lister

Robert Chevallier
Wednesday, November 21, 2001

My vote goes to Software Project Survival Guide by Steve McConnell.

Ton Juta
Wednesday, November 21, 2001

"Painless Software Management"?
As they say - No pain no gain.
Maybe the the favoured book should cover the issue of
"Gainless software Management"
Those of us who have been around the block a few times have worked on at least one of those.

Tony McConnell
Saturday, November 24, 2001

For anyone interested in Design Patterns, check out this post in comp.lang.lisp:

I just found it today, and it offers an interesting perspective that Design Patterns has become a religion which really exists to shore up C++'s weaknesses.

forgotten gentleman
Saturday, November 24, 2001

I'd vote for Microserfs by Coupland, because it's bloody good fun and Code Complete has already been mentioned so often.

Jan Derk
Sunday, November 25, 2001

If you're new in the business, Code Complete.

If you are in any danger of having to do your
own planning or scheduling, Software Project Survival Guide. And I don't care how often they are mentioned.

Once you've read those two, then go on to
Peopleware and Mythical Man Month.

David Clayworth
Tuesday, November 27, 2001

Wicked Problems, Righteous Solutions
is one of my favorites.  It's back in print although now it's textbook priced.  It is an overview of real world project management, the different processes that can work and how to decide what process to use.  It tends towards software projects, but includes others.  For instance: the Scrum (from rugby) is their term for the Cannon AE1 camera development process, which entailed locking both  engineers and marketing types in a room with an impossible task (easy to use automatic SLR with backwards compatible hardware at a low price point) and all the resources needed to succeed.  Pretty much the exact tact taken by Steve Jobs in delivering the Mac.

Jonathan Peterson
Tuesday, November 27, 2001

Something about thinking or to be more specific at least one book by Edward de Bono ( Since I may choose only one, it'll be "I am right, You are wrong" (see for instance

Ebbe Kristensen
Tuesday, November 27, 2001

For sure the one and only is "The mythical Man-month"

(why wasn´t  it on your list before?)

Ricardo Shimoda Nakasako
Tuesday, November 27, 2001

XP isn't painless. It is hard to follow strictly even though it's a simple practice in theory. Still, it has its rewards when followed diligently. In this regard it doesn't differ that much from some of the more academically cumbersome methodologies/practices.

As an introduction, I'd recommend either:

Extreme Programming Explained: Embrace Change, Kent Beck, Addison-Wesley, 200.

or just

as a starter.

If you want to understand what your software is doing to people, practices and communities of practice and how you should think about them then get:

Cognitive Work Analysis : Toward Safe, Productive, and Healthy Computer-Based Work, Kim J. Vicente, Lawrence Erlbaum Assoc, 1999.

This is difficult, quite academic and EXTREMELY important and it's not primarily about software management, but managing the effect of software.

Samu Mielonen, Finland
Wednesday, November 28, 2001

I want to add another vote for "Zen and the Art of Motorcycle Maintenance." The book is extrmely interesting and does a lot to bring the vague notion of "quality" into a realm that is more tangible, or at least better understood. It has been my favority book for a long time now and I think everyone should read it at least once.

Krystian Cybulski
Wednesday, November 28, 2001

"Expert C Programming" by Peter Van Der Linden. 

Michael Lambert
Thursday, November 29, 2001

Another vote for "Debugging the Development Process."  One of the best no-nonsense books I've read mostly explaining commonsense things that seem to be absent in software processes/management.

GA, San Jose CA
Monday, December 03, 2001

I haven't seen Philip Greenspun's book, "Philip and Alex's Guide to Web Publishing" mentioned. Please ignore the title - it's very deceptive. The material is outstanding, especially his occasion looks back to supposedly "new" ideas that were discovered in the '60s. Takes a very pragmatic approach to software delivery. It's completely available online - a Google search should find it (forget the page right now).

Donnie Hale
Tuesday, December 04, 2001

Apart from TMMM, Jon Bentley's "Programming Pearls" is wonderful to read and encourages you to think (and isn't drop dead boring like Code Complete).

Graham Wheeler
Wednesday, December 05, 2001

I should add that even though Bentley spends a lot of time talking about performance, something that is less important now than when the book was written, that doesn't detract from the value of the book, as the main aim is to get you thinking, and to show you that by thinking carefully about the problem to be solved, and not just jumping in and coding, it is often possible to come up with a non-obvious solution that is simpler, more elegant, faster, and less likely to be buggy, than the "obvious" solution.

Once your code is written it is usually too late to make it elegant if it isn't already - but if it is elegant from the start, you have a much better foundation that will stand the test of time, and future changes, and will be less likely to encourage those who come after to "fix" what isn't broken.

Graham Wheeler
Wednesday, December 05, 2001

My vote goes to "A Discipline for Software Engineering" by Watts Humphrey. It is structured as a text book, with exercises, that focuses you on the skills needed to estimate the time programming tasks take, and how to determine where you normally inject bugs into your code. A bit heavy on process and form filling but definitely worth the read. It made a big difference to my programming productivity and quality (both went up).

John Corrigan
Wednesday, December 05, 2001

Here's a different one: "Tog on Software Design" by Bruce Tognazzini.  It's a little dated at this point; several of his predictions are already history now.  It is, however, a great text to get programmers and designers to think outside the box.

This book turned me back towards embedded programming, where all of the real innovation is happening now and will continue to happen in the next 20 years.  The computer of interest is no longer the one on your desktop, but rather the one in your dashboard, in your key, or in your credit card.

Wes Peters
Wednesday, December 05, 2001

I'm going to vote for "Source of Power" which is one of the most influential books I've read in recent times. Chapter 13 "The Power to Read Minds" is worth the price of the book alone in the amount of time it's saved me to gather requirements. The section on Considerations for Communicating Intent was especially helpful.

You already have The Design of Everyday Things so I won't mention it. Ditto Don't Make Me Thing and The Psychology of Persuasion.

Mark W
Friday, December 07, 2001

Pitfalls of Object Oriented Programming, Bruce Webster. Essentially Design Patterns reversed, so that you can recognize the things that go wrong, perhaps before you're in the midst of the post-mortem.

Maury Markowitz
Friday, December 07, 2001

"The Mythical Man Month" is a must on any list of books about managing software development.

Bill Ruppert
Tuesday, December 11, 2001

Another vote for Peopleware

erik Brooks
Wednesday, December 12, 2001


I feel your views on the near term future of ubiquitous computing and user interface are very much in-tune with the broad vision of my new book, "The Intelligent Wireless Web." I hope you will consider including it on your list of recommended books.

Thank you for your kind consideration.

H. Peter Alesso

Title: "The Intelligent Wireless Web" ISBN: 0201730634 Author: H. Peter Alesso & Craig F. SmithPublisher: Addison-Wesley

Amazon - Barnes & Noble - Wireless Developer's Network (Editor's Choice)

Recommended by
"If you buy one book on the intelligent Internet, this should be it."—Minerva Tantoco-Hobbs, Director of Advanced Technology & Media Lab, Answerthink

"This book runs guns to the revolutionaries, detailing all the technologies, all the candidate protocols, and all the challenges to be met along the way to build the intelligent wireless Web."—Michael Swaine, Editor-at-Large, Dr. Dobb's Journal.

Written by two authors at the forefront of the Internet revolution, The Intelligent Wireless Web presents a fascinating, insightful vision of the Web's near future, with an overview of the technologies that will make it possible. This book explores technology developments in speech recognition, mobile wireless devices, network integration, and software that will be far more responsive to our informational and transactional needs.

The Intelligent Wireless Web examines the convergence and synergy among five key technological components: speech used as a primary user interface; wireless personal area networks (WPANs); an integrated wired/wireless network infrastructure; supporting wireless protocols; and intelligent applications. It investigates available technologies and standards that are currently being developed to bring these goals into the mainstream of Internet use.

Speech recognition and understanding text-to-speech generators, and Speech Synthesis Markup Language (SSML)
Personal Area Networks (PANs),Bluetooth(TM), Jini(TM), and Universal Plug & Play
Spread Spectrum, wireless networks, and the IEEE 802.11 standard
Wireless handheld devices and third-generation TDMA and CDMA
Mobile IP, Wireless Application Protocol (WAP), and Wireless Markup Language (WML)
Web Services, .NET, J2EE(TM), SOAP, UDDI, WSDL, and XML
Machine learning and Distributed Artificial Intelligence
Semantic Web Architecture
Ongoing research projects, such as MIT's Project OXYGEN, are used throughout to illustrate elements of the intelligent wireless Web in action. With an understanding of the trends, goals, and technologies described in The Intelligent Wireless Web, you will be well-positioned to develop your own strategic planning for the coming world of the ubiquitous Internet.

H. Peter Alesso
Sunday, December 30, 2001

The treatment of project management books seems good. But I think there should be more pointers to technical programming books as well.

There should be a book on algorithms. I realize you're only treating things at the level of _The C Programming Language_. So maybe you can't say people should read the book cover to cover. But there should be an algorithm dictionary on a programmer's desk, running into rather advanced algorithms so that he has some perspective on how tricky things are done well. I love _Introduction to Algorithms_ by Cormen et al., but I don't know enough other books to say it's the best.

And Russell and Norvig's _Artificial Intelligence: A Modern Approach_ arguably belongs on the list near _Goedel, Escher, Bach_. If you had to choose only one of the two, I'd probably choose _AIMA_.

There should also be pointers to good books on other key subjects. A given programmer might never need to read any one of these books, but when he ventures into the appropriate field he should know where to look instead of making it up as he goes along. I know I'm not supposed to recommend a third (or second, for that matter:-) book but I'll cheat by giving one as an example of the principle: Schneier's _Applied Cryptography_. Great books on compilers, databases, multithreading, fault tolerance, numerical analysis, basic circuit design, and so forth belong here.

Also, it'd be worth saying something about good general rules for finding books, e.g. idiosyncrasies and biases of different publishers. Joel probably has a few opinions of his own here (and better knowledge than I of what written opinions are legally actionable:-) so I'll just plug for "say something about this" instead of giving an example of what to say.

William Harold Newman
Wednesday, March 13, 2002

Thinking in C++ get's my vote.  It lead me to actual understanding of what it means to write effective, maintainable code and what real oo programming is about.

Wednesday, March 13, 2002


steve jenson
Thursday, March 14, 2002

"Patterns of Software", a wonderful series of essays wandering through the world of software development with a healthy dose of personal experience thrown in the mix.

steve jenson
Thursday, March 14, 2002

"Refactoring - Improving the Design of Existing Code" by Martin Fowler (pub 2000, Addison Wesley, ISBN 0-201-48567-2) is probably the second most useful book on the practicalities of development (after "Code Complete") that I've read. It puts a structured framework on much of the effort that I expend on other people's code and gave me a basis to explain to others how I wanted them to approach enhancements. Even though all the examples are Java-based and I'm mostly not Java-literate, it works for me.

Mike Woodhouse
Thursday, March 14, 2002

i agree with your comments on K&R but i feel i should point out that it should never be considered an example of how to write solid, secure C. almost every example in the book is a buffer overflow waiting to happen. the fact that so many programmers out there learned C from this book goes a long way to explain why there is so much insecure, fragile software out there.

anders pearson
Thursday, March 14, 2002

UNIX Network Programming
Advanced Programming in the UNIX(R) Environment

Although gear towards Unix , win an understanding of C both of this book  should make you a great programmer.

Arnaldo Riquelme
Thursday, March 14, 2002

Great book list.

One of my standard interview questions to anyone who has been out in the field for awhile is "You're working with a computer science intern who is about to graduate, and you want to give him/her a book as a graduation present--  a book to get them started in their career, to sit on our shelf for years and help them be a better software engineer.  What do you get them?"

The answer is, of course, in mostly in how they explain their answer, not the specific book.

I get a few answers like "Learn C++ in 21 Days".  These people haven't figured out that today's technology will be obsolete next Tuesday.

A surprisingly large number of people can't name a book at all.  I usually find an excuse to end those interviews quickly.

For those that are left, most will answer with "Code Complete", or "Writing Solid Code", but there are a few others that come up from time to time.  "Design Patterns" gets a few votes, but I personally feel you have to code for a few years before you can appreciate that one.

A few of the more daring name a non-computer book.  My personal answer to this question is "Zen and the Art of Motorcycle Maintenance".

Rich Ruh
Thursday, March 14, 2002

I ask a similar question of software developers I interview: "What books, maganzines, or websites have/do you read that shaped or impact the way you do your job and why?" There's no "right" answer (okay, maybe "Joel on Software" ), but I'm hoping for an answer that will provide me additional insight into the developer.

As for my book recommendation, I'm suprised people haven't mention "Object-oriented Software Construction" by Bertand Meyer.  Some may find it a little dry in its textbook-style presentation, but I love its rigorous, systematic approach.  If you've ever heard of Design-by-Contract, this book is the source.  Another thing people may not like is that the book uses Eiffel for its examples (on one level, the book is describing the basis for Eiffel's design), so you'll have to apply the principles presented to your language of choice yourself.  Nevertheless, the rationale is clear and the principles are solid.  I read it early in my career and it really shaped how I write software.

I should mention I read the 1st edition and I love my 1st edition hardback copy.  The 2nd edition looks to be much expanded (which doesn't necessarily make it better) and comes with a copy of the book on CD, but I haven't seen it in hardback.

Bert Fernandez
Saturday, March 16, 2002

The Mythical Man-Month and The One Minute Manager.  These two books should be the foundation of every software managers library!

David Rubin
Saturday, March 16, 2002

Oops, I was only supposed to vote for one book.

OK then, The Mythical Man-Month!

David Rubin
Saturday, March 16, 2002

Voting for books is like going into a good bordello and trying to chose a good  ... well read.

If you haven't then do it period.

The Visual Display of Quanitative Information
  Edward Tufts

Made in the Dark
Monday, March 18, 2002

"The Age of Spiritual Machines" by Ray Kurzweil.  A clever and believable look at the next 100 years in the evolution of computers and people.

John Dougherty
Monday, March 18, 2002

I've gotta give the nod to Principles of Transaction Procession by Bernstein and Newcomer.

Runner up is Debugging The Development Process by Steve Maguire

Marc Brooks
Monday, March 18, 2002

"Structure and Interpretation of Computer Programs" by
Sussman and Abelson is probably the definitive text on
software engineering. And probably the best text book
on almost any topic written.

Art Mellor
Monday, March 18, 2002

Gödel, Escher, Bach get my vote anyday.

Now that you have mentioned it, I want to read it again... and all I find in my bookshelf is Metamagical Themas, which is not a bad book, but not nearly as good as Gödel, Escher, Bach. Looks as if I have to go buy another copy...

Jonas Källström
Monday, March 18, 2002

Inmates are Running the Asylum gets my vote, since it is now time to switch gears towards human-centric development.

Justin Akehurst
Monday, March 18, 2002

I'm voting for a book outside of the programming sort, but the issues tackled are the ones where I have seen programmers fail miserably.

Getting to Yes by Gary Fischer
In my brief time in the working world I have seen the use of the principles of this book and the good things that can happen and the not using the principles and the not-so-good things that happen.  While it is a book on negotiation, its critical to be able to negotiate with the user community when it comes to features, schedules, and the like.  This book gets you there and its why its my pick for a book that should occupy the shelf of every programmer.

Grant Case
Monday, March 18, 2002

Excellent list. I totally agree with your comments about K&R C book.

I would also vote for Edward Tufte's "The Visual Display of Quantitative Information". And "The Design of Everyday Things" changed my life.

What is missing is a single good book about :
- (computer) data structures
- telecommunications (architecture and protocols) and information theory.
Probably because there is none.

Bruno Bonnefont
Tuesday, March 19, 2002

"Programming Pearls" by Jon Bentley

This is the only book which I have come across which talks about the small things in programming, and how they can make a big effect on your programs. (Like the strings example Joel gave in one of his articles).

This book is a must read for the school of programmers who have gone straight up from OOPS and Java, and dont know a thing about how things get done in bits and bytes.  All the examples given are written either in Fortran, Pascal or C, and from the surface, may not seem to be relevant today. But, make no mistake, these are exactly the same issues that we are try to solve even today.

I guess it can be called as one of the Bible's of any programmer!

Tuesday, March 19, 2002

Please add "Writing Solid Code" by Steve Maguire ISBN 1-55615-551-4 to your list. This book was instrumental to me perfecting my craft as a programmer.  This book is timeless, because it applies no matter what programming language you use.

Charles Hood
Tuesday, March 19, 2002

I've read and liked 80% of the books in your list, including yours. Thanks to Nick K for that. But I guess I'm showing my age when I think Knuth's books and Aho/Hopcroft and Ullman were missing. But perhaps my favorite of all time is:

UNIX Programming Environment, The
by Brian W. Kernighan, Rob Pike (Contributor)

It was the first book which taught me the elegance of providing tools which can be chained together in creative ways to solve problems. Very abstract and mathematical in nature. It's quite like what folks are writing about .NET and XML, but makes it a lot clearer and easier to grasp.

Tom Milne
Tuesday, March 19, 2002

A good list, though maybe a bit long on the philosophy part.  I would at the least add Knuth's "Art of Computer Programming" or Cormen, Leiserson, and Rivest's "Introduction to Algorithms". 

I'm also surprised you mentioned Christopher Alexander's book without an explicit reference to Gamma et. al's excellent "Design Fatterns".  You refer to programming design patterns as a passing fad.  Not with the engineers I know!  I think it's just assumed that a good programmer knows the difference between an Observor and a Composite pattern.  Design patterns are now standard programming vocabulary.

Christopher Rohrs
Tuesday, March 19, 2002

Alice in Wonderland, by  Lewis Carrol.  (Apologies to Alan  J. Perlis)

Greg Ball
Tuesday, March 19, 2002

K&R - we call it 'The Bible' over here. For its size it costs an arm and a leg but that's because it really is worth its weight in gold. I could not not recommend this book more highly to anyone.

Simone Naftel
Wednesday, March 20, 2002

Any of Gerald M. Weinberg's books.

Dave Carlson
Wednesday, March 20, 2002

Two books:

The Object Primer (Ambler)

Software for Use (Constantine, Lockwood)

Many others are really good, but these ones are the base and have to be well understood.

Yaneric Roussel
Wednesday, March 20, 2002

If I don't read K&R and I code what am I?

I've spent most of my career building useful thing from code other people have written - I mean, this was the point of OOP and components. Does this mean I'm not a programmer?

The comments on the K&R book are pretty narrow minded and if everybody followed that advice we'd have alot more holier than thou idiots and a lot less creative thinkers. A man cannot live by C alone - get with the 21st century grandad.

(for the record I'm 31, so I can't really call myself a script kid)

David Burrows
Friday, March 22, 2002

I like your list very much and agree with most of your choices.

Others have also mentioned some very good books.

However, the one book that no one (I think) has mentioned and REALLY deserves to be on the list is:

Title: Applying UML and Patterns

Subtitle: An Introduction to Object-Oriented Analysis and the Unified Process

Edition: Second

Author: Craig Larman

Topics: UML, Patterns (9 "GRASP" patterns that Larman considers fundamental to understanding more advanced patterns like the GoF patterns; he also covers the high-use GoF patterns), OOAD, the Unified Process for software development

This book is HIGHLY RECOMMENDED by experts like Martin Fowler, Phillipe Kruchten, Alistair Cockburn, John Vlissides, and Kris Cobryn

Puneet Singh Lamba, BCS, MCP
Monday, April 08, 2002

Influence: The Psychology of Persuasion is awesome!!

Thanks Joel!!

Mark Varnas
Monday, April 29, 2002

These are (mostly) wonderful books - but recommended to death.

A book that practically no one recommends, but that is the best "how to think" book ever written for software developers is Michael Jackson's "Software Requirements and Specifications."

If you find that you have a hard time marshalling your thoughts between their expression in code and design and architecture, or between implementations in algorithms and business rules, then this book is for you (or that very special team member who shares your confusions).

At just over 200 pages, it's a little gem that belongs on every developer, designer, architect, and managers' desk.

Joel Hernandez
Monday, May 13, 2002

Book Reviews:

I have given loads of VB/VBA courses and time after time I tell people to get hold of a C compiler and K&R.  I don't do it for the same reason as you but to get the user used to the concept of pointers from the start.

VB is full of pointers and most people don't know what the Set statement does.    I strongly believe that once the concept of the pointer is grasped then one is well on the way to being in the top 5% of VB coders in a short time.

As an exercise I find it fun to work through a linked list example with the students.  It gets their heads working and if they can handle that then, well, they can handle most things in VB.

The best programming book?  Easily Code Complete.  The best book for dealing with management; well anything which teaches basic unarmed combat techniques.  As for setting up an investment plan those in the UK could do a lot worse than read Alan Potts' AGAINST THE CROWD.  Not sure how it applies to the US though.

Malc /

Malcolm Smith
Saturday, May 18, 2002

Actually, I would advice every people to read this book. It's going to be a highly recommended for any tech guy. And it's absolutely required for IT personell. Please add it.

PS: It seems I've forgotten something. What can it be?

Douglas Adams, The Hitch-Hiker's Guide to the Galaxy

Thursday, June 13, 2002

Mullet & Sano "Designing Visual Interfaces". Very readable and not too thick book about graphical design to support software usability.

Aivar Annamaa
Monday, June 17, 2002

So many new books. New books that don't really detail the art of programming but rather suggest that programing is an art. I have many of the books mentioned but my eyes focus on two older books that are reprints of columns.
"Programming Pearls" by Jon Bentley is still a wonderful read; for those that have forgotten or have not been told software is about meta programming when you get good. Bentley's columns on little languages speaks to this. The other is "OMT Insights" (ISBN: 0138469652) by James Rumbaugh. Who cares what notation you use good OO design is hard and fun and this series of columns shows a master designer working it out.

Andrew Gilmartin
Tuesday, July 16, 2002

A great new book also from Apress for anyone leading a team of developers is Herding Cats: A Primer for Programmers Who Lead Programmers.

On a parallel thread can anyone recommend any other joelonsoftware like websites ?

Keith Berry
Monday, August 05, 2002

1. Structure and Interpretation of Computer Programs

2. The Art of Computer Programming

3. The practice of computer programming

4. Programming Pearls

5. Design Patterns

6. Algorithms in C

platform/language specific

1. The AWK programming language

2. The C programming language

3. The Unix programming enviroment

4. (More) Effective C++

Tao Xu
Thursday, November 07, 2002

My vote goes to Software Project Survival Guide by Steve McConnell.

Mickey Hadick
Monday, March 10, 2003

I'd definitely vote for almost anything by deMarco or Weinberg. Can I show my age by mentioning the book that got me on the path to programming righteousness  --  "The Elements of Programming Style" by Kernigan & Plauger. And last, and not least, the three books of Edward Tufte on graphical design  --    "The Visual Display of Quantitative Information", "Envisioning Information",  & "Visual Explanations".

Mark Allen
Monday, August 04, 2003

Since August is a good month for relaxed reading, let's make a 2nd contribution for today.

I think the best software book I've ever read is "Object Oriented Software Construction" (2nd Edition) by Bertrand Meyer, mentioned above. Of course, it's much more a technical than a management book, but nevertheless I think anyone who ever pronounces the words "object oriented" should have read, understood and be applying the ideas exposed in this book.

I haven't finished it yet, actually, so I shouldn't pronounce the words myself :-) but I was planning on finishing it this August. However, someone stole it from my car. On the very next day I ordered it again. While waiting for it to come, I started "Peopleware" which I had on the reserve. I find it a wonderful, very realistic book. Many things I have lived are described in "Peopleware", along with the way things *should* have been. In this case, the word you can't pronounce without reading this book is "productivity".

Daniel Daranas
Monday, August 04, 2003

"A DISCIPLINE OF PROGRAMMING" written by the Master himself Edsger W. Dijkstra. Superquality writing.

Being one of the first books on programming that I've read, it influenced me ENORMOUSLY. It just changed my world. It's like the first love :)

The following two quotes by Dijkstra (not from the book) I particularly like, and they explain my affection to the above mentioned book:

    "Teaching to unexpecting youngsters the effective use of formal methods is one of the joys of life because it's so extremely rewarding. Within a few months, they find their way into a new world with a justified degree of confidence that is radically novel for them; within a few months, their concept of intellectual culture has acquired a radically new dimension. To my taste and style, that is what education is about. Universities should not be afraid of teaching radical novelties; on the contrary, it's their calling to welcome the opportunity to do so".
    "My purpose is no less than to effectuate in each of you a noticeable, irreversable change. [...] I want to inspire you to raise your quality standards. I mean, if 10 years from now, when you are doing something quick and dirty, you suddenly visualize that I am looking over your shoulders and say to yourself "Dijkstra would not have liked this.", well, that would be enough immortality for me."

Anatoli Ceban
Tuesday, October 21, 2003

"The Seven Habits of Highly Effective People" - Great for dealing with other people, and yourself.

Matt Wilson
Wednesday, October 29, 2003

"The prince" by Niccolo Machiavelli. A must have!
"The art of war" by Sun tzu, a classic!

Monday, June 21, 2004

Two more books which deserve to be on the list:
The Psychology of Computer Programming (Gerald M. Weinberg)
The Art of Unix Programming (Eric S. Raymond)
My vote goes to "The Mythical Man-Month".

Tuesday, June 22, 2004

One more vote for "Zen and the Art of Motorcycle Maintanance".
This can change the way you view the world around you and the life.

Tuesday, August 17, 2004

*  Recent Topics

*  Fog Creek Home