Students occasionally ask me for book recommendations. Since I'm always recommending the same ones, I decided to write up this list. You'll notice that several of them are not directly about software engineering or even computer science! The students have already had plenty of exposure to the classic CS material (and will continue to in their careers), so I try to consider books that are relevant but might not be obvious. At the end of this article I list a few programming books in case that is what you are looking for (please don't yell at me for excluding SICP). The books I recommend are:
The book that has impacted me the most is The Design of Everyday Things (Amazon). It was the first book my PhD advisor recommended to me. Although the book has nothing specific to do with software, it has a big lesson for us: software is way more than just the features we implement. If the software isn't usable, then it doesn't matter how fast it is or how many features it has. The book opened my eyes to the usability problems that surround us and how to study them. So the next time you can't figure out how to use a microwave oven, it isn't your fault.
Key takeaway: Design is everything, so stop blaming users and learn from them.
My first foray into behavioral economics and decision making was Predictably Irrational (Amazon). It summarizes a number of studies that have been ran to understand how people make decisions and the cognitive biases that we often face. Many of the examples in this book center around the psychology of pricing, though they often pop up in social settings as well. For example, if someone offers us free chocolate, why do we take less than we would if it costs 1 penny? If you enjoy this, then I would also recommend Misbehaving by Richard Thaler (Amazon).
Key takeaway: Making decisions is hard, but we fall into a lot of traps that could be avoided.
Outliers (Amazon) walks through a series of contrasting case studies of successes and failures. From professional hockey players to elementary school students to CEOs, there is more to their success than we might think. Some of the most intelligent people in the world live typical lives while others become billionaires. You need to be smart enough, but after that it seems to come down to charism, grit, help from others, and luck. Note: This book does seem to overgeneralize and oversimplify complex situations, but there are still good points.
Key takeaway: There is more to success and failure than we think.
Creativity, Inc.(Amazon) tells the story of Edwin Catmull's journey from getting a PhD in computer science, working at Lucasfilm, and working as CTO of Pixar with Steve Jobs. Other than the entertainment of the story, it is littered with lessons on management. For example, when interviewing a job candidate, ask yourself if you could see them being your boss in the near future. All Edwin wanted to do is to make the first animated film...
Key takeaway: Managing engineers and creatives requires some unintuitive strategies.
Coders at Work (Amazon) is a collection of interviews with big names in the software world. It is much like listening to a podcast or reading blog posts. For example, you can read about Peter Norvig's experiences with the development process at Google and NASA. If you are interested in entrepreneurship and startups, then I recommend the sibling book, Founders at Work (Amazon).
Key takeaway: You can learn a lot from listening to the lessons learned by others.
The Mythical Man-Month (Amazon) is a classic collection of essays describing issues that arise while managing software projects. Some aspects of software engineering really haven't changed since the 1970s. For example, adding more programmers to project that is late will make it even later. I had never heard of it until graduate school so I think it is worth including in the list (and none of my students have read it).
Key takeaway: You'll soon fall victim to the problems identified by this book, even after reading it.
If you are disappointed that there aren't any programming books, go read Wikipedia articles about data structures and find a book on compilers, functional programming, and AI. I recommend: