Home / Recommendations

Recommended Books

The books that made the biggest difference — for coding interviews, system design, and software engineering in general. Affiliate links help keep this site running at no extra cost to you.

1
Cracking the Coding Interview
Gayle Laakmann McDowell

The definitive guide to coding interviews. 189 programming questions and solutions covering data structures, algorithms, and system design.

The book I recommend to anyone starting interview prep. Work through every problem type at least once.

Check price on Amazon
2
System Design Interview – Vol. 1
Alex Xu

Step-by-step framework for tackling system design questions. Covers URL shorteners, social feeds, chat systems, and more.

The clearest intro to system design interviews. Read this before any senior-level interview.

3
System Design Interview – Vol. 2
Alex Xu & Sahn Lam

Deeper dives into proximity services, real-time gaming leaderboards, payment systems, and distributed message queues.

Follow-up to Vol. 1 with harder, more realistic designs. Worth it once you have the basics down.

4
Designing Data-Intensive Applications
Martin Kleppmann

The best book on distributed systems and databases. Covers replication, partitioning, consistency, and stream processing in depth.

DDIA is the single best book for understanding why systems are designed the way they are. Read it slowly.

5
Elements of Programming Interviews in Java
Adnan Aziz, Tsung-Hsien Lee, Amit Prakash

300+ problems with detailed Java solutions. Harder than LeetCode on average — ideal for deep pattern practice.

Harder than Cracking the Coding Interview. Use it to push past easy-medium comfort zones.

6
Introduction to Algorithms (CLRS)
Cormen, Leiserson, Rivest, Stein

The academic reference for algorithms. Not a prep book — but essential for understanding why algorithms work.

Not a prep book — a reference. Pick up specific chapters when you want to understand an algorithm deeply.

7
The Pragmatic Programmer
David Thomas & Andrew Hunt

Career and craft fundamentals every senior engineer should have read. Timeless advice on writing maintainable, professional software.

Read early in your career, re-read every few years. The advice holds up.

8
Clean Code
Robert C. Martin

How to write readable, maintainable code. Polarising but influential — worth reading and forming your own opinion on.

Polarising — some advice is dated, but the core principles on naming and functions are worth internalising.

9
A Philosophy of Software Design
John Ousterhout

A concise, opinionated guide to reducing complexity in software. One of the best modern takes on software design.

Short, dense, and more practical than Clean Code. One of the best books on design thinking.

10
Database Internals
Alex Petrov

Deep dive into how storage engines, B-trees, LSM trees, and distributed consensus protocols actually work.

For engineers who want to understand databases beyond 'it stores data'. Pairs well with DDIA.