Recommended Reads

Below, I have included several books I have read that are useful for the topics indicated.

Algorithms

Software design

Language

Systems

Unix

Leadership

Math

Machine learning

Algorithms:

Algorithms (4th Edition) by Robert Sedgewick (Author), Kevin Wayne (Author)

This is an excellent book with examples that are simple to understand. The author has a set of videos for each chapter available on Oreilly that make understanding the material very easy. I highly recommend understanding these algorithms.

Introduction to Algorithms, 3rd Edition (The MIT Press)

This book has historically been considered the bible of algorithm books. In its original editions, it was pretty complex to understand. However, the 3rd edition is more straightforward to follow. 

Guide to Competitive Programming

This compact book follows the IOI syllabus to introduce standard algorithms and their applications.

Advanced Algorithms and Data Structures

This book covers more advanced data structures and algorithms such as Tries, Disjoint sets, Clustering, Graph Algorithms, and more. The content is laid in a simple-to-digest format.

Elements of Programming Interviews In Java: The Insider’s Guide

This book has excellent solutions for common interview questions that touch on various algorithms and is thus a good way to improve understanding of algorithms.

The truth about improving algorithm skills: The only way to improve here is to practice a lot. There are tons of exciting algorithms. I recommend registering at leetcode and making a habit of doing some questions weekly. Try to do the question using multiple algorithms so you can compare the merits of various algorithms (performance and memory).

Software Design:

Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems

I highly recommend everyone to read this book. The book describes writing applications with data in mind. It also discusses the storage, retrieval, and transmission of data. Covers various encoding schemes such as avro, proto buffers, and thrift. It describes distributed systems, their data integrity and consistency troubles, and solutions around creating various consistency forms. It has an excellent section on clocks and how to identify execution times across distributed systems correctly. In the end, there is a section on streaming and batch applications.    

Designing Distributed Systems

An easy read to understand common distributed system design patterns

Fundamentals of Software Architecture – Richards & Ford

The book covers various architectural styles that help write clean code. These folks also have different software architecture videos on Oreilly that cover the same material.

Building Evolutionary Architectures: Support Constant Change

Another good book by one of the authors of the above Fundamentals of Software Architecture book.

Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)

The book has lots of great suggestions on how to write quality code. 

Software Engineering at Google: Lessons Learned from Programming Over Time

This book from Google describes the need for a Culture, Process, and Tools to enable sound software engineering.

Site Reliability Engineering – How Google Runs Production Systems

The book covers designing practices that enable running large-scale distributed systems reliably. It covers monitoring, release engineering, and a method for handling production issues. There are solid lessons here that you can leverage in your organization.

Streaming Systems: The What, Where, When, and How of Large-Scale Data Processing

It’s another simple read on streaming systems.

Building Microservices

A straightforward read on microservices. Given the popularity of microservices, I highly recommend reading this book.

Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython

I added this book to software design because it shows you tools in Python that you can leverage to accomplish many software needs quickly. As a software developer, you should understand these tools as they will help you analyze data and validate concepts, scenarios, and such. 

Domain-Driven Design: Tackling Complexity in the Heart of Software

This classical book on software design explains the importance of understanding the business domain to implement good software. The author walks through his journey as an engineer designing financial software and how his class designs are simplified with improved domain understanding. I highly recommend folks to read this book.

System Design Interview – An Insider’s Guide: Volumes 1 & 2

These two volumes are a gem. They go over solving common design problems such as Google Maps, hotel system reservations, S3-like object store, Google Drive, YouTube, and more. The book references high-quality content for each topic, such as papers and web articles that describe the issues in great detail.

Acing the System Design Interview

This book outlines the system design concepts while covering practical use cases such as Airbnb, News-Feeds, CDN, Craig List, and more.

Byte Byte Go

This content is essential to grasp system design concepts well and do well in system design interviews. The content here is laid out in a very simple-to-understand manner and is regularly updated. The content is maintained by Alex Xu, the author of the System Design Interview insider guides I included above.

Language : 

Java Performance: In-Depth Advice for Tuning and Programming Java 8, 11, and Beyond 2nd Edition

This is a good read on in-depth advice on Java performance tuning.

Inside the C++ Object Model

This is an ancient book on C++. I recommend it here because the book describes some of the design choices the authors of C++ originally made. It’s exciting to see their perspective.  

C++ Concurrency In Action 

This is an exciting book to understand. Understanding C++ concurrency in depth is fun as it forces you to become familiar with hardware concepts such as cache lines, kernel mutexes, and spin locks. Understanding these concepts is critical if you want to work on a high-performance application in C++.

C++17 – The Complete Guide
C++20 – The Complete Guide
C++ Move Semantics – The Complete Guide

These three books are imperative to understand the more recent language updates in C++. Having left C++ for almost a decade and returned to it a few years ago, I felt the language transformation since C++ 11 was huge and complex. I started with Scott Myers Effective Modern C++, which covered the C++ 11 concepts, then read the above C++ move semantics and later C++ 17 and C++ 20 books. Going in this order made understanding the recent language transformations easier to grasp.

System Books:
Computer Networking: A Top-Down Approach

This is a classical book that covers network concepts. The book includes a section on multi-media networking, including case studies for YouTube and Netflix.

High-Performance Browser Networking

This is an excellent book for understanding practical designs for high-performance networking. It starts with an introduction to UDP, TCP, and TLS, then describes HTTP1 & HTTP2 protocols, and ends with a description of WebSockets and WebRtc. The book covers suggestions for optimizing network delivery with each of the protocols. In addition, it provides examples of analyzing and debugging network performance.

Cassandra: The Definitive Guide

Cassandra has evolved into one of the significant data stores over the last decade. This book is an easy read to familiarize one with Cassandra and contains an excellent section describing its internal workings.

Kafka: The Definitive Guide

This is an easy read on Kafka with a section that covers its internals. Kafka is a fantastic product; this is an excellent book to familiarize yourself with Kafka.

ZooKeeper – Distributed Process Coordination

This is an easy read about ZooKeeper, commonly used for coordination in a distributed system.

Kubernetes in Action

This is a very well-written book for grasping Kubernetes concepts in detail. The book goes beyond describing Kubernetes and its internals by giving practical examples of managing Kubernetes clusters.

Netty in Action

Netty is an excellent library that simplifies efficient asynchronous network io. The book covers the concepts of netty, including efficient memory management via ByteBuf, which is used outside of JVM memory management via jemalloc.

Database Internals: A Deep Dive into How Distributed Data Systems Work

This book covers the internal designs of database systems as a distributed process. It provides a clear explanation of B trees and their variants, such as LSM trees. It describes transaction processing before introducing distributed coordination concepts such as leader election, replication, and consistency. It introduces gossip protocols, failure detection, and distributed transactions. It touches upon Paxos, but a more precise description is available here. I enjoyed reading this book immensely and highly recommend it to all engineers who want to be challenged.

Unix:

The Linux Programming Interface: A Linux and UNIX System Programming Handbook

This excellent book covers the fundamental Linux API blocks such as file i/o, process, memory allocations, file systems, and more. The book provides documentation of Linux system calls and library functions and code examples of their usage. The author, Michael Kerrisk, has maintained Linux man pages since 2004 and is the expert on the subject matter.

Modern Operating Systems 4th Edition

This is a classical book on operating systems by Andrew Tanenbaum, who wrote Minix OS to teach operating systems to students in the late 80s. Linus Torvalds gained inspiration to write Linux based on the Minix OS. Amazon sells this book at a very high price; you will be able to buy this book at a more reasonable price on eBay.

The Design of the UNIX Operating System 1st Edition

This book describes the internal algorithms of unix in an easy-to-understand manner. Understanding these algorithms and design choices will help you a lot. Take Unix pipes, for example; how different are they from what we call micro services today?

Solaris Internals: Solaris 10 and OpenSolaris Kernel Architecture (2nd Edition)

This book describes the Solaris operating system, but it’s a great book to understand the Unix kernel. The content is straightforward to follow, and the presentation is excellent. 

Leadership books:

Everyone communicates, Few Connect – John C. Maxwell

This fantastic book focuses on the need to connect with people on a human basis to inspire, motivate, and create strong connections. I highly recommend this book to everyone.

HBR Emotional Intelligence Ultimate Box Set – 14 Books

Leadership is more soft skills than complex. These books have simple and to-the-point suggestions for improving your soft skills. The series has excellent books such as Self-Awareness, Focus, Authentic Leadership, Resilience, Empathy, Leadership Presence, Influence + Persuasion, Confidence, and Mindful Listening.

Execution – Larry Bossidy and Ram Charan

One of the authors of this book is the CEO of Honey Well, and the other is a famous CEO consultant. The book discusses the importance of delivery and execution, which is critical for leadership success. 

Business Communication – 9 Steps To Help You Engage Your Audience

This book has several great suggestions for enabling good written and verbal communication. 

Manager’s Toolkit – Harvard Business Essentials

Harvard Business Essentials has other books on negotiation, decisions, hiring talent, power, influence, and persuasion. These are all excellent reads for someone who wants to follow the leadership track.

If you are new to management, you owe it to yourself to read the Manager’s toolkit before you get swallowed by mental agony. Seriously, the Manager’s toolkit will help you. In addition, the other Harvard Business Essentials books are great. They will help you improve in each of these critical areas. 

The seven habits of HIGHLY EFFECTIVE PEOPLE

This book, I recommend to everyone. It describes good habits which will help you succeed in anything you do.

First, Break All The Rules: What the World’s Greatest Managers Do Differently

This book is unique and special. Rather than teaching a list of ingredients to become a great leader, the book explains that every successful leader is different, and we must learn to identify our strengths and build upon them. I highly recommend this book to everyone.

The Coaching Habit: Say Less, Ask More, & Change the Way You Lead Forever

This short and straightforward book teaches us to ask questions such that ideas are generated from within the team rather than top-down fed. The strategy prescribed in this book has worked exceptionally well for most folks on my team.

Staff Engineer: Leadership beyond the management track

This book explains the engineering track for software developers; it describes the skills needed as you move up in the software track. This is a great read.

Think Like Amazon: 50 1/2 Ideas to Become a Digital Leader

The concepts described here are fantastic. The book suggests topics such as thinking long term, creating chaos to challenge to improve, standing up for what you believe, owning your dreams, being detail-oriented, continuously learning from failure, integrating technology into business operations, being progressive and adapting change, creating metrics to intelligently measure success, understand your customer and connect with them, scale your teams by creating a mixture of skills and intelligent task allocations, constantly learn and raise the bar, nourish and track trust with customers. These are amazing lessons for anyone. This book really is a treasure.

Math:

Introduction to Linear and Matrix Algebra

This simple book explains linear algebra, matrixes, and matrix transformations.

Calculus: An Intuitive and Physical Approach (Second Edition)

This is a classical book in calculus and is very useful as a refresher.

Introduction To Probability

This is a classical book on probability and serves as a solid refresher.

Modern Mathematical Statistics with Applications

This book provides a good refresher for statistics.

Machine learning :

Think Bayes

This book explains Bayesian statistics in a convenient format by applying concepts in Bayesian statistics to practical problems such as mark and recapture, where the population of bears is estimated by marking a set of bears and later capturing them again to estimate the population size.

Pattern Recognition and Machine Learning (Information Science and Statistics)

This is a solid book focusing on core machine learning topics such as linear regression and classification and moving on to neural networks with a high focus on mathematical concepts.

Probabilistic Machine Learning: An Introduction

This is the best book currently available for topics in machine learning. The book is excellent in that it starts by building the mathematical concepts such as stats, probability, linear algebra, and calculus and moves on to applications of the images in areas such as linear regression, classification, SVM, neural networks, clustering, trees, bagging, dimensionality reduction and more. The book is excellent because it is accompanied by code that gives practical examples of the topics. The author uses a lot of visualization that helps grasp the concepts better. It took me several iterations of rereading the chapters before I began to make sense of the topics, but the effort was worthwhile.

Probabilistic Machine Learning: Advanced Topics

This advanced book supplements the above text on more advanced topics in machine learning. The book starts with mathematical building blocks and moves on to issues in inference and predictions. The book focuses on more recent machine learning areas such as generative models, discovery, and reinforcement learning.

Deep Learning

This is a classical book on deep learning, connecting theory and concepts with math transparently. The book covers the core of deep understanding in an obvious form. I highly recommend folks read this book before moving on to newer topics in deep learning, such as transformers.

Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems

This is a great first book on machine learning; it teaches the concepts in Python via practical examples. The author explains the images in a very simple-to-understand manner. Hence, I recommend folks to read this book early on in their machine learning journey.

Deep Learning with Python, Second Edition

This is a practical book that covers topics and teaches topics in deep learning through Keras. The content is laid out in a simple-to-understand form.

Inside Deep Learning

This book is fantastic because the author links math to code and annotated descriptions of the concepts. I enjoyed reading this book as the images were laid out clearly.

The Elements of Statistical Learning: Data Mining, Inference, and Prediction

This book covers critical topics in machine learning, such as regression, classification, SVM, kernels, neural networks, and more. The book is quite analytical in its content and is used as a textbook by several top machine-learning programs.

Introduction to Information Retrieval

This book is used as a textbook in Stanford’s information retrieval course. The content is fantastic and covers the core topics for web information search, such as text parsing, vocabulary, index construction, search scoring and ranking, probabilistic query processing, text classification via naive Bayes, clustering, and more. The content is laid out in an easy-to-grasp manner. I highly recommend folks read this book since the concepts described here have vast applications.