- 10 Dec, 2025 *
Here I discussed how philosophy informs how I make software. But what about the other direction? How has making software affected how I think about philosophy?
My number-one answer, by far, is that I have much more respect for skepticism. Software engineers generally:
- Get frequent empirical feedback on our work;
- Want to make things that work;
- Work on problems with lots of well-studied techniques; and
- Have access to wonderful tools.
These all admit of exceptions, but at least relatively to other professions, we work all day to get well-defined things right, have the means to figure out whether we’ve gotten them right, and have lots of resources to help us.
What this tends to produce is a cir…
- 10 Dec, 2025 *
Here I discussed how philosophy informs how I make software. But what about the other direction? How has making software affected how I think about philosophy?
My number-one answer, by far, is that I have much more respect for skepticism. Software engineers generally:
- Get frequent empirical feedback on our work;
- Want to make things that work;
- Work on problems with lots of well-studied techniques; and
- Have access to wonderful tools.
These all admit of exceptions, but at least relatively to other professions, we work all day to get well-defined things right, have the means to figure out whether we’ve gotten them right, and have lots of resources to help us.
What this tends to produce is a circus of human folly. I don’t mean that as a cynical remark about workplace culture, laziness, or anything else. I mean that humans are a lot worse at getting things right than I appreciated. Software engineers have just about the best conditions for getting things right, and yet we find so many ways to get things wrong:
Anything but the simplest systems are notoriously difficult to reason about. Asynchronous behavior confuses us. Working with several notions of dependence at once confuses us. Working with different sets of timestamps, with different interpretations in context, confuses us.
We have trouble even naming things properly, often because we’re deeply confused about what we’re trying to pin down with the things we’re naming.
So, software engineering is much, much more than the basic sequential logical program flow you encounter in an introduction to the subject. As we get beyond those basics, our ability to reason about software goes south fast. And we’re much, much worse than we think at even reasoning about the basics. We make basic logical errors all over the place, and even fairly simple data structures tend to confuse us.
Then there’s the emotional / psychological dimension. Many people find debugging painful, and go to farcical lengths to convince themselves the bugs don’t exist. We think our work is good, and go to farcical lengths to convince ourselves it is better than it is. We see a problem and think it must have the same cause as yesterday’s problem. Or we think it must not have the same cause as yesterday’s problem.
I could go on for a long time here: I’d love to write and read more about the psychology of engineering. For now, suffice to say that we have lots of feelings and biases, and many of them cause us to make mistakes.
So! I took skepticism pretty seriously when I was a philosophy student, but I’d take it even more seriously now.
P.S.: I hope it goes without saying that these are not mistakes that I think that only other people make. I have lots and lots of first-hand experience at these and many other categories of error.