Hello. Welcome to the second installment of A Rant a Day.
We all know about the classic texts of computer science (although, we may be a bit behind on our reading). We’ve heard a thousand times how important Knuth’s Art of Computer Programming, Abelson and Sussman’s Structure and Interpretation of Computer Programming, and the Gang of Four’s book on Design Patterns are.
But, I think these are sometime overemphasized - often to the neglect of other great books that have been written in the last few decades. Recently, I moved from Chicago to Cambridge and could only bring a few dozen books with me. I was forced to evaluate which are truly timeless classics, and which are just tutorials.
Now, don’t get me wrong - tutorials are great and do serve their purpose. I often reference Programming Perl or Practical Common Lisp. But they don’t change the way you think - they don’t have an impact which spans disciplines and languages and technologies.
When I sat down and thought about it, many of the books that have had the greatest impact on me as a programmer (and as a thinker in general) aren’t even Computer Science books. These books below often transcend their stated domain and impart a new way of looking at all problems.
- Godel, Escher, Bach: An Eternal Golden Braid
- The New Turing Omnibus
- Introduction to Algorithms
- Algebra and Geometry
- The Road to Reality
GEB is ostensibly about the hidden threads that hold together Mathematics, Art, and Music. But Hofstadter goes so much deeper than that. Through a series of Socratic Dialogues, the nature of thought and computation are revealed to us. And, along the way, this book touches on recursion, formal systems, lambda calculus, undecidability, complexity theory, and far more. If you only read one book on this list, it should be this one.
This book is extraordinary for the sheer breadth of topics it covers. I’ve noticed that many programmers stagnate and grow complacent with their existing tool set. They master a few tricks, and then just plateau - whenever any problem arises, they reach for a technique from their limited repertoire and think it’s the best solution. As the old cliche goes, when the only tool you have is a hammer, every problem looks like a nail.
The new Turing Omnibus opens your eyes to new worlds. Everything from genetic algorithms, to pushdown automata, to computer vision techniques are fair game. This book doesn’t go into enough depth in any topic to actually teach you how to do anything - but it will teach what is possible, and will help you recognize the best tool for the job. You won’t understand the details of simulated annealing or the simplex algorithm, but when you encounter a new problem you will know the right approach to take, and will having a jumping off point for your research.
This, to me, is the new Art of Computer Programming. Although it is nice to learn efficient arithmetic algorithms using assembly on a MIX machine, it really isn’t what I’d like to focus on. I’d rather learn, for example, about an extremely clever disjoint set data structure which provides
unions (where
and
is the Ackermann function) in high level pseudo-code. This book showed me a lot of novel techniques for proving an algorithm’s runtime and it has become my bible for elementary algorithms.
First, this isn’t your high school algebra/geometry book (well, I suppose you could have done this in high school, but I didn’t at least). It is focused, primarily, on abstract algebra, linear algebra, and non-euclidean geometry. By the time I read this book, I had already taken courses in all those topics individually. But this book tied up a lot of loose ends and showed me many interconnections between seemingly disparate fields that I hadn’t picked up on on my own. It may be a little too intense for a first foray into higher math thought (at least I would have struggled a lot more, if I wasn’t familiar with so many of the topics going in), but it’s definitely a worthwhile read.
The first half of this book is, hands down, the most incredible math tutorial I’ve ever seen. In the span of a few hundred pages, the author takes a reader up from elementary algebra and arithmetic all the way through calculus and large swathes of analysis, abstract algebra, number theory, geometry, and basically the better part of an undergraduate math education. After that, Penrose uses your newly minted math skills to teach physics from simple Newtonian mechanics, up through quantum mechanics and relativity, and even touching on some cutting edge work currently taking place on a “theory of everything.” Because of the tremendous amount of ground this book covers, it is extremely difficult to get through. Over the course of about a year, I often found myself giving up on exercises, and just glossing over some of the more intense sections. Reading this book can best be described as attempting to drink from a firehose: if even 20% of what Penrose throws at you sticks, you’ll be a better man for it. The math skills that this book imparts are alone worth the price of admission. Throw in the newfound understanding of all things physical, and this book is bargain for what you put in.
Those are a few of my favorite books, that are off the beaten track. If you have any to add, please leave a note. I’m already behind on my reading, but nothing like a bit of guilt to motivate me ![]()
Comments 19
Hadn’t heard of The New Turing Omnibus. Thanks for the recommendation!
Posted 07 Sep 2008 at 12:13 am ¶How abt these?
(1) Programming Pearls by Jon Bentley
(2)The Practice of Programming by Kernighan & Pike
(3)Code Complete: A Practical Handbook of Software Construction by Steve McConnell
(4)The Pragmatic Programmer: From Journeyman to Master by Andrew Hunt
(5)The Mythical Man-Month: Essays on Software Engineering, A… by Frederick P. Brooks
Posted 07 Sep 2008 at 2:17 am ¶Knuth’s opus isn’t about MIX, it’s about algorithms. The biggest problem with Knuth’s work is it’s too difficult for most of today’s readers, who aren’t computer scientists or mathematicians by any stretch of the imagination. It’s like the difference between chefs and short order cooks; for the latter, if they read at all, recipe books are best.
Posted 07 Sep 2008 at 4:15 am ¶Hey, that’s a very nice list. 5 different books. Enlightening.
Posted 07 Sep 2008 at 4:38 am ¶Thanks Bob - I don’t think anyone ever said that TAOCP was about MIX machines though.
The point I was trying to get across was that a lot of the algorithms Knuth covers (arithmetic, random numbers, etc) aren’t of much interest to me. Of course, his analysis was original at the time - but now everyone has copied him and uses similar techniques.
My point was simply that I would rather read more about, e.g., graph algorithms than multiplication algorithms, because I’m more likely to encounter the former.
And, for the record, I have read the first volume of taocp (and have started slowly making my way through the second). I appreciate what Knuth has done, but I firmly believe that the algorithms book I recommend is nearly as rigorous as Knuth, but just focuses on more modern concerns.
Posted 07 Sep 2008 at 4:40 am ¶I agree with fellow commentor Pavan, the Mythical Man-Month by Brooks, I just read it recently and it is still very relevant today, with many people re-writing it without even knowing it.
Posted 07 Sep 2008 at 5:25 am ¶Also a few essays by Richard Feynman, his general writing about science and how it should be conducted is good for any scientist. Cant remember their exact name, will have to go look them up and re-read them.
Thanks. I love the Feynman autobiography (”Surely you’re joking Mr. Feynman”).
I’ve heard great things about the Mythical Man Month, and these comments have inspired me to bump it up to the top of my queue.
Posted 07 Sep 2008 at 6:08 am ¶Pavan appears to be confusing computer science with software engineering, though.
Posted 07 Sep 2008 at 7:49 am ¶Someone beat me to recommend Feynman; I was going to recommend his “Lectures”, though. They aren’t computer science on the surface, but the brain-warp they catalyze is invaluable to anyone who debugs complex systems, or analyzes algorithms, or cries with wonder at the awesomeness of it all.
Compiler theory, and the application of that theory — writing a compiler, in short — is another ROM-changing experience. To that end, I’d recco the Dragon Book, or maybe the set of tutorials by Jack Crenshaw. This will only help if you actually *write* a compiler, however slow and pathetic.
Speaking of brain-warps: Neal Stephenson’s Cryptonomicon, Asimov’s stories about the robot psychologist (I forget her name), and the ones about two debugger guys (again, Google around, I’ve forgotten their names) are way up high on my list
Posted 07 Sep 2008 at 8:15 am ¶Communicating Sequential Processes by C.A.R Hoare
Posted 07 Sep 2008 at 8:25 am ¶though it seems to be out of print?
would include Extreme Programming Explained by Kent Beck and Design Patterns (by the Gang of Four)
Posted 07 Sep 2008 at 3:54 pm ¶> ..I often found myself giving up on exercises,
>and just glossing over some of the more
>intense sections. Reading this book can best
>be described as attempting to drink from a
>firehose..
I’m glad I’m not the only one!
Posted 07 Sep 2008 at 5:29 pm ¶Good post. But the name of Abelson’s book is The Structure and Interpretation of Computer Programs.
Posted 07 Sep 2008 at 5:37 pm ¶Fantastic list. I had read all but _The New Turing Omnibus_, and just ordered it now at your suggestion.
May I also recommend Scott’s _Programming Language Pragmatics, Second Edition_. (http://www.amazon.com/Programming-Language-Pragmatics-Second-Michael/dp/0126339511/) As fine a book as there is covering compiler and language design at a high, but reasonably detailed, level.
Posted 07 Sep 2008 at 6:45 pm ¶I don’t know if it counts as a ‘new’ classic, but Andrew Tanenbaum’s “Computer Networks” should definitely be on this list.
Posted 08 Sep 2008 at 3:26 am ¶C.A.R. Hoare’s CSP book is available at http://www.usingcsp.com/
Posted 08 Sep 2008 at 9:20 am ¶I would also recommend Charles Petzold’s Code as a good introduction to how computers work at a low level. It’s perfect for incoming CS freshmen, though if you have a CS degree or a couple years of work experience, you probably won’t learn many new things.
The book is a sort of clean room introduction to how computing machines work, starting with the concept of codes, moving through binary logic, and then to how basic pieces of computer hardware make use of these concepts. Definitely recommended for high school students or CS freshmen, or the casual learner.
Posted 08 Sep 2008 at 4:23 pm ¶Turing Omnibus is a wonderful book, although unfortunately I think Dewdney might have gone off the rails a bit in recent years.
If you enjoyed that book, it’s really worth working your way through his Computer Recreations columns in Scientific American (’84-’93). There are a lot of gems there that didn’t make it into the book.
Posted 09 Sep 2008 at 9:21 am ¶Thanks for writing this.
Posted 28 Oct 2008 at 8:32 am ¶Trackbacks & Pingbacks 5
[...] on TED.com ted.com Sun 7 Sep 08 | 18:41 GMT A Rant A Day - The New Classics of Computer Science arantaday.com Sun 7 Sep 08 | 18:41 GMT Step By Step: How To Build an Album Art Wall on the Cheap lifehacker.com [...]
[...] A Rant A Day - The New Classics of Computer Science The New Classics of Computer Science [...]
[...] A Rant A Day - The New Classics of Computer Science Adding a new bookmark to see if the cross-posting to wordpress is gonna work. (tags: programming) [...]
[...] A Rant A Day - The New Classics of Computer Science (tags: programming books) [...]
[...] 21st, 2008 in Links The new classics of computer science is a list of textbooks for the current era of programming. Read [...]
Post a Comment