A Rant A Day – The New Classics of Computer Science

The New Classics of Computer Science

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

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.

* The New Turing Omnibus

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.

* Introduction to Algorithms

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 O(\alpha(n)) unions (where \alpha(n)=A^{-1}(n,n) and A 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.

* Algebra and Geometry

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 Road to Reality

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 😉