I'm very dissatisfied with the current state of the world in two regards:
𝐀. Computer owners can't easily understand or modify programs they run.
𝐁. Computer vendors compete to limit permissions for modifying programs.
Both 𝐀 and 𝐁 have happened through the efforts of often idealistic people, but they've brought us to a world that it seems clear is going in the wrong direction:
- For 𝐀: Every tool (IDE, debugger, programming language) and process (Waterfall, TDD, Agile) arose out of dissatisfaction with some current state of the world, but the "pragmatic" ones that gained traction were the ones that vendors get to control.
- For 𝐁: "Trusted computing", browser sandboxing and app stores are all "pragmatic" solutions that have centralized power in vendors and failed to keep computer owners safe.
These pragmatic solutions in turn led to more idealistic attempts to solve 𝐀 and 𝐁.
First 𝐁: Various movements (open source, right to repair) and specific actions (forking browsers, forking app stores) have tried to limit the power of vendors, but they have only ever succeeded by creating new vendors. These methods don't point towards a synthesis.
One idealistic way to get 𝐀 has been a movement toward making better use of run-time experience during the process of understanding a program. Let's call it 𝐀1.
One idealistic way to get 𝐀 has been to "render unto vendors that which belongs to vendors" and focus on domains that lead to a certain desirable social organization. Perfect freedom to make changes within a perfectly egalitarian group. Let's call it 𝐀2.
(Confusingly, 𝐀1 and 𝐀2 have both been called "live" at different times. I now tend to think of 𝐀2 as "jamming". But that's just me; I'm a nobody who hasn't integrated very far with either side.)
Moving along, a third idealistic way 𝐀3 to get 𝐀 has been attempts to move the representation of programs closer to the problem domain, to more easily convey the essence of a solution. This way tends to be called "visual", which also feels like a misnomer.
None of these has tried IMO to integrate 𝐀/𝐁, to think about the vendor/owner divide at all. However, one school 𝐀𝐁1 has and remains close to my heart: "malleable". The vision here is programs distributed by vendors who share an ethos to support owners. Lots of technical problems to be solved, but the essence of "malleable" for me is the sociopolitical ethos or stance to enable customization that is a prerequisite to doing anything here.
In the end, none of these goes far enough for my taste. I find myself in the camp 𝐀𝐁2 of "code literacy". There's a tight analogy here with prose literacy: anyone can read a novel, anyone can write an email, anyone can write a short critique on a novel, but only a few "vendors" can write novels. These goals are often aspirational in practice, but we have made huge strides in their direction over a thousand years. I want above all to bring code literacy to a similar point to prose literacy: anyone can drill down to understand a large program as it affects them, anyone can write short programs for themselves, anyone can modify large programs in small ways for themselves.
It seems really important for all camps of idealistic people to engage with the hard constraint Russell Power reminded me of, the initial post Ⅳ that led me to write this. Ever since Alan Turing and George Pólya we have known that it is impossible to systematize problem solving. Today we have close to all factual (and also non-factual) knowledge at our fingertips, but we are not close to (and I believe we will never come close to) the ability to solve all problems at our fingertips. The universe of problems has infinite variety at infinite levels of detail. All we can do is share solutions to small zones of problems that pioneers before us paid dearly for with the coin of time, and to make any of them easier to import into our brains when a situation requires. And even this we can accomplish only if we are all open to changing ourselves, to learning, to growing in some essential way closer to those pioneers.
This worldview may seem elitist, and I would very much like it to be. However, I think we are all illiterate by this standard. We live in a pre-literate society where even we programmers can only easily read short programs we wrote ourselves. Not too long ago.
[Ⅰ] Steve Krouse, "The role of the human brain in programming"
[Ⅱ] A recent thread on the Malleable Systems forum
[Ⅲ] The LIVE Primer (still under construction)
[Ⅳ] Russell Power, "Reflections on Sudoku, Or the impossibility of systematizing thought", via Bill Mill
(This post is a spiritual follow-up to this post from 2021 and this asynchronous workshop of sorts that I facilitated at FoC in 2024.)
This post is part of my Freewheeling Apps Devlog.
Comments gratefully appreciated. Please send them to me by any method of your choice and I'll include them here.