Several people recently asked me for resources that helped me while self-studying programming and machine learning so I compiled this list of books then decided to publish it below. I’m always looking for new book recommendations so shoot me an email or message on linkedin if you have one!

The Craft of Programming
-
Code: The Hidden Language of Computer Hardware and Software (goodreads link)
by Charles Petzold
The best easy-to-follow narrative explanation of how computers work from a bottom-up perspective. Circuits, transistors, adders, memory, logic gates, to assembler. the first several chapters may seem too cute, but that helps make the later material approachable to someone without any prior background in circuits. -
Programming: Principles and Practice Using C++ (goodreads link)
by Bjarne Stroustrup
How to write programs in C++ that deal with memory allocation, the horror! You may never need to write C/C++, but remember that Python is in essence an interface to run C/C++ code. Understanding common patterns can save you from ruin. RAII to the rescue. -
The Pragmatic Programmer, 20th Anniversary Edition (goodreads link)
by Andy Hunt, David Thomas
Well-structured notes on reaching the zen state of mastery in programming for real applications. -
The Mythical Man-Month: Essays on Software Engineering (goodreads link)
by Frederick P. Brooks Jr.
A classic on software project management. Why do software projects miss milestones and blow budgets? Why can’t I double the programmers on the project to deliver it twice as fast? Unfortunately writing the program is only ~1/3 of the work and as programmers, we underestimate the equal parts efforts of testing and system integration. -
Code Complete 2 (Best Practices) (goodreads link)
by Steve McConnell
What it says on the tin, encyclopedic content of programming best practices.
Currently reading
- The C Programming Language (goodreads link)
by Brian W. Kernighan, Dennis M. Ritchie
The legendary book from the Bell Labs days of computing that brought the C language to the masses.
Algorithms, Computer Science, and Optimization
-
Introduction to Algorithms (3rd edition, aka CLRS) (goodreads link)
by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein
The standard algorithms book simply referred to as CLRS, remains a surprisingly large component of undergrad CS at top-tier schools. -
Concrete Mathematics: A Foundation for Computer Science (goodreads link)
by Ronald L. Graham, Donald Ervin Knuth, Oren Patashnik
A great introduction to mathematical thinking in the discrete world of computers. The genuine intrigue of the authors and plain language makes this book somewhat unique and perfect for self-study. -
Algorithm Design (goodreads link)
by Jon Kleinberg, Éva Tardos
Skip if you prefer CLRS, but may be a great alternative if you did not like it. Focuses more on designing and proving the correctness of algorithms.
Currently reading
-
Structure and Interpretation of Computer Programs (2nd edition) (goodreads link)
by Harold Abelson, Gerald Jay Sussman, Julie Sussman -
Discrete Mathematics and Its Applications (5th edition) (goodreads link)
by Kenneth H. Rosen -
Discrete and Combinatorial Mathematics (5th edition) (goodreads link)
by Ralph P. Grimaldi
Honourary mentions to The Art of Computer Programming series by Donald E. Knuth, AKA TAOCP which I have heard is a classic worth consideration.
Distributed Systems
-
Designing Data-Intensive Applications (aka DDIA) (goodreads link)
by Martin Kleppmann
The most comprehensive and detailed book on how modern distributed systems work and how their components are implemented. How do databases work? How acan distributed databases be reliable under (most) fault conditions? How can I deal with CAP theorem? What are the tradeoffs of batch vs. stream processing? -
System Design Interview – An Insider’s Guide: Volume 2 (goodreads link)
by Alex Xu, Sahn Lam
Great walkthroughs on how to design scalable distributed systems in an interview whiteboarding context.
Machine Learning and Artificial Intelligence
- Pattern Recognition and Machine Learning (goodreads link)
by Christopher M. Bishop
Perhaps the most standard book on Bayesian machine learning. A great source and reference for: linear models, Support Vector Machines (SVMs), Bayesian network (AKA probabilistic graphical) models, Markov Chain Monte Carlo (MCMC), Principal Component Analysis (PCA), Hidden Markov Models (HMMs). There is little discussion of the dark alchemy of feature engineering and representation learning.
Currently reading
-
Deep Learning (Adaptive Computation and Machine Learning) (goodreads link)
by Ian Goodfellow, Yoshua Bengio, Aaron Courville
Focuses on solving the representation learning problem by decomposing it into a deep hierarchy of sub-representations that can each be learned . While this book pre-dates Attention Is All You Need and the rise of transformer network architectures it does provide a rigorous foundation for deep learning including modern methods. -
Deep Learning with Python (goodreads link)
by François Chollet -
Linear Algebra Done Right (3rd edition) (goodreads link)
by Sheldon Axler