Felix Crux

Technology & Miscellanea

Recommended Reading List

…for software professionals.

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!

Culture and History of Our Field

It’s not always enough to just know the dry facts about how we work today. Knowing what’s been tried before, which parts worked well (and which didn’t), and understanding where things came from and why they are they way they are will help you develop an intuitive sense for how ideas may turn out, and an appreciation for the foundations we’re building on.

  • The Soul of a New Machine

    Tracy Kidder

    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

    Scott Rosenberg

    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

    Peter Seibel

    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

    Katie Hafner

    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

    Michael A. Hiltzik

    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

    Theodore Rockwell

    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.

People & Project Management

Don’t think you need the word “manager” in your job title to benefit from learning these skills. If you want to make yourself more useful to a team, teach others, help your projects succeed, or guide groups to making good decisions, these books will help. And if you are a new manager, going further down this list will give you a great start.

  • How to Win Friends and Influence People

    Dale Carnegie

    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.

  • Getting Real

    37signals/Basecamp

    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

    Camille Fournier

    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

    Fred Brooks

    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

    Tom DeMarco and Tim Lister

    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

    W. Edwards Deming

    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

    Andy Grove

    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

    Gallup

    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!

    David Marquet

    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

    Peter Drucker

    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.

Practices and the Craft of Programming

These books have insights and techniques for the everyday duties of the job… and for when things go wrong.

Coming some day.

System Design and Architecture

The best way to learn what works and what doesn’t is to build a lot of systems. The second best is to read about ones others have built and their experiences.

Coming later.

Presenting Information, Design, and User Experience

I’m not a designer, and reading these books won’t make you one either. But every developer should know how to present information and interfaces clearly and comprehensibly.

  • The Visual Display of Quantitative Information

    Edward Tufte

    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

    Bill Buxton

    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.

  • Practical Typography

    Matthew Butterick

    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

    Donald Norman

    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.