
The most painful point I feel while programming is that even when I think I've made something new, it still follows IoC within a framework and ultimately converges into a particular form.
I think I've written things pretty well in my own way, but in the end everything resolves into a specific shape according to a specific procedure. Use WPF and you end up with MVVM; use React and the difference is just whether you go with the App Router or the Pages Router, yet either way it leads to the same particular form. There's always the State Management problem, and that problem already has a model answer. People claim they each have the right answer about how far to push Server Components, but the answers that actually survive in the real world are already down to a handful. It's like how an essay exam talks about creativity, yet that creativity is ultimately judged by the panel of examiners. In the end, you just take someone else's pre-written answer sheet and assemble it like Lego blocks. Use WPF and the Boilerplate Code is unavoidable; try to escape it by assembling multiple frameworks and you end up with something like Hexagonal Architecture for framework isolation, which itself gets recognized as a well-known problem and turned into a pattern.
Some would argue that if you build solid Business Logic, you get new problems that don't yet have patterns. But most of the logic I encounter or conceive sits on top of a thin layer of Business Logic, so what's left is just the repetitive writing of Ports and Adapters, and even that core Business Logic ends up being simple, shallow work. I thought of myself as a developer, but I'm really just a plumber.
At first I thought I was building systems, but at some point I started feeling like I was just assembling Lego blocks in whatever way the system allowed. Programming feels less like free creative expression and more like filling in blanks within a pre-existing template. Ultimately, my work feels not like "creating something new" but like "filling in blanks inside a template that already exists."
And it feels like choosing whichever form breaks the least within already-known constraints.
This is true of every mature engineering discipline. Bridge designers also converge on a handful of structural forms, and they don't consider that a defeat. But a bridge designer, in the end, did not discover the truss formula themselves. Maybe I'm someone who wants to be the person who discovers that truss formula.
Some people say that's precisely why maintainability is possible.
Some people say that's precisely why changing jobs is possible.
People say those things, but sometimes I find myself in an existential struggle over what I even am.
A framework is an order that takes control away, and developers plug their code into the slots it provides: Callbacks, Lifecycles, Components, Bindings, Routes, Middleware, Service Containers. But now even that code is written by AI.
I suppose it's inevitable that building on top of what someone else conceived means you're destined to be a plumber. Of course, even within a framework you can carve out your own character. Games, in particular, seem to offer that.
Working on top of the main loop that Unity or Unreal provides, within the structure of physics calculation callbacks and the rendering pipeline, and implementing the world you have in mind within those constraints, that work definitely has its own distinctive character.
But achieving that distinctiveness requires assets and domain expertise that are hard for one person to handle alone. Code alone is not enough to build a world. You also need art, sound, animation, level design, direction, scenario writing, testing, and marketing.
The point is money.
In the end, programming for survival circles back to the same kind of repetitive work.
So the pain isn't that programming is simple. On the contrary, it's painful precisely because programming is powerful enough. It looks like you can build anything, yet what you actually repeat day after day to make a living is mostly fitting connectors together inside an already-defined template.
Programming for survival is always the same kind of repetitive work. I'm grateful for programming, but I'm just a number on a spreadsheet, a disposable part.
My sense of self is always hungry, but reality always keeps me shackled.
Someday I want to escape this hell.