This post will cover some of my favorite resources for problem solving. There will be a software bent to the suggested books, however my intent is not to simply provide the “best interview prep resources” but rather those which will help make you a more effective thinker in the field.

How to Solve It

If you must own one book on problem solving, it’s this one

I’ve saved the best for first. This book is the most ‘general’ problem solving centric book of the group. “How to Solve It” is a classic, written by legendary mathematician George Polya.


While there is a mathematical bent to the book (especially in the examples given), the math is rudimentary. It is mostly a stand in for general problem solving techniques.


Some of the general ideas in this book involve looking for smaller problems to solve (that are similar to the one at hand), knowing whether you have seen similar problems before, thinking of a corollary to a problem and solving that… etc. The topics are too numerous to list here, and Polya does an exhaustive job of listing all the possible ways one could try and digest a problem.


What stands out to me about this book is not its place as a problem solving manual, but Polya’s love for problem solving as a path to deeper discovery. Polya advocates for deconstructing and revisiting a problem even after you’ve solved it for deeper insight. This in turn will lead to a deeper toolkit.


Indeed, where you might be able to, for example, pass a programming interview through sheer brute force of solving A LOT of problems, Polya reminds us that some of the joy of problem solving is not always about results. He instead reminds us to treat problem as an art.

The Algorithm Design Manual

As is the case with Polya’s “How to Solve It”, “The Algorithm Design Manual” is fun. If you had to choose a well rounded but descriptive book on Algorithms, I would recommend this one above all others. While the famous Cormen “Introduction to Algorithms” is more thorough (giving detailed mathematical analysis of all algorithms presented in this book) it is often dense and unwieldy for the budding computer science student.


Where Skiena’s book shines is in its depth of content (covering all major topics you would expect in an Algorithms textbook), engaging writing, and the inclusion of “War Stories”, and practice problems.

The “War Stories” sections in particular stand out because they highlight real world practical use cases for many of the presented algorithms. Somehow, with this book, Skienna managed to find some perfect intersection of academic textbook, interview prep book, and technical blog post without losing much of anything in the process.

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

Boars are definitely data intensive

Ok, so this one isn’t a ‘problem solving’ book per se. But, it’s the first book that comes to mind when someone asks me how to ‘learn’ about application architecture.


The truth is, this is a domain where there is no shortcut. Unlike algorithms there often are no ‘best’ solutions to the infinite variations of architecture problems you may encounter. Worse yet, I often find example prep problems to be shallow in their solutions.


Algorithmic problems are neat little packages which contain many small techniques strung together. Even when solutions to these problems becomes ambiguous it is because there is a time / space tradeoff. These tradeoffs are the precipice of architecture problems.


Therefor, the best I feel I can provide in this domain is to give the best / most concise resource of possible solutions, which are contained in this book.
The truth is answering canned architecture interview questions well usually depends on: – how much depth of experience you have at work- how well you know what the possible options are (where this book comes in)- Conference talks (think infoQ) or in depth technical blog posts by some of your favorite engineering teams