Atlas · Details
Ten Great Books
AI Notes
November 2004, with the unguarded enthusiasm of a working programmer who has just begun realising his own profession has a canon. The essay opens with a long, fond detour on how completely O'Reilly has captured the notion of "technical book," then lands on Steve trying to identify the books that have actually changed how he writes code. The Pragmatic Programmer with the cold-sweat observation that some readers will never accept it. Refactoring with the famous "pants down around your ankles" line — Steve had been senior for years before reading it, polled twenty colleagues afterwards, and found one. Design Patterns, gently mocked (the Interpreter pattern as an in-joke). Doug Lea on concurrency, Friedl on regex, Skiena, K&R, The Little Schemer, the Dragon Book. The tenth slot is the wildcard: the WikiWikiWeb, treated as a book because that's what Steve uses it as. The throwaway closing claim — that compilers and operating systems should both be required for a CS degree — promises a future essay and turns out to underpin several.
Most of these books are still standard. What dates the piece, and makes it worth keeping, is the snapshot of a senior engineer in 2004 working out, in public, which authors taught him to write code, and what was missing from the syllabus he was handed.
Related listings
-
2005
Ten Challenges
The deliberate sequel two months later — ten books Steve is in the middle of, not the ten he has finished. The two lists were always meant to be read as a pair.
-
2005
Transformation
The follow-on essay about going back and actually reading Fowler's Refactoring, not just skimming it. Where this list says "you should read these," Transformation says "and here is what re-reading looks like in practice."
-
2006
Math For Programmers
Two years later, the Blogspot-era essay applies the same recommend-and-justify shape to the math curriculum the working programmer was never given. Same instinct, different shelf.
From the peanut gallery
Read the rest of the thread · 5 more
-
I highly recommend _Expert C Programming_ by Peter van der Linden. It addresses a lot of esoteric issues related to C, like the difference between pointers and arrays and how to parse declarations like:
Despite tackling rather dry subjects, the book is extremely readable. It is a delightful blend of substance, anecdotes, folklore, and programming challenges. I actually ought to re-read this book; I whizzed through it too fast the first time, and I'm sure I could get a lot from a second reading.
I really ought to put a category on my weekly timecard for "Reading Steve's blog." How do you get the time to write all this stuff?
-
Sorry Andrew -- yeah, 'approximating' is probably a better word. You *can* solve (some) NP-complete problems, of course. But I meant "solving" in the more general sense of "figuring something out so I can get my business problem solved". Anyway, fair point.
I never really cared for _SICP_. There are plenty of other introductory programming books that use Scheme. This one, for example, but others as well. But I suppose I could give SICP another chance. [Note, 12/13/2004 -- I went ahead and gave it another chance, and I was way wrong. It's awesome. I'm putting it into my Ten Favorites list that I'm going to publish soon.]
Knuth is awesome. He's a great writer, very warm and funny. And his books are (oddly enough) always beautifully typeset. I just haven't finished any of his books yet. I'm about halfway through about five of them at the moment.
Josh: I type fast. :) And I have a lot of notes lying around. I like to type while I think. (I even have a partially sketched-out essay about how useful that is.)
-
Stray thoughts on the publishers:
My own experience with O'Reilly has been a long ways from consistent, but then again I was one of those guys who bought every single O'Reilly book he could find for a good couple of years. There's bound to be some stinkers in there somewhere. My O'Reilly books still tend to be pulled down from the shelf most frequently.
Sams is making a bold attempt to put the whole "Teach Yorself Cp+ in twenty-1 Days" titles and typographical infamy behind them. I've been pleasantly surprised by a lot of their newer books - the ones with the purple covers. Still not great, but better than bad.
Addison-Wesley publishes the books that I have on the shelf to impress folks. The ones that I've been able to afford are impressively dense and heavily laden with tons of valuable insight. I read and reread Stroustrup's C++ Programming Language (2nd edition, still haven't made my way to the 3rd), and got lots of knowledge every time, occasionally sprinkled with a mild headache.
Oh, and I'm not sure if you noticed, but four of your top ten books are published by Addison-Wesley, and only one O'Reilly book is on there. Maybe it's just my interpretation of chance numbers, but the interpretation matches my own thoughts: Addison-Wesley publishes the best, but O'Reilly publishes the ones we actually use.
Actually, I may have to take that back. The book closest to my keyboard right now is "Effective Perl Programming", published by Addison-Wesley.
Oh, and there are a couple of decent publishers who should get mention. Manning has published not only "Object-Oriented Perl" by the fiendishly clever Damien Conway, but they have also released the only Perl book I've ever purchased for other people interested in the language: "Elements of Programming in Perl". Twice. The book that I'm never going to write about Ruby would be modelled closely after that one. Man, I'd love to see a second edition of Elements.
And New Riders. Mostly bland run-of-the-mill stuff comes from their presses, but they occasionally release a book that makes you feel like you needn't bother buying anything else on the subject. Right now I'm thinking of David Beazley's "Python Essential Reference", but there were others.
Dang. A reply that may as well have been a blog post on its own. Ah well, I guess the coffee is good today.
-
Practical Software Requirements: A Manual of Content and Style
-
This book is a very good overview and introduction to security and cryptography. It's geared towards engineers rather then cryptologists which makes it much more useful to and SDE. It can be a bit of a difficult read considering its nearly 800 pages on what most people consider a dry topic, but the author writes and a very readable and entertaining style so it's not too bad. Considering that cryptology and security is something that every SDE who considers himself an engineer should be more proficient with, it's definitely worth the effort required to read it.
Language Processors For Little Languages.
This is another very good introductory book. It's geared towards the development of Domain Specific Languages. This book is also a bit less intimidating then the venerable Dragon Book.
I wouldn't put either of these books into the top ten. However, I do consider both of these or their equivalents required reading for any SDE worth his salt. Of course, there are quite a few other areas an SDE needs to be grounded. I pick out these two simply because they are two areas and SDE should be familiar with and, generally, are not.
I think you mean /approximating/ the answer to NP-hard problems :)
Didn't like Knuth or _Structure and Interpretation of Computer Programs_?
Skiena is a lot easier and more useful day-to-day than Knuth, I admit.
— Andrew W · November 19, 2004 02:28 AM
Joel: UIUC rocks! No wonder we get so many great people from UIUC.
Anyone else know of CS programs that require both Compilers and OS?
— Steve Yegge · November 20, 2004 12:14 AM
[1] I work at Google now; I hope they realize I was being facetious.
"I'm going to argue in a yet-to-be-published essay that Compilers and Operating Systems are the most important courses in an undergraduate CS degree, and that both of them should be required for graduation. Unfortunately I don't know of any CS degrees that require them both; usually they let you get by with one or the other (or neither)."
— Joel H · November 19, 2004 01:22 AM