Skip to main content
Oliver Dzedou

The handbook of the selfless programmer


The dependency of civilization on software has increased rapidly over the last 100 years and is definitely near 100% today in 2025. Software is responsible for:

Similarly, the amount of abstractions1 used by the average programmer is also very rapidly increasing. understandably so, since abstractions are great. they allow us to be more efficient2 because we can skip learning all the basics and solving all the difficult technical problems, and instead we can jump right to implementing the business logic for our hot new idea. There is however a caveat to that: if people are not forced to solve something difficult, they will generally avoid it. The number of programmers that learn the basics and understand the computer they are programming for is decreasing proportionally to the increase of abstrations, thus:
we decreasingly understand the thing we increasingly depend on.

Whether you are in the "software is in decline" or "you're just wearing rose-tinted glasses" crowd, some simple logical deduction should at least nudge you towards the former. After all, if we understand it less and less, how can it not be in decline? This should be at least a little bit alarming, because as established earlier, software is pretty important. Software declining so much that it becomes unbearably slow and unreliable as we add more and more abstractions is already something most of us should strive to avoid if possible, but what's worse, we don't currently have any mechanism to prevent our understanding of software from reaching zero. That may take a very long time to happen, or it may not happen at all, but if it happens, the consequences could be anything, including things like, say, total downfall of human society. As unlikely and pessimistic as that sounds, it has happened many times before in human history, and we should not be so arrogant to think that we are now somehow impervious to it.

As a game developer that sometimes makes the deeply regrettable decision of participating in online discourse, I've been called "delusional" and "an idiot" on multiple occassions for insinuating that I don't use a game engine. There's a rotten obsession with utilizing every shortcut necessary to finish a project as fast as possible, minimizing scope and quality, maximizing profit, and worst of all, infecting others with this sickness. Its a deeply self-centered way of working, and directly ties to the fact that the very concept of an abstraction is somewhat selfish:

"I will use this very substantial amount of deep gruesome work someone else did without understanding it, so that I can build my thing quickly and effortlessly"

However, don't misunderstand; by no means do I suggest that "we all program in assembly" as the so-called "software engineers" like to remark amidst dependency injecting their javas, or something. I use some abstractions too. Everyone does, and there's not much we can do about that. What we can change though, is how many we use, and how do we use them. Therefore I propose we meet somewhere in the middle, and with that I bring forth the handbook of the selfless programmer, a set of guidelines for everyone who wants to help us regain our understanding of software by lowering the amount of abstractions we use, and being responsible about those we keep.

Now, if you think this whole ordeal is just doomsaying, or you just couldn't care less, I still have something in it just for you, perhaps more than you think:

Thank you for reading.


1 LLM technology also counts as a software abstraction (when used for writing software).
2 That is very unclear, it seems to me that regarding efficiency we made a wrong step somewhere with abstractions, probably around Smalltalk.