# Friendly Computer Science Textbooks

I’d been meaning to post this earlier, but I got sidetracked by Project Euler (more on that later). In any case, I want to list a few computer science textbooks that, in my opinion, are written in a friendly style and are easy for someone to read like a novel. These are my favorite kind of textbooks, because they often incorporate two important aspects: *elaboration* and *examples*. Notice that this does *not* mean that mastering the corresponding subject is easy! It just makes it *easier* for an experienced and educated reader to do so.

I’m inspired to think about this because, as much as I enjoyed my complex analysis class last fall, the textbook we used glosses over so many details that it made analyzing some of the proofs excruciatingly difficult. At least, for me … I can’t speak for everyone in the class, but my professor did have to explain that the goal of his lectures was to emphasize *why* the authors/book did something in their proofs.

In the past few weeks, I read parts of Methods of Mathematical Economics, a textbook about the mathematics behind linear programming and other popular applied mathematics techniques. It is written in a conversational style (the author uses “I” instead of “we”), and it was very helpful to me for a final project.

Here are four books on the computer science side that I’ve found to be very readable.

- Algorithm Design, by Jon Kleinberg, and Eva Tardos, presents an introduction to the common themes underlying an algorithms course. I enjoyed it because it emphasizes the decision-making behind many of the proofs. In addition, it contains several sample problems with detailed solutions. These solutions also explain why certain approaches might not work or are suboptimal.
- Artificial Intelligence: A Modern Approach, by Stuart Russell and Peter Norvig, is a surprisingly readable “encyclopedia-like” book about AI. I do
*not*recommend reading the entire thing, especially in one sitting! But if you pick out a single chapter, the book should serve you well. I talked with Stuart when I was visiting Berkeley, and he told me I needed to know more learning theory. I asked him how I could learn more, and he said: “read the book.” Good — I’ll do that! - Distributed Systems: Principles and Paradigms, by Andrew S. Tanenbaum and Maarten Van Steen, is about concepts of distributed systems (i.e., those relying on multiple computers/machines). This book is
*filled*with examples. Almost every concept is explained with an immediate real-life example. - Introduction to the Theory of Computation, by Michael Sipser, overlaps somewhat with
*Algorithm Design*, but emphasizes automata, computability, and complexity, rather than pure algorithms. It is a concise book, but somehow provides the impression that it’s detailed and expansive. Fortunately, each chapter contains problems with full solutions.

I’d be interested in knowing if there are other popular, readable computer science textbooks.