Programming and Machine Learning Book Recommendations


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!

Most of the programming and maths books on my bookshelf
Most of the programming and maths books on my bookshelf

The Craft of Programming

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. Code Complete 2 (Best Practices) (goodreads link)
    by Steve McConnell
    What it says on the tin, encyclopedic content of programming best practices.

Currently reading
  1. 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

  1. 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.

  2. 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.

  3. 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
  1. Structure and Interpretation of Computer Programs (2nd edition) (goodreads link)
    by Harold Abelson, Gerald Jay Sussman, Julie Sussman

  2. Discrete Mathematics and Its Applications (5th edition) (goodreads link)
    by Kenneth H. Rosen

  3. 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

  1. 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?

  2. 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

  1. 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
  1. 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.

  2. Deep Learning with Python (goodreads link)
    by François Chollet

  3. Linear Algebra Done Right (3rd edition) (goodreads link)
    by Sheldon Axler

Tom Stesco

Tom Stesco

I’m a Senior AI/ML Engineer at BCG X, living in Toronto Canada. I went to school at ETH Zürich (MSc) and University of Waterloo (BASc). My interests are in AI/ML for virtuous feedback between machines, people, and their environment.