Recommended Technical Books
- Cormen, Leiserson, Rivest. Introduction to Algorithms
- General overview of all sorts of useful algorithms and data
structures. There is also a newer edition with an additional
author. I do not have the newer one, but presumably it is
similar. I prefer this over Knuth, but remember I wasn't a math
- Hillier and Lieberman. Introduction to Operations Research
- Excellent introductory text on linear and integer
programming, network flow, etc. Elementary algorithms are
presented in detail, but state-of-the-art algorithms are just
sketches with references, so this book is more of a starting
point than a destination. This book seems to go through editions
at a ridiculous rate with few real changes (perhaps to bilk poor
college students); I have the 6th. Newer ones than mine have
added some material on game theory which looks too cursory to be
useful, but also a section on metaheuristics which may be worthwhile.
I would buy an older edition used for reasons of price.
- Bertsimas and Tsitsiklis. Introduction to Linear Programming
- This is perhaps the canonical book on linear programming. By
focusing on a narrower area (linear programming only), they are
able to present more depth than Hillier and Lieberman. Interior
point methods are covered in enough depth to implement and they
do discuss integer programming. Not necessarily the most
accessible book, however.
- Press, Teukolsky, Vetterling, Flannery. Numerical Recipes in C
- A reference on numerical algorithms of all kinds. Also
available in a Fortran edition, and possibly others these days
(The Fortran version is probably the one to get &emdash; it is
said the authors can write Fortran in any language). Sadly, the
authors and publisher have taken the unfortunate position of
trying to charge royalties for their published implementation of
the algorithms, which makes this otherwise good book much less
valuable than it might have been. See also this
criticism of the quality of the algorithms. If you are aware of a
better book on numerical algorithms, please let me know.
- Schneier. Applied Cryptography
- Obviously more of a niche application, but very good if you're
interested. I thought it was a great read and I have no plans to
ever implement any of it myself.
- Gamma, Helm, Johnson, Vlissides. Design Patterns
- Graham has
a legitimate point that perhaps the design patterns represent
limitations of the underlying language, but it's still a fairly
- Programming Languages
- Kernighan and Ritchie. The C Programming Language,
2nd Ed (ANSI version)
- This book is short. It's easy to read. It's the canonical
reference for C. It's also remarkably expensive for its length,
sadly (even on the used market), and the original authors do not
appear to intend to ever update it again to include newer features
from C90, so I'm not sure what to recommend in that regard.
- van der Linden. Expert C Programming (Deep C Secrets)
- While not exactly essential, this book is light and easy to
read while still containing a good bit of useful information.
It's about half on C and half on the OS, linkers, memory
management, and other topics rarely covered in formal classes and
of interest to programmers in all languages. Plus, it has a
picture of a coelacanth!
- Stroustrup. The C++ Programming Language
This is the canonical book on C++. Get either the 3rd edition or
the "special edition" (just a softcover reprinting of the above).
- Josuttis. The C++ Standard Library
- Josuttis wrote the STL reference which should have been a part
of Stroustrup's book but isn't. Think of these two as two volumes
of a set. When I was a MIT, I got everybody who was working in
C++ a copy of both of these.
- Hetland. Beginning Python
- Confusingly, this is the second edition of his Practical
Python. Even more confusingly, there is another book of the
same name which is not as good. However, the correct book is
good, and is suitable for people with little or no programming
- Pilgrim. Dive Into Python
- The short course for experienced programmers. You probably
want one of either this or Hetland's book, but I doubt you want
- Martelli. Python in a Nutshell
These reference books can be questionable in that they often
duplicate the online documentation. Howver, in this case,
I believe Alex Martelli has some significant insights here which
go beyond what's in pydoc.
- Goldberg and Robson. Smalltalk 80
- Unlike some more popular languages, the online information
available on Smalltalk is somewhat weak, making the book even more
- Metcalf and Reid. Fortran 90 Explained
- I don't do a lot of Fortran work these days, but when I was
trying to refresh my memory, I found this book easy to understand
and comprehensive. I believe they now have an updated Fortran 95
- All my Perl books are from around 2000, when I was learning
Perl. They were good at the time, but they're sufficiently out of
date that I can't recommend the editions I have, and I don't want
to recommend the newer editions of the same without seeing them.
Thus, I shall refrain from making any Perl recommendations at this
- Platform Specific
- Stevens. Advanced Programming in the Unix Environment
- Sometimes abbreviated "APUE", this is the book on
Unix systems programming. Unfortunately, W. R. Stevens passed
away a few years ago. There is now a new edition revised by
another author; I do not know anything about it.
- Stevens. Unix Network Programming
- This is the book I learned to write servers from. There's a
second volume on IPC which I couldn't afford. Once again, I have
the pure-Stevens version and cannot comment on the recent
- Rubini. Linux Device Drivers
- I don't do a lot of kernel work, but this book taught me how
to do as much as I've ever done. I think it's on the third
edition now, and unlike some books which don't change
substantively, you probably ought to get the most recent version
of this one.
- Books I'm Looking For
- I have some books, but I'm not sure any of them are good
enough that I can really recommend them.
- I wish I had a good book on statistics. Anything you can