0% found this document useful (0 votes)
70 views31 pages

Recommended Reading For Developers

Uploaded by

NhuQuynhDo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
70 views31 pages

Recommended Reading For Developers

Uploaded by

NhuQuynhDo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 31

CODING HORROR

programming and human factors

02 Feb 2004

Recommended Reading
for Developers
Limited time offer:
Get 10 free Adobe
This list was last updated in March 2015.
Stock images.
ADS VIA CARBON
Why are updates to my reading list so rare?
Senior Frontend Because computers change a lot in 10 years, but
Developer
people don't.
ShipHero
No office location
REMOTE
To make better software, you need to understand
reactjs javascript how people work, and that is what the books I
recommend tend to focus on.
Senior Frontend
Engineer
XWP
No office location Code Complete 2
$70K - $110K
REMOTE

wordpress

javascript

RESOURCES
About Me
discourse.org
stackexchange.com
Learn Markdown
Recommended Reading

 Subscribe in a reader
 Subscribe via email

Coding Horror has been


continuously published
since 2004

Copyright Je Atwood ©
2021
Logo image © 1993 Steven
C. McConnell
Proudly published with
 Ghost

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 very


website is derived from it – the examples of what not to
do are tagged with the "Coding Horror" icon. 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 rst
book you read, and the rst book you recommend to
your fellow developers.
The Mythical Man-Month

Arguably the only classic book in our eld. 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 nd this tale of a long-
defunct OS, and the long-defunct team that developed
it, startlingly relevant. This twenty- ve 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.

Don't Make Me Think

The single best book on usability I've ever read. The title
says "web usability" but don't be fooled by its faux
speci city. 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.

Er… yeah. Never been in a meeting like that. The


solution to this problem, by the way, is quick and dirty
usability testing. Imagine that: making decisions based
on actual data instead of never ending, last man
standing libuster style religious debates.
Revolutionary!
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 nish 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 o ered 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 eld is one of the few where change is the only


constant, so it's only natural to embrace that change
and try di erent "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 eld.

* According to the book, technically, one-quarter. But I


think it's more than that.

Peopleware
If you've ever seen the performance of an all-star
sports team su er 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 e ectively 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 Peopleware 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.

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 di cult, to be sure, but designing


a door is di cult 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.

About Face: The


Essentials of Interaction
Design
Alan Cooper, father of Visual Basic, godfather of
usability. I've owned a few versions of this book now
(this is version four), and it is the rare book which is
getting better and better as it is revised, and more
authors are added for di erent perspectives.

About Face is full of generally applicable guidelines for


mobile and web. 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 e ects of dialog selections before you make them),
and which have not (stopping the proceedings with
modal idiocy).

It's a fantastically useful book; I've used whole chapters


as guides for projects I worked on.
The Inmates Are Running
the Asylum

This is the book that introduced the world to the


concept of personas: rather than thinking of users as
an abstract, di cult-to-describe, amorphous group of
people, personas instruct us to talk about speci c 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 quali ed 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 veri ably
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
bombastic tone of the book.

* 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!

Programming Pearls
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 ll an empty database with
– a performance estimation technique covered in "Back
of the Envelope".

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.
Designing Web Usability

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

The Visual Display of


Quantitative
Information

Visual Explanations:
Images and Quantities,
Evidence and Narrative
Envisioning Information
Beautiful Evidence
 

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

You don't need to own all four books in the series


unless you're a completist (or a masochist, I suppose),
but the rst two are essential.

Chris Sells has some interesting insight on the Tufte


books based on a Tufte seminar he attended in June
2004.

Regular Expressions
Cookbook

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.

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.

NEXT PREVIOUS

In the beginning, About Me


there was Movable
Type

Written by Je Atwood
Indoor enthusiast. Co-founder of Stack Over ow and
Discourse. Disclaimer: I have no idea what I'm talking
about. Find me here: http://twitter.com/codinghorror

Continue Discussion 37 replies

Len_Holgate Sep '04

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…

codinghorror Sep '04

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
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

amazon.com

Dynamics of Software
Development
Jim McCarthy, Denis Gilbert
4.2 out of 5 stars, $14.95

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…

codinghorror Sep '04

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.

Darrell16 Sep '04

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.
codinghorror Sep '05

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.

SteveS Sep '05

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?

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.

cdj Mar '06

Great list, thanks!

If you’re working in an OO language like Java, the list


should probably include Design Patterns: Elements of
Reusable Object-Oriented Software, although this book
actually predates Java.

And definitely that Fowler book, Refactoring: Improving


the Design of Existing Code. 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.

MalcolmA Mar '06

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)
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/larmancraigkruchten
ph/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”

CraigR Mar '06

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.

pwyll Jun '06

I’d recommend Knuth, ‘The Art of Computer


Programming’ and Abelson and Sussman, ‘The
Structure and Interpretation of Computer Programs’.

DaveR Aug '06

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…

Billkamm Mar '07


Billkamm Mar 07

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.

HarishP Apr '07

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).

Being from a primarily C background, I think Kernighan


and Pike’s “The Practice of Programming” is good as
well.

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

mahadevan May '07

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.

Rob_Hill Jun '07

I’m absolutely amazed that entirely by coincidence this


collection is almost identical to mine! Spooky
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.

Marcos Oct '07

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

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

izaaka Dec '07

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

Jack79 Mar '08

I really suggest “Dreaming in Code”. Amazing read.

http://www.amazon.com/Dreaming-Code-Programmers-
Transcendent-Software/dp/1400082463

TimothyK Mar '08

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
Essays Software/dp/0133281051

amazon.com

Programming on Purpose III:


Essays on Software
Technology
5.0 out of 5 stars,

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.

AJ120 Jun '08

How about Tog on Interface - Bruce Tognazzini at


http://www.asktog.com/

http://www.amazon.com/Tog-Interface-Bruce-
Tognazzini/dp/0201608421

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.

FaustoR Aug '08

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!

Jeff Jan '09


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.

Abhishek Jan '09

how about including Behind Closed Doors: The secrets


of great software managment, give project managers
also some chance on this blog

http://www.amazon.com/Behind-Closed-Doors-
Management-Programmers/dp/0976694026

PeterW Feb '09

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.

joe_snyder Mar '09

All the good ideas about how software should be


developed were first stated beginning over 30 years ago
in three seminal books: The Psychology of Computer
Programming by Gerald Weinberg (1971), The Elements
of Programming Style by Brian Kernighan and P. J.
Plauger (1974), and The Mythical Man-Month by Fred
Brooks (1975, which you’ve already listed).

Just about everything those authors wrote about still


holds true today, and just about every idea on the
subject offered since then was actually previously stated
in their books.

natewest Mar '14

Probably the best systems book I’ve ever read was by a


pediatrician. “Systemantics: The Systems Bible”, by
John Gall.

“The Indispensable Handbook of Systems-behavior,


written specifically for all of us who must daily cope with
the Pitfalls, Foibles, and Failures of the Systems that
make up our Modern World.”

1 reply

Oberheim Jul '15

I just wanted to point out to all the people on the fence to


reading Code Complete since it’s so thick and
cumbersome to read on the commute. I read it on a
Kindle and I really recommend it to others!

ShotgunNinja ▶ natewest Aug '15

It’s funny how much the “Horrible Examples” in that book


remind me of Coding Horrors in Code Complete.

Yamashiro Oct '15

Jeff, can you recommend books for students?


All of those books are a little advanced.

AtKt Oct '15

I think The Clean Coder is the best book Uncle Bob has
ever written, and one of the best books about
programming. It’s worth a read even if you didn’t like
Clean Code. It’s concise, well-written, and the content is
excellent.

amazon.com

The Clean Coder: A Code of


Conduct for Professional
Programmers: Robert C.
Martin: 4708364241379:
Amazon.com: Books
P h d d d id t
Programmers who endure and succeed amidst
swirling uncertainty and nonstop pressure share a
common attribute: They care deeply about the
practice of creating software. They treat it as a
craft. They a ...
$21.94

I also like Zero Bugs and Program Faster, it has things


every programmer should know.

You might also like