Recommended Reading for Developers

February 2, 2004

cover

Code Complete 2

Steve McConnell's Code Complete 2 is the Joy of Cooking for software developers. Reading it means that you enjoy your work, you're serious about what you do, and you want to keep improving. In Code Complete, steve notes that the average programmer reads less than one technical book per year. The very act of reading this book already sets you apart from probably ninety percent of your fellow developers. In a good way.

I like this book so much that the title of this website is derived from it-- the examples of what not to do are tagged with the "coding horror" icon. And there's nothing funnier than a coding horror-- until you have to deal with one yourself. Then it's suddenly not so funny any more. Do yourself a favor. Make this the first book you read, and the first book you recommend to your fellow developers.

Updated 6/27/04: Version 2.0 released!


cover

The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition (2nd Edition)

Arguably the only classic book in our field. If you haven't read it, shame on you.

I challenge any developer to pick up a copy of The Mythical Man Month and not find this tale of a long-defunct OS, and the long-defunct team that developed it, startlingly relevant. This twenty-five year old book boldly illustrates one point: computers may change, but people don't. 

Reading this classic work will certainly be a better use of your time than poring over the latest thousand page technical tome du jour.


cover

Don't Make Me Think: A Common Sense Approach to Web Usability

The single best book on usability I've ever read. The title says "web usability" but don't be fooled by its faux specificity. Steve Krug covers every important usability concept in this book, and covers it well. It's almost fun. If you choose to read only one book on usability, choose this one. It's chock full of great information, and it's presented in a concise, approachable format. It's suitable for any audience: technical, non-technical, user, developer, manager, you name it.

sample graphic from Don't Make Me Think

Er.. yeah. Never been in a meeting like that. The solution to this problem, by the way, is usability testing. Imagine that: making decisions based on actual data instead of never ending, last man standing filibuster style religious debates. Revolutionary!


cover

Rapid Development

The full title of this book is Rapid Development: Taming Wild Software Development Schedules, which isn't just long-winded and vaguely ridiculous, it's also an unfortunate misnomer.

Rapid Development isn't about rapid development. It's about the reality of failure . The vast majority of software development projects will fail: they will overrun their schedules, produce substandard results, or sometimes not even finish at all. This isn't an argument; it's a statistical fact. The unpleasant truth is that your team has to be very good to simply avoid failing, much less to succeed. While that may sound depressing-- okay, it is depressing-- you'll still want to read this book.

Why? Because half* of success is not repeating the same mistakes you, or other people, have made. The epiphany offered in this book is that making mistakes is good-- so long as they are all new, all singing, all dancing mistakes. If you're making the same old classic mistakes, you've failed before you've even begun. And you probably have no idea how likely it is that you're making one of these mistakes right now.

Our field is one of the few where change is the only constant, so it's only natural to embrace that change and try different "Rapid" development techniques. But the converse isn't true. We can't assume that so much has changed since 1970 that all the old software development lessons are obsolete and irrelevant when compared to our hot new technology. It's the same old story: computers have changed; people haven't. At least have some idea of what works and what doesn't before you start-- in McConnell's words, "read the instructions on the paint can before painting." Sure, it sounds obvious enough until you read this book and realize how rarely that actually happens in our field.

* According to the book, technically, one-quarter. But I think it's more than that.


cover

Peopleware : Productive Projects and Teams, 2nd Ed.

If you've ever seen the performance of an all-star sports team suffer due to poor coaching, you'll appreciate this book. It doesn't matter how many "coding superstars" you've got when none of them can talk to each other, or agree on anything. And it no developer, however talented, can work effectively when constantly being barraged with minor interruptions. Developers aren't known for their people skills, per se, but here's the ironic part: the success of your project may hinge on just that. If you have any legitimate aspirations to be a "Team Leader" in practice instead of in name only, you need to pick up a copy of this book.

While this book is full of great, totally valid points, it also implies a level of employee control over the workplace that is pure fantasy at most companies. But at least you'll know when your work environment, or your team, are the real problem-- and more importantly, what to do about it.


cover

The Design of Everyday Things

It can be incredibly frustrating to develop software, because so much can go wrong. A lot of what we do is defensive: trying to anticipate what will go wrong before it does. It's mentally fatiguing, and can eventually manifest itself in some negative ways. I sometimes describe this to non-technical people as building a watch with a thousand moving parts, all of which can fail randomly at the slightest provocation. Good times!

Designing software is difficult, to be sure, but designing a door is difficult too. The nuances of design extend into every object you touch, whether it's some hot new SQL engine, or a humble shoe. This book will give you a new appreciation of the "devil in the details." If designing a door isn't the no-brainer we thought it was, maybe it's time to give ourselves a break for not being able to design software perfectly, either.


cover

About Face 3.0: The Essentials of Interaction Design

Alan Cooper, father of Visual Basic, godfather of usability. I'll be honest: it's been years since I read this book. I bought it when it was released circa 1995, so I have the "old" 1.0 version of the book. (Is it considered bad usability when you obsolete your own books with new revisions?)

This book, along with GUI Bloopers, tends to be a rather pedagogic rulebook on presenting a consistent GUI. But this one is full of more generally applicable guidelines. Of the GUI problems used for illustration-- with examples from the hoary old Windows 95 UI-- it's interesting to compare which have been mostly resolved (using visual examples to show the effects of dialog selections before you make them), and which have not (stopping the proceedings with modal idiocy).

Unlike GUI Bloopers, this is all pre-web, so there's no discussion of the web idiom and how it is impacting GUI design. But it's still a fantastically useful book; I used the chapter on what error messages should look as a model for a recent .NET project.


cover

The Inmates Are Running the Asylum : Why High Tech Products Drive Us Crazy and How To Restore The Sanity

This is the book that introduced the world to the concept of personas: rather than thinking of users as an abstract, difficult-to-describe, amorphous group of people, personas instruct us to talk about specific users who have names, personalities, needs, and goals. Would our users want a print preview feature? Who knows? But if Gerry Manheim, Account Executive, has to print out his weekly expense report as a part of his job, you better believe print preview needs to be in there. There's nothing magical here; as always, it boils down to knowing who your users are and what they really do-- and the personas technique is a great way to get there.

There's also an interesting analysis here of how developers tend to think themselves qualified to make usability decisions on behalf of "regular" users, when in reality they're anything but. Developers are freakish, extreme users at best-- "Homo Logicus" versus "Homo Sapiens." Unless you happen to be writing a compiler where developers are the end users.

One hidden lesson in this book is that sometimes it doesn't matter how good your design is: the scanner software and the web development software which Alan consulted on, and uses as examples in this book, both failed in the marketplace for reasons that had nothing to do with their usability-- which was verifiably excellent.* Sometimes great products fail for reasons beyond your control, no matter how hard you try. Feel free to use this fact to counterbalance the sometimes smug tone of the book.

Anyway, another great book by Cooper, and a logical progression from About Face. In About Face, Cooper covered "Perpetual Intermediates" as the target audience; here, that's refined into the more specific, and thus easier to develop against, personas.

* I owned the exact model of "behind the keyboard" USB scanner pictured in the book, and I was quite impressed with the bundled scanning software. I eventually gave this scanner to my Dad. One time I was chatting on the phone with him and without any prompting at all, he mentioned to me how much he liked the scanning software. This was before the book had been published!


cover

GUI Bloopers: Don'ts and Do's for Software Developers and Web Designers

Back in the good old days of Windows 95 and Apple's System 7, there were real GUI rules. And this is a hard-core GUI design book, about the ellipsis in menus, and the alignment of buttons and text on dialogs. It's debatable how much users actually understood these rules, but at least you could expect the user interface of Application A to behave very similarly to Application B. It's good to get a refresher course in "classic" GUI design principles, if only to compare with the current wild and wooly state of affairs on the web, where every day a budding Flash designer decides to create his own GUI. From scratch. With a custom soundtrack.

The reality is that the classic GUI world and the browser world are merging-- taking all the best qualities of both. There are whole classes of applications that have very browser-like interfaces. This is known as the Inductive User Interface, and the first time I recall seeing it is in Microsoft Money circa 2000 or so. You can expect to see lots of convergence in Windows Vista, Windows 7, and Windows 8.


cover

Programming Pearls (2nd Edition)

I hesitated to include Programming Pearls because it covers some fairly low-level coding techniques, but there are enough "pearls" of software craftsmanship embedded in this book to make it well worth any developer's time. Any book containing this graph..

.. is worth its weight in gold. TRS-80 versus DEC Alpha to illustrate 48n versus n3 algorithms? Come on folks, it just doesn't get any better than that. Programming Pearls is the next best thing to working side by side with a master programmer for a year or so. It is the collective wisdom of many journeyman coders distilled into succinct, digestible columns.

I won't lie to you: there are entire chapters that can probably be ignored. For example, I can't imagine implementing sorting, heap, or hash algorithms as documented in columns 11, 13, and 14 respectively, given today's mature libraries of such basic primitives. But for every textbook-tedious exercise, there is real, practical advice alongside. Just scan through the book, ignoring the code sections, and I doubt you'll be disappointed. Column 8, "Back of the Envelope" is essential, probably the best treatment of estimation I've seen anywhere. It also goes a long way towards explaining those crazy interview questions that companies love to annoy us with.

You can read sample sections of the book online if you're still on the fence. I recently used the chapter on strings to illustrate the use of Markov chains in generating synthetic data to fill an empty database with-- a performance estimation technique covered in "Back of the Envelope".


cover

The Pragmatic Programmer: From Journeyman to Master

This book reminds me a lot of Programming Pearls, but it's actually better, because it's less focused on code. Instead of worrying about code, the authors boiled down all the practical approaches that they've found to work in the real world into this one book. Not all of these things are technically programming. For example, asking yourself "why am I doing this? Is this even worth doing at all?" isn't thinking outside the box; it's something you should incorporate into your daily routine to keep yourself-- and your co-workers-- sane. And that's what makes Pragmatic Programmer such a great book.

If you'd like to know a little more about the book, I created a HTML version of the pullout reference card included inside, which provides a nice overview of the contents.


cover

Designing Web Usability : The Practice of Simplicity

Jakob Neilsen is well known for his usability site, and his career as a usability expert extends back to 1989 when his first book was published. Designing Web Usability is of course a full-on web usability primer, so it's a bit different than the GUI-oriented Cooper books.


cover
cover
cover

Information is beautiful. And so is a well-designed GUI.

You don't need to own all three books in the series unless you're a completist (or a masochist, I suppose), but the first two are essential.

Chris Sells has some interesting insight on the Tufte books based on a Tufte seminar he attended in June 2004.

 

 


cover

Mastering Regular Expressions, Second Edition

UNIX has a well-deserved reputation for being complex and impenetrable. So do Regular Expressions.

I may be a card carrying member of the "Keep It Simple Stupid" club, but I'm making a meteor sized exception for regular expressions. Written properly, they will save you a tremendous amount of time in string manipulation, and I've never run across a project where they didn't come in handy somewhere. See for yourself.

Once you delve into the world of regular expressions, you may become drunk with the amazing power and potential they have, which results in things like Perl. Remember, absolute power corrupts absolutely. But it also rocks absolutely.

Posted by Jeff Atwood
120 Comments

I think you have missed The Dynamics of Software Development.

Serge on August 25, 2004 11:52 AM

Good book selection Jeff,

I'd probably add Waltzing with Bears by Demarco and Lister to the list - a great book for understanding (or at least accepting) risk management on software projects.

Is Code Complete 2nd Ed worth getting if you've already read the 1st Ed? It's one of those must have books, but, I have it ;) that and the fact that it's too big to read on my commute...

Len Holgate on September 17, 2004 4:40 AM

I think it's worth getting the second edition, but realize that I am a total McConnell fanboy. I already owned two copies of the 1st edition, one for home, one for work. There are a lot of updates, though the body of the content hasn't changed dramatically. The main one I noticed is that he re-worked all the examples in modern language. Some of the other changes are listed on Steve's site:

http://www.cc2e.com/

I will definitely look into The Dynamics of Software Development

http://www.amazon.com/exec/obidos/tg/detail/-/1556158238

and Walting with Bears

http://www.amazon.com/exec/obidos/ASIN/0932633609

The other DeMarco book was excellent but a bit depressing; at most companies the employees have little to no control over the factors described in Peopleware. And even the managers can't buck company policy to the extent implied in the book. Kind of sad, but it makes me want to start my own company. If only I wasn't so lazy..

Jeff Atwood on September 19, 2004 11:25 AM

Yeah, Cooper is kind of overbearing-- you have to disregard about half of what he says. The reason I keep reading him is because the other half is usually great.

Jeff Atwood on September 21, 2004 10:20 AM

I didn't like the Inmates book. I got the distinct impression that what Alan found to be hard to use defined his definition of what the world found hard to use. And he makes the extremely bold claim that ALL the interaction design for the ENTIRE product should be done before any coding is done. What? Are we going back to the waterfall, except calling it interaction design instead of requirements this time? Maybe as the first introduction to developing around personas is this book good, but the rest was, in my opinion, a waste of time.

Darrell on September 21, 2004 10:24 AM

You may want to read: The Essence of Human-Computer Interaction by Christine Faulkner. This book is an excellent workbook in HCI.

Geoff Dalgas on February 8, 2005 3:23 AM

I think you should add Scott Berkuns' 'The Art of Project Management' to the list. It's light, thoughtful and fun to read.

sameer borate on August 21, 2005 1:56 PM

It's really a question of focus. I'm more interested in UI and usability.

In other words, it doesn't matter how pretty or bug-free your code is on the inside when nobody can figure out how to use the outside.

I do have a few high level coding books in here, but I explicitly avoid recommending anything too specific or overly technical. Most developers are pretty good at the technical coding stuff anyway; what they need is to exercise some different muscles.

Jeff Atwood on September 8, 2005 2:34 AM

I notice there are no books specifically on Refactoring, or TDD. Do you have any favorites? Do you believe those topics are worthy of being on a recommended reading list?

Steve Steiner on September 8, 2005 2:56 AM

Your clear focus and passion about your topics is definitely the reason I keep coming back to your blog.

I was interested in those two topics because of the book I'm just finishing, Michael Feathers "Working Effectively with Legacy Code". It is a nuts bolts look at injecting TDD into development when you can't start from scratch. It's defintely worth a look.

Steve Steiner on September 9, 2005 1:42 PM

you should look at:

Refactoring: improving the design of existing code

by Martin Fowler

a good book!

mp

ps: i'm also a steve McConnell fan. code complete 2nd edition had added a refactoring section also.

Mike Pijl on September 15, 2005 2:03 AM

Don't forget the rest of the pragmatic series, pragmatic unit testing and ruby are both superb!

deepak trama on October 28, 2005 10:30 AM

Not the pragmatic ruby! It's terrible until it settles down into a ruby manual. The introductory chapters are really confusing and badly put together.

Inmates ia also a terrible book. The guy doesn't have a clue.

xman on March 5, 2006 4:26 AM

Great list, thanks!

If you're working in an OO language like Java, the list should probably include a href="http://www.amazon.com/gp/product/0201633612/103-3840543-7935867?v=glancen=283155"Design Patterns: Elements of Reusable Object-Oriented Software/a, although this book actually predates Java.

And definitely that Fowler book, a href="http://www.amazon.com/gp/product/0201485672/qid=1143050521/sr=2-1/ref=pd_bbs_b_2_1/103-3840543-7935867?s=booksv=glancen=283155"Refactoring: Improving the Design of Existing Code/a. In addition to recommendations for approaching refactoring, Fowler provides a list of "code smells" :) to look out for, which is a handy shorthand for bad ideas to avoid.

cdj on March 22, 2006 1:04 AM

I haven't read the Krug book - since we seem to agree on so many others, it's going on the list. About Face 1.0 was simply glorious, 2.0 is too much of a sales pitch for my taste. Code Complete 1.0 dated very badly - fortunately McConnell realised it! And it's very good, even if he does claim (without any clear justification IMO) to have sorta kinda invented Agile and TDD... Nielsen makes a kind of sense, but he's a bit too back-to-basics for me.

Good list.

Mike Woodhouse on March 22, 2006 9:26 AM

I'm also a McConnel fanboy, I've even got my first 3 books by him autographed. (How you know you've gone from fan, over the line to fanboy)

"Agile and Iterative Development: a Managers Guide" By Craig Larman is a great book on Agile development another great primer for Agile is Larman's "How to fail with RUP"
http://www.agilealliance.org/articles/larmancraigkruchtenph/file

Anyway, this book reminds me of Code Complete in it's light style and in-your-face reality checks, with wonderful sections like "How to tell if your XP expert isn't"

Malcolm Anderson on March 22, 2006 12:17 PM

Hi Jeff/all,

Thanks for your valuable comments.

For anyone interested in object-oriented techonology and software development in general I'd recommend Object-Oriented Software Construction (OOSC) by Bertrand Meyer, a must read imho.

Regards

ecab on March 28, 2006 11:32 AM

How about the classic, "Design Patterns" by the GOF?

Matt on March 29, 2006 5:33 AM

I also like Jakob Nielsen's book on Home Page Design where he shows 50 sites, and how they are wrong/right for information architechture and usability.

Btw I have my own saying.

For an application to truly beautiful, it has to be beautiful in teh code and the design ui. If only 1 is beautiful, then it is truly bad.

:)

Craig M. Rosenblum on March 30, 2006 9:29 AM


Could someone please define the acronym 'TDD'?

(Does it mean 'test-driven design'? I found that
as one of many possibilities with 'define: tdd' into
Google?)

And, more importantly, could you please explain
which of those textbooks explains 'TDD' in
some detail?

[Hmmm...maybe it is part of the 'refactoring'
camp? I have read just a bit on that subject.]

TIA...

Dave

Dave on May 28, 2006 2:38 AM

I'd recommend Knuth, 'The Art of Computer Programming' and Abelson and Sussman, 'The Structure and Interpretation of Computer Programs'.

pwyll on June 17, 2006 11:20 AM

Dave:

Yes, TDD stands for test-driven development. As I understand it, it's about developing tests which test the requirements, and coding to pass these tests. Your favorite search engine can tell you more.

Other thoughts on the books listed above:

Don't Make Me Think is a great book focusing on web development (some of the topics will translate well to UI design). There's a 2nd edition out now with a few new chapters, nothing worth the money if you have the first edition.

Mythical Man-Month is great.

I haven't read through too much of GUI Bloopers, but if you are having problems with something (error text, or the right use for radio buttons) you can find a section which will prove helpful.

The Design of Everyday Things is good but I found it a bit dry.

Chris Vance on June 26, 2006 9:26 AM

Another one from Steve McConnell
"Software estimation Demystifying the black art"

Once of its kind

Tarun on June 28, 2006 4:41 AM

Have you read joel spolsky's book on guis

I forget the name
you can find it on www.joelonsoftware.com

I found it good because it was short, simple and had lots of pictures. Also he has a humorous writing style which caught my attention so I actually remembered some of the rules.
But its not for dummies, which i make it sound like, its a serious book

Tim Yen on July 21, 2006 5:25 AM

Tim is referring to "User Interface Design for Programmers" by Joel Spolsky.

I read this a year ago. I recall it contained some interesting, useful information, but nothing I had not read in Don't Make Me Think or elsewhere.

Chris Vance on August 4, 2006 7:19 AM

A classic in this vein is the book "Professional Pascal: Essays in the Practice of Programming" by Henry Ledgard.

I read this book back in the day based on the recommendation of my advisor, and it changed the way I thought about software development.

Granted, it's about Pascal, but the general concepts inside it's pages apply to every higher language.

http://www.amazon.com/gp/product/0201117762/sr=8-1/qid=1155657836/ref=sr_1_1/103-6649576-7933459?ie=UTF8

John Gordos on August 15, 2006 10:08 AM

I am *shocked* that you don't mention the single most important book that has come out in the past 11 years: Design Patterns: Elements of Reusable Object-Oriented Software by Vlissides, Helm, Gamma, and Johnson. Not one of the books you mention has had a cross-developer, cross-language impact that this one has.

Anyone doing OO development had better read this book, lest you try to reinvent the same wheel many folks before you have already honed into a well-oiled machine.

And yes, it uses C++/Smalltalk for examples...there are C#, Java, etc versions that exist now, so not a big deal if you don't know those languages...

Dave Rodenbaugh on August 29, 2006 10:56 AM

Which is a good starter book for leranign about Agile software development

Supriya on October 5, 2006 10:05 AM

Code Complete Second Edition is by far the BEST book every written for our field. It ranks number one of my list. The book that ranks number two most people probably wouldn't want because it is not only language specific, but platform specific. It is John Walkenbach's Power Programming With Excel 2003. If you ever wanted to learn to automate Excel or learn VBA in general it is the best book every written.

Does anyone have any suggestions for a good JavaScript book? There are so many out there and most of them are crap. I would love to find a list of good language-specific books. It is hard to find a good book.

Billkamm on March 29, 2007 10:01 AM

Neilsen has written a new book "Prioritizing Web Usability". I just finished reading it and it discusses many topics in the light of today's changed Internet environment - more knowledgeable users, better Internet bandwidth.

So will you be recommending the new book instead?

Krishna Kumar on April 1, 2007 8:49 AM

Hi Krishna, I didn't even know it was out! Thanks for letting me know, I'll place an order for it right now.

Jeff Atwood on April 2, 2007 1:09 PM

Hi Jeff

One more interesting book is :
How to Solve it By Computer by R G Dromey.
(The idea of the book is based on another book How to Solve It - A New Aspect of Mathematical Method, by G Polya).
Being from a primarily C background, I think Kernighan and Pike's "The Practice of Programming" is good as well.
http://www.amazon.com/Practice-Programming-Brian-W-Kernighan/dp/020161586X

I had read Programming Pearls. In that book, Bentley recommends
"Conceptual Blockbusting - A Guide to Better Ideas".
Have you read this book ? How did you find it ?
http://www.amazon.com/Conceptual-Blockbusting-Guide-Better-Ideas/dp/0201550865

Harish Prabhu on April 10, 2007 12:19 PM

Jeff -

The 'See for Yourself' link under 'Mastering Regular Expressions, Second Edition' is broken.

Regards.

Greg on April 24, 2007 6:50 AM

I second Michael Feathers' Working Effectively with Legacy Code -- http://www.amazon.com/Working-Effectively-Legacy-Robert-Martin/dp/0131177052/. I've read about a bajillion software books, and WELC is probably the most useful technical (as in "shows code examples") book I've read. I wish I'd read it ten years ago (and every 2-3 years since...).

David on April 24, 2007 1:23 PM

Hi Jeff, I just saw that About Face 3 is to be released.

http://www.amazon.com/About-Face-Essentials-Interaction-Design/dp/0470084111/ref=sr_1_4/104-9356647-0562304?ie=UTF8s=booksqid=1177610504sr=1-4

Nick Berardi on April 26, 2007 12:03 PM

Thank you for inspiring me to order "Code complete 2"!

Patrik on April 30, 2007 3:03 AM

Code complete is a great book, we had a copy in office and usualy tell many people to refer to page 25-26 where Steve says, the people who spends less time in fronot of computer are more productive...

I ahve read also After the Gold Rush, in which he stress about the responsibility of Software developer (Each should get a licence...).
An Expert should know 50000 info intersts me great.

For OOAD , i would say Grady Booch Book is the bible.

mahadevan on May 1, 2007 10:14 AM

Code complete is a great book, we had a copy in office and usually tell many people to refer to page 25-26 where Steve says, and the people who spend less time in front of computer are more productive...

I have read also After the Gold Rush, in which he stress about the responsibility of Software developer (Each should get a license...).
An Expert should know 50000 info interests me great.

For OOAD , I would say Grady Booch Book is the bible.

mahadevan on May 1, 2007 10:15 AM

How about "Writing Solid Code" by Steve Maguire? It is full of useful mental habits.

N. Velope on May 11, 2007 5:37 AM

A quote about reading:

"The man who does not read good books has no advantage over the man who can't read them." by Mark Twain

Edward on May 17, 2007 3:10 AM

Hi Jeff!
Im absolutely amazed that entirely by coincidence this collection is almost identical to mine! Spooky.
One point worth noting is that you cant really read Peopleware unless you're also willing to read Constantine on Peopleware to balance out the experience.
Also, have you ever considered condensing your blog entries into a Joel On Software Style Book? kind of like his "Best Software Writing" series? I'd be on your list of pre-orders.

/2ob


Rob Hill on June 7, 2007 2:15 AM

My last few months of reading came from Joel's blog and mainly management books. Now that I have read way to many management books in a row it's time to get back to usability. Time to place a large order on amazon thank you.

Shane Starcher on July 2, 2007 8:54 AM

I've read Code Complete, Rapid development, and now I am reading About face. Does anyone recommend a good book for software design patterns (ie mvc, singleton, etc.)?

Cody Nichols on July 19, 2007 6:19 AM

Jeff Johnson has also written a "Web Bloopers" book. I found it pretty interesting.

Krishna Kumar on August 7, 2007 2:35 AM

Cody, the "Head First Design Patterns" is a good book.

Krishna Kumar on August 13, 2007 12:38 PM

You forgot to mention: read literature, or poetry, or essays.
Whatever improves your fantasy and makes you think out of the pack, may help you; particularily if you have just come out of a course where they taught to you how to be a competent parrot and answer yessir to the professor!

Warning: staying out of the pack is not good if you want to get employed.

Alberto on August 23, 2007 8:05 AM

Jeff - this list is almost four years old. Could we get an updated list, please?

Bruce on August 29, 2007 8:11 AM

Bruce, the types of books I recommend aren't obsolete in 4 years. Or even 10! That's the whole point, as I see it.

(That said, I do try to update to reflect new revisions of the SAME books)

Jeff Atwood on August 29, 2007 10:27 AM

I was looking around your site for other blogs you read/follow, but didn't see one. I really enjoy reading your blog, and I'm looking for other like-minded blogs out there.

Rob on October 3, 2007 8:17 AM

"In Code Complete, steve notes that the average[...]"
Capitalize?

David on October 6, 2007 12:05 PM

I was wondering what do you think about PMBOK Guide?.

Also, I just ordered "The Mythical Man-Month". I'll be getting it (i hope) next week :D

Fausto on October 15, 2007 12:33 PM

I cant agree more about these excellent books =)

The last book that I read and that resist technologies changes is

Ship it! A Practical Guide to Successful Software Projects

http://www.amazon.com/gp/product/0974514047/ref=wl_it_dp/105-2347762-2034037?ie=UTF8coliid=I7JDB55GLE3UDcolid=20HRDZWS0NJ6C

Is from pragmatic press and with simple and useful ideas shows how to survive to *all* the things related to the development of a software project

Best Regards
Marcos

Marcos on October 18, 2007 9:31 AM

[quote=Jeff]Bruce, the types of books I recommend aren't obsolete in 4 years. Or even 10! That's the whole point, as I see it.

(That said, I do try to update to reflect new revisions of the SAME books)[/quote]

It's nice that you keep the page updated, but the fact is it says "February 02, 2004" in big letters at the top. Not an interesting list of reading. Could you at least strip out the date header and work to make this page look more dynamic? As a sidebar link from codinghorror.com I'd think you'd want some freshness or at least the appearance thereof.

Daniel Pritchett on November 16, 2007 1:45 AM

I recommend two books: "Debugging - The Nine Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems" by David J. Agans, and "Facts and Fallacies of Software Engineering" by Robert L. Glass.

mac on November 28, 2007 2:10 AM

Supprised my favorite "leadership" book isn't on there "Becoming a Technical Leader: An Organic Problem-Solving Approach" - http://www.amazon.com/Becoming-Technical-Leader-Problem-Solving-Approach/dp/0932633021/ref=pd_bbs_sr_1?ie=UTF8s=booksqid=1196606785sr=8-1

izaak alpert on December 2, 2007 6:47 AM

Jeff,
Your link "See for yourself" in the Mastering Regular Expressions is broken. Can you provide some other example?

Michael Penrow on December 3, 2007 6:39 AM

Controversial one, this...

If every developer read Fabian Pascal's "Practical Issues in Database Management" there would be a heckuva lot less naff database designs to fix in the world...

http://www.amazon.com/Practical-Issues-Database-Management-Practitioner/dp/0201485559/

Mattster on December 4, 2007 2:00 AM

The article linked from the text next to Mastering Regular Expressions has disappeared.

Also, you seem to have written Perl as "PERL".

Josh on December 18, 2007 11:29 AM

I'm also curious why the author hasn't mentioned Design Patterns. It seems to be on the shelf of every company I've ever worked for.

Steve on January 16, 2008 7:38 AM

Cools, tnx, interesting to read

inc on January 21, 2008 10:50 AM

With regard to Programming Perls, there is a good article about graphical output (it may be inthe first book). The book discusses a graph made in the 1700's or early 1800's regarding Napolean's march and retreat to and from Russia. The article discusses how to make graphical representation tell the whole story as quickly as possible.
Also there ae some articles about defining problems and applying common sense soutions to *well defined* problems. Too often we (as programmers) do not get a full spec and our too generic soltions require both us and the system to do way too much work.
Lastly there is a chapter in Programming Perls (1) which is just small sayings (most which would fit on a bumpersticker). That chapter is a quick read, but will stay with the reader for a long time.

"If the code and the comment don't agree, then both aer wrong"

Fredrick on January 24, 2008 12:34 PM

Many thanks for the "Code Complete 2" tip. Just arrived from Amazon here in Rio, and it's the best I've read until today about software contruction. Simple, direct and resourceful.

Jos Machado on January 28, 2008 7:41 AM

Thanks for the rec list. I just saw it now. Maybe you should plug it on your site more often?

Any tips on getting companies to buy these books for their programmers? You'd think they would, since it's in their best interest and all.

Cyde Weys on February 15, 2008 3:14 AM

Perhaps I am showing my age, but I would suggest three books that are currently (unfortunately) out-of-print: P. J. Plauger's "Programming on Purpose" books.

http://www.amazon.com/Programming-Purpose-Essays-Design/dp/0137213743

http://www.amazon.com/Programming-Purpose-II-Essays-Software/dp/0133281051

http://www.amazon.com/Programming-Purpose-III-Software-Technology/dp/0133281132

All three are books that I enjoy rereading periodically. Granted, some of the articles are a bit dated, such as the discussion of online e-check companies, or DOS memory management, but most of the articles have more than stood the test of time, in my not at all humble opinion. :-)

Timothy Knox on March 25, 2008 12:02 PM

There's version 2.0 for GUI Bloopers.
http://www.amazon.com/GUI-Bloopers-2-0-Interactive-Technologies/dp/0123706432/
Excellent, easy to read. Can't compare it with the first book though, since I don't have it.

Jarno on April 29, 2008 5:22 AM

genial !!, no tienes libros en espao, quien pueda tener libros en espaol de esta calaa.

Saludos desde Chile

ctraos on April 29, 2008 8:23 AM

These are rather simple non-technical books. A developer should also read a lot of techinical in depth books.

I for example recommand a book on software patterns, for example the book from Gamma:

Design Patterns: Elements of Reusable Object-Oriented Software

Tjerk on April 29, 2008 9:09 AM

Tufte has a fourth book now, _Beautiful Evidence_.

If you attend one of his seminars, you get all four (instant completist/masochist!) though it looks like the seminar has not changed much in at least four years.

Dave on April 30, 2008 1:44 PM

So many new browser are there in the market,and free.You should note that Netscape 8 (beta)is released.So is a new Opera soon.IE still has the activex problem and the browser hijack senario leading to the compromise of your whole pc.There are a number of these hijack that are tricky.Security wise its a pain,a lot of older machine use IE 5./5.5 that are not updated etc,just waiting for remote code exploits and buffer overflows.Just by releasing a AntiSpy ware tool it doesnt mean that things are going to change.They need to repostion themself.
[url=http://www.liposaksin.com ]liposaksin[/url] [url=http://www.emlak-ara.org ]emlakc#305;[/url] [url=http://www.botoks.name.tr ]botoks[/url]

sa ekimi on May 30, 2008 2:03 AM

I don't think it matters what date it says at the top of the page. I found it, and I don't read blogs very often. Jeff's blog has ~102,000 readers, so he's doing something right.

Thanks for the recommendations Jeff, and to the other commenters. I wish I knew of some books to recommend.

Jay on June 6, 2008 2:43 AM

How about Tog on Interface - Bruce Tognazzini. This is old now - and completely Apple-centric - but when it comes to understanding UI design principles, it's still one of the books that influenced me the most. His discussion of how in the old days Apple tried to work out how to get users to figure out during installation of a software package whether they had a colour or monochrome screen is a classic example of how some problems are just about intractably difficult, and how users will make rational decisions (to them) that are absolutely NOT what developers anticipated. And his 'hotel lobby' cartoon is absolutely classic!. A great book if you can find a copy.


AJ on June 6, 2008 5:15 AM

I read you "have a particular interest in the human side of software development" so I think you may like to read Human Aspects of Software Engineering from SEI: http://books.google.com/books?id=HGSGY2kbA4MC

kmilo on June 23, 2008 2:56 AM

Do mine eyes deceive me, or did you remove The Pragmatic Programmer from this list?

I'm a little stunned if so, as I'm finding the authors' straightforward advice and bite-size chunks far more palatable and thought-provoking than Code Complete. I really do love CC, but at this early stage in my career, Pragmatic Programmer is a godsend.

Either way, loving the list. Thinking of starting a book club with many of these titles at my office. Thanks,
-Scott

Scott Parker on June 29, 2008 7:50 AM

Nevermind, my eyes *do* deceive me. It's been a long day...

Scott Parker on June 29, 2008 7:51 AM

These are rather simple non-technical books. A developer should also read a lot of techinical in depth books.
http://novhouse.ru/
I for example recommand a book on software patterns, for example the book from Gamma:

Design Patterns: Elements of Reusable Object-Oriented Software

Suzanne on July 2, 2008 12:23 PM

I'm looking for a book that will bridge the gap between the programming presented in universities and most programming books and the programming needed for the real world (specifically the Windows (and more specifically, the .NET) world). What I'm finding with most books is programs that are a class or two in size that get and present everything in a console window. What I need is something that explains how to program software that will use dozens of resources, use a GUI, run in a .NET environment, and need an installer. Is there any such book out there?

David A. Lessnau on July 6, 2008 12:14 PM

Wow so many to read, how can I read faster?? I want to suck inside my brain all those titles all of you are posting and posting, and I really have a hurge for knowledge!! I want to digest them all... now seriously any suggestion about reading faster let me know... I'll be back looking for answears!!

Vudrok on July 17, 2008 1:01 PM

I read now Beginning programming for Dummies by Wallace Wang.
Cool book, really! :).
And you know, I think you can write very cool books for developers and studens yourself (with such sence of humor:))

Maria on July 25, 2008 10:41 AM

hey

Really nice tips!

will try to keep it in my mind

thanks!

Software Development on August 5, 2008 11:23 AM

Heads up: you misspelled Jakob Nielsen.

vts on August 6, 2008 4:02 AM

Just thought I'd give you a heads up, Mastering Regular Expressions is now in its third edition (actually, as of August 2006!). I think the copy I have is the 2nd edition, but seeing the third edition on a recent trip to BN made me consider buying it again. According to Amazon an extra ~50 pages have been added in the new edition. According to Oreilly's site, the updates appear to be primarily bringing the information up to date with changes in the various languages covered, as well as more information on the use of RegEx in PHP and Java.

As someone who only recently discovered RegEx in Javascript and .Net, I'm simply amazed that I did not start using this earlier (especially since I've had the book for quite a while).

Vizeroth on August 25, 2008 12:51 PM

Hey Jeff,
Just wanted to thank you for recommending Code Complete, I'm about half way, and I have found a lot of ways of improving my code, maybe I'm a bad programmer, but at least I'm getting better.

Anyway, keep up the great job!

Fausto Ruvalcaba on August 25, 2008 1:17 PM

Nice list.

Minil on September 5, 2008 3:52 AM

Nice List

Minil on September 5, 2008 4:13 AM

I've just read the Mythical Man month, and its surprising how much we still keeping making the same mistakes.

daniel on September 10, 2008 2:12 AM

Thx for this list,
actually i pick up every title(even in comments)and I plan to build my whole life computer librairy with this titles, I guess this will help me;
so i thank you for all the stuuf I'll learn and especially gor mistakes I won't do!

As I'm majoring in Information System, we recommanded me
Management Information Systems, what's do you think about it? is it worth?

Peace from Algiers.

6smail on September 27, 2008 11:07 AM

There is an update to GUI Bloopers - GUI Bloopers 2.0.

Amazon link:

http://www.amazon.com/GUI-Bloopers-2-0-Interactive-Technologies/dp/0123706432/ref=sr_1_3?ie=UTF8s=booksqid=1228804792sr=1-3

Schmuli Raskin on December 8, 2008 10:57 AM

Can someone donate these books to my college? All they have is Programming in Java from 2001 or Programming in VB6, you get the idea. I can't get access to any good non technical book and I can't afford those myself (exchange rate is a bitch).

Hoffmann on December 21, 2008 6:18 AM

www.bizbiz24.eu

bizuteria on December 30, 2008 8:12 AM

http://bizbiz24.eu

bizuteria on December 30, 2008 8:13 AM

Many thanks for the Code Complete 2 tip. Just arrived from Amazon here in Rio, and it's the best I've read until today about software contruction. Simple, direct and resourceful.
http://aliansmotors.ru/

Olef on January 9, 2009 5:37 AM

Surprized to find no mention of Use Cases... therefore, consider:

Visual Modeling Technique by Tkach, Fang, So. Which I discovered while consulting at Lexis-Nexis and exploring IBM's smallTalk.

Of course today for me (the last 10+ years), everything is SQL:

The Practical SQL Handbook by Bowman, Emerson Darnovsky.

-ski

P.S. Thanks for the list AND the comments. Most interesting read.

Jeff 'SKI' Kinsey on January 10, 2009 6:00 AM

And here is my list of recently published web development related books:

http://www.riaguy.com/books/

Check it out.

Koistya `Navin on January 10, 2009 6:11 AM

how about including Behind Closed Doors: The secrets of great software managment, give project managers also some chance on this blog :)

Abhishek on January 24, 2009 2:25 AM

I've just read the Mythical Man month, and its surprising how much we still keeping making the same mistakes.
http://novhouse.ru/

Olen on January 27, 2009 9:47 AM

Hi,

I am a student, and this book: Pragmatic Thinking and Learning: Refactor Your Wetware (http://www.amazon.com/Pragmatic-Thinking-Learning-Refactor-Programmers/dp/1934356050) is worth reading if you had seen this book?

It claims You’ll learn new tricks and tips to learn more, faster, and retain more of what you learn., is this book useful?

Because I don't know how to clarify a book is good / worth to read.

And is that any tips / standard to define a book? Since buy a inappopriate book is expensive.

Sorry for bad English.

Thanks,
Roger

RogerKeen on January 31, 2009 8:27 AM

I think you missed Windows via C/C++ and Windows Internals

Serkan DIRIARIN on February 2, 2009 12:36 PM

I have read about half the books in your list and I learned a lot from them.

However I read the books after making the mistakes that people who don't read these sort of books make.

I think I faced the same problem as most people trying to learn effective software construction. There are a lot of books with a lot of lessons for programmers, too many to learn at once, and too many to choose from when one starts a new type of project.

Peter Williams on February 14, 2009 12:13 PM

More comments»

The comments to this entry are closed.