| |
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! |
|
|
|
| |
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. |
|
|
|
| |
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. 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! |
|
|
|
| |
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. |
|
|
|
| |
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. |
|
|
|
| |
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. |
|
|
|
| |
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. |
|
|
|
| |
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! |
|
|
|
| |
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. |
|
|
|
| |
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". |
|
|
|
| |
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 : 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. |
|
|
|
| |
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.
|
|
|
|
| |
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. |
Hi,
You often mention books and blogs in your posts, both seeming of equivalent importance to the content of the blog. And there's the present Recommended Reading post that sums up the list of recommended book reading. But why not an equivalent recommended blog reading list?
Jerome on March 10, 2009 10:09 AMAll 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.
joe snyder on March 15, 2009 3:35 AMactually 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!
http://landegere.ru
Is there any book written on How to design Framework's in C and C++ ??
Bufferoverflow on May 9, 2009 2:36 AMI'm very happy that there isn't one of those "First!" comments in (effectively) the first blog post.
Why do people do that? There isn't even a "First post!" entry in wikipedia. http://en.wikipedia.org/wiki/First
Back to the point, I can recommend Dilbert to aid sanity in an office envirnonment to the list. Not exactly programming material, but the cruel reality of a career in programming isn't what I expected either.
http://www.dilbert.com/
nice post, I god some of these books, some of them I already had. Thanks.
cpp on June 9, 2009 8:03 AMConsidering your rather gushing review(http://www.codinghorror.com/blog/archives/001274.html) of the "Regular Expressions Cookbook" will we be seeing an entry(and/or replacement) in this list for a book on RegExes?
Amit on June 14, 2009 9:46 AMGreat list! I considered myself an average software developer(I am not one now - I'm a SAHM), and I have read a couple of books from the list. I do plan to read some more. Your review of Code complete makes me feel good - that I am a good programmer. I liked the book too.
Thanks.
WOW, this'll keep me busy for years. I've been subscribing to your RSS feed for months, but somehow I missed this great list.
danacummings07@gmail.com
After 5 years, i think a lot of things changed and you have a new updated list of books to recommend, can you share with us in a new post?
amr elgarhy on August 17, 2009 1:46 PMHi Jeff,
Nice list of books! Would you pretty please note that PERL is not an acronym, and never written that way? The language is "Perl", the comnpiler is "perl".
Ta muchly,
Jess
Read many of the books on this list.
I highly recommend Clean Code: A Handbook of Agile Software Craftmanship by Robert C. Martin.
It reminded me a bit of Fowler's Refactoring, but with more than just refactoring in mind.
If I managed in a Java Shop I would give this out to all of the developers post-haste.
Jerry TheCat on February 26, 2010 3:33 PMHi Jeff,
Excellent Programmer's Fundamental Book List.
Can you tell us about your habits in reading books.
Do you highlight? and how?
Do you classify? and how?
Will iPad change your reading habits?
... etc.
Thanks,
Ahmed.
This is a great resource. Have any books come out in the last six years that you think would be worth adding to this list?
Pete on August 15, 2010 3:23 PMThanks for the nice list. I really should check out that Code Complete 2 since everyone is praising it. Currently I'm reading The Design of Everyday Thigs.
Any opinions on Clean Code or Growing Object-Oriented Software, Guided by Tests? Maybe they are a bit more Java-oriented, but at least Clean Code was useful for my kind of young developer.
Arttu - on August 19, 2010 3:52 AM
Nice List , Thanks !!
Abdul Mohsin
www.abdul.co.in
Informative post! A couple of other books in an "excellent supplemental" category would be:
"Interface Oriented Design" by Ken Pugh. In some ways this is likely well covered by other OOA/D books - but as Interfaces are a major differentiating factor for Java it's well worth a read to improve understanding of various trade-offs when using them.
"Implementation Patterns" by Kent Beck. Features some of the better discussion on the actual process of writing code that is readable. Helps us to write cleaner code - and understand the trade-offs to using certain phrases or constructs in our codes. Today software developers are surffing more internet resources to develop their technical expertise.
Hello there,
I'm still fairly new to coding - only a couple of years in, and from an art and design background. Looking forward to tackling some of these books. Thanks for the list, Amazon says thank you as well.
Rob
Robdunne on November 11, 2010 2:01 PMAny current update on this
www.loveforboth.com
I run a Software Development company and have found your books a great help!
Keep up the good work!
Andrew Birt
Liquid Modules - Software Development
The comments to this entry are closed.
|
|
Traffic Stats |