I think about our lack of reflection in two senses. First there are no great works of meta-software creation. We have Naurâs programming as theory building. But that is a short paper that hints at ideas. We have no work that explores our discipline at depth the way other fields have philosophy of x or methodology of x. So as a field we havenât reflected enough.
But the way I used it in that last sentence is slightly different. We as individual programmers donât reflect enough on our own practice. We might think about best practices, we might consider how to solve problems we have, but we donât spend a lot of âarmchair timeâ.
Even if we arenât the ones coming up with great answers to these difficult questions, we need others to help us think more deeply about them. What exactly is an abstraction? What is the nature of a program? Why have we privileged some features of nature language in our programming language and denied others? Can our programs have meaning outside of what we intend then to? Where do they get that meaning? What do we mean we talk about an explanation for a bug? When is a reductive explanation if a bug useful and when is it not? What does that tell us about explanation?
There are so many questions we ought to sit and ponder. We are a culture that is good at arguing about things that honestly donât matter much. And bad at asking fundamental questions and considering answers to them.
I have some not fully formed ideas about why this lack of reflection has happened in our culture. First is a deep seeded implicit belief in positivism that so many programmers hold. We often believe that only measurable scientific things are meaningful and so dismiss philosophy.
But I also think this lack of reflection comes from our frustrations of the kinds of work we have to do day today and yet the realization that we have it pretty darn good. We have great job security and great pay. But the software we are forced to make is terrible.
In this environment, deep reflection does not help us at all. It just reminds us how shallow our work truly is. Instead, we constantly try to find ways to feel our work had more meaning. Hence to following if trends, the gatekeeping, and the tribal behavior.
I donât think we need to slow down the process of making software. Just that we need to care about the ânon practicalâ questions of our field. We need to think much more deeply about the work we do, think kind of work we want to do, and the nature of our work.