I have tried here to collect a list of “core” books for various facets of our field. I certainly don’t think you need to read all of them to be a capable software professional; rather it is the list I would put together if asked about how to learn more about specific areas.
This page came about because after compiling similar lists two or three times over the years in various places and formats, I’m following good development practice and factoring it out for reuse and sharing.
The books in each section are roughly ordered by “level”, so the ones at the start of each sub-list should be useful and accessible to anyone (even students just getting started) but ones later on may only be interesting — or you may get the most value from them — at later stages of your career.
Please let me know your favourites too!
The Soul of a New Machine
The true history of a scrappy, time-pressed, skunkworks project to develop a new computer in the late 1970s. A different kind of project than most today, but a recognizable culture and work environment for today’s startups.
Dreaming in Code: Two Dozen Programmers, Three Years, 4,732 Bugs, and One Quest for Transcendent Software
A chronicle of a completely off-the-rails project with wildly optimistic estimates, endless scope creep, and no plan. A fascinating look at just how badly things can go wrong, and how teams fail to see it happening to them.
Coders at Work: Reflections on the Craft of Programming
This collection of interviews with luminaries of the field covers everything from oral histories of how they built important software milestones to their preferred working hours and why they like Perl.
Where Wizards Stay Up Late: The Origins of the Internet
The history of how computers got networked, how networks got interconnected, and the people who did it.
Dealers of Lightning: Xerox PARC and the Dawn of the Computer Age
How the Xerox PARC team was formed and grown, how they reinvented computers into the form we know today, and how difficult it was to convince anyone that what they were doing was of any use.
The Rickover Effect
A somewhat hagiographic but still extremely interesting overview of how Hyman Rickover outmanoeuvred the bureaucracy, inertia, and cronyism of the military and political establishment to put together, grow, and defend a truly uniquely excellent team of technical specialists; as well as how his uncompromising standards and rigorous methods ensured success after success and continued safe operation of seaborne nuclear reactors.
How to Win Friends and Influence People
A classic and a perennial fixture on this sort of list — for good reason. Don’t let the somewhat creepy sounding title put you off (it’s just old-timey writing style). It’s a great guide to breaking through the initial barrier when meeting someone. It won’t take you all the way to building real meaningful relationships, but it’ll get you started.
Packed full of wisdom from the lean but hyper-effective team at 37signals/Basecamp, this is a practical guide to shipping real, working, useful software in the fastest and most effective way. It covers everything from workflow processes to interface design, from support channels to paying off tech debt; always with an eye to how it will help you ship.
The Manager’s Path: A Guide for Tech Leaders Navigating Growth and Change
What do managers do? Why are VPs always going on about culture? What is a VP anyway? How does one “build” this “influence” people want so much? How can one mentor and teach and be recognized as someone who makes other people more effective, at any level?
The Mythical Man-Month: Essays on Software Engineering
Published in 1975 based on experiences from the ’60s, this collection of essays is stark proof that while superficial facets of our field change, there is nothing truly new under the sun. The problems, errors, project and team patterns, and challenges dealing with customers, are all the same as today. Not all the suggestions or solutions presented are right, but then again, nobody else has found all the right answers either, almost 50 years later.
Peopleware: Productive Projects and Teams
This is another classic that drives home how little we’ve really learned over the last few decades. We had the facts ages ago, but they haven’t sunk in. From 1987, answers to questions like: how do we predict how long a task will take? Are open plan offices a good thing? How valuable is diversity on your team? How can managers get their teams to ship more?
The New Economics for Industry, Government, Education
This book can be startling to read (and not just because of the bizarre haranguing chapter in the middle about communism, which is, fortunately, very much skippable) because all the underlying ideas and philosophies of our most modern and “enlightened” software team practices are all clearly on display, decades before any of us paid any attention to them. It’s not literally Kanban or burndown charts or “servant leadership” or CI/CD or testing being done by devs instead of a QA team — but all the concepts are there and explained and justified a heck of a lot better than most people manage to present them today.
High Output Management
A completely practical step-by-step guide for exactly how to get started as a manager. I can’t really give it a much better recommendation than that, because if you ever find yourself in the situation of being a new manager panicking about what exactly to do, like, specifically — then reading that first sentence probably got you to buy it already. And yes, it’s good.
First, Break All the Rules: What the World’s Greatest Managers Do Differently
This is a very tedious stretched-out “book” that should have been at most a twelve-page paper. However, it has at it’s core an invaluable nugget that you just can’t find anywhere else: real data from large-scale studies and surveys that help understand what people and teams really need and want. Borrow a copy, skim it, jot down the important bits, and ignore the book but keep referring back to those key facts.
Turn the Ship Around!
The core ideas presented here are relatively simple, as most good practices are: simple to understand, hard to do well. The author describes changing the culture of his poorly-performing submarine crew to get every individual to take responsibility for their domain, leading to better performance and morale. One of the most valuable parts of the story is seeing how difficult it was and how many things went wrong along the way. Unlike most “management methodology” books that pretend you just have to announce some bullet-point ideas and everything will be great, this one shows the slow gradual slog of really enacting change.
The Practice of Management
This is another case of the original early thinkers in a field still being better to read than the myriad of copycats regurgitating updated versions of the same basic ideas. Peter Drucker arguably “invented” the modern concept of what a manager is, and we’re still struggling to apply the best and most refined ideas from his thinking many decades later.
Coming some day.
The Visual Display of Quantitative Information
This is a must-read for anyone who ever needs to put together a chart, data table, or report — or, in other words, everyone. It is a quick and easy read and the book itself is a beautiful physical object. It will instantly make you better able to express complex datasets and create compelling visualizations.
Sketching User Experiences
If your software has a user-facing interface, you’ll at some point need to experiment with how it might look and behave — or even study how users interact with it. This book will show you how.
I believe that for documents, presentations, interfaces, diagrams, and the whole panoply of visual forms that software developers are likely to interact with daily, typography dominates the design. You can make a beautiful webpage, a coherent and accessible user interface, or a stunning presentation, with just typography. So leave the graphics and pictures to the professionals, but learn your type.
The Design of Everyday Things
This is the best all-around introduction to thinking about how and why people will use what you’re building, and how you can make it easier for them. It’s not software-specific, but the concepts are generalizable.