Algorithms & Data Structures
I’ve found multiple perspectives deepens my understanding of topics. The following books cover roughly the same ground, but have very different approaches, and I’ve gotten different insights from each of them
- Introduction to Algorithms, Cormen, Leiserson, Rivest and Stein. The basics, written clearly and yet with rigor, this book should be the one to start with on most topics. Read it for self-study or as a reference.
- Algorithm Design, Kleinberg and Tardos. A much more detailed look than CLRS, and the systematic exposition is a joy to read. There are a crazy number of exercises as well!
- Algorithms, Dasgupta, Papadimitriou and Vazirani. Much less detailed than the first two, but a very different approach to many topics.
- Algorithms, 4th Ed., Sedgewick and Wayne. Many fewer topics covered, but in a lot more depth. Especially see how to analyze and test implementations. Great exercises and see the associated booksite as well.
And of course, no list of Algorithms books can be complete without
- The Art of Computer Programming, vols. 1-n, Knuth. This is advanced, and not for the faint of heart. Also, the best categorization of sorting algorithms that I’ve seen. And demonstrates the limits of analysis (by which I mean it demonstrates how much analysis you can do!).
More than syntax, programming is about the mindset. Here are a few books that help in this area:
- Programming Pearls, Bentley. Yes, it’s old. Yes, it’s worth every bit.
- Beautiful Code, Oram & Wilson. Bringing art into engineering
- The Pragmatic Programmer: From Journeyman to Master, Hunt & Thomas
- Hackers and Painters: Big Ideas from the Computer Age, Paul Graham
- Turing’s Cathedral: The Origins of the Digital Universe, George Dyson. A bit of history.
- Anything and everything by Simon Singh
- “Surely You’re Joking, Mr. Feynman”, Richard Feynman
- The C++ Programming Language, Stroustrup
- Accelerated C++, Koenig & Moo
- Modern C++ Design, Alexandrescu
There are too many (very) good options, but I’m going to stick with just one:
- Python Data Science Handbook, Jake VanderPlas
- Design Patterns: Elements of Reusable Object-Oriented Software, Gamma, Helm, Johnson, Vlissides
- Head First Design Patterns, Freeman & Robson
- The Hitchhiker’s Guide to the Galaxy, Douglas Adams. Everyone should know the answer to the ultimate question
- The Discworld novels, Terry Pratchett