The problem with current day programming and its causes
Current day (2021) programming (aka telling computers what to do – pretty much everyone needs to do that these days) has a severe and worsening accessibility problem.
A top level symptom of this accessibility problem is that most of us have become degraded to so called "end users".
And when we as "end users" encounter/pass-by obvious trivial problems that we would expect to be able to easily fix
(for ourselves and others) in a mere few minutes then to a good chance we absolutely can no longer do so.
A very frustrating and damaging experience that continues to grow worse.
In the following an analysis of underlying sub-problems and causes of the symptoms:
Problems
Job caused by flawed fundamentals: "full stack developer"
– There is a big (and growing) stack of tools that needs to be learned before we can even to begin
"to tell computers what to do" beyond what the developers designated to be possible for "end-users".
It has gotten so bad that a job description emerged: "full stack developer".
Situation caused by flawed fundamentals: ridicule of proposals for fixing the fundamentals
– Code can't be accessed and fixed directly from within the space designated for the "users" (typically GUIs).
Overall the "wall of inaccessibility" between designated "users space" and designated "developer space" seems to have been steadily growing.
Only locally shrinking maybe a bit sometimes but never overall shrinking.
It has gotten so bad that even suggesting that something could almost totally remove that barrier can make one subject to ridicule.
Guess what's going to be suggested here ...
Process caused by flawed fundamentals: "deployment"
– Publishing something that is more than "locally running toy code" but
a part of an interactive online program (even if it's a tiny trivial change like adding a button trivially combining some data)
has become increasingly difficult.
It has gotten so bad that this bloated unnecessary process now has attained a name: "deployment".
And a whole terminology and an "industry" has evolved.
Dilemma caused by flawed fundamentals
– The current tools for programming have ...
- either a deterringly steep learning curve ...
- or quickly run out of expressiveness.
Likely causes (high abstraction level)
The causes for these problems (on a very high abstraction-level) are likely twofold:
- (A) the increasing centralization of the internet – an emerging governance problem – (Philosophically: This may perhaps be an "eternal" problem of any intelligent social life that periodically waves up?? maybe ...)
- (B) a technical software crisis – (sheer technical difficulty and an economics caused focus on short term investment focusing on fixing symptoms rather than fixing causes)
For what can be done regarding point (B) see:
- ultra fine-grained content addressedness
- consistent progressive disclosure
- Future of human computer interaction (Higher level computer interfaces for deveusers)
- Projectional editor, Structural editor
- Making programming a nicely guided puzzle game Typed holes
- Purely functional programming, Visually augmented purely functional programming
Perhaps especially noteworthy:
- The Hazel project (Cryus Omar, David Moon, Andrew Blinn, et.al.)
- The various explorations of Jonathan Edwards (especially newer work on versioning/diffing)
A lot of the work of seems quite relevant.
- High level: Tangible values (Conal Elliott)
- Low level: Compiling to categories (Conal Elliott)
The "annotated lambda diagrams" (ALDs) discussed here
would also be an attempt in tackling the latter point: (B).