AGAINST COMPLEXITY IN COMPUTING
-------------------------------
Post by Rusty 


## Preface

This essay is meant as an exploratory manifesto rather than a penetrating 
& detailed analysis of computing's state in 2019. I do not have the 
qualifications--I am not trained in computer science--nor do I have the 
patience--such an analysis would take years & require intense 
collaboration. I do, however, weave together a set of ideas meant to 
benefit user freedom, a set of principles that I try to adhere to in my 
computing life. I am heavily indebted to many knowledgeable & thoughtful 
folks: my comrades @ Rhizomatix Blog, computer-savvy observers on 
Mastodon's federated instances, & organizations trying to change the 
conversation around technology.
 

## Stakes is High

0.0 Mastodon user @uranther@hackers.town once shared this quote from 
Edsger W. Dijkstra, structured programming's great advocate: "Computing is 
about controlling complexity, and we have failed miserably." 

0.1 Computing has become too complex, especially in regards to the 
internet. I'm attacking the complexity in process, architecture, resource 
use, & design. I'm attacking the complexity introduced by both developers 
& users.

0.2 Decentralized, user-empowering computing programs & networks need to 
be simple to understand & implement if there's to be any hope of 
widespread adoption. Big tech offers already offers programs that are 
simple to learn & intuitive to use. These programs are exceptionally 
complicated under the hood though. The hidden complexity is where Big Tech 
successfully manipulates users. If complexity is a portal for 
exploitation, then developers need to build programs that provide both 
simple interfaces & architectures. When users fully understand HOW their 
programs work, they retain their control over the computing experience.

0.3 We've reached a weird state. The simplest programs now are some of the 
most alien because most of us have either forgotten or never learned 
computer basics. We rely on computers all the time, but know very little 
of how they work as machines. Just ask the average person what RAM means & 
what it does in a computer. I'm not immune from my own criticisms. I have 
unsystematically acquired my knowledge of computers which means there are 
glaring gaps.

0.4 This essay ain't no lifehack bullshit. Marie Kondo & lifestyle gurus 
can fuck off. I love minimalism as a philosophical concept, but I despise 
how the term "digital minimalism" has been co-opted by charlatans. I'm not 
talking about living your best life here. I'm talking about making 
computing accessible to everyone. I'm talking about how better computing 
practices can nullify power imbalances. I'm talking about reviving old 
dreams left unfulfilled.


## Some Problems

1.0 Bitreich Manifesto: "We live surrounded by complex software which 
receives new versions and updates day after day. RAM and CPU consumption 
never reduce, they increase. Software still provides the same features 
from years ago, but everything looks new." As Guy Debord noted in the 
1960s, capitalism hides the emptiness of its pleasures by constantly 
updating their appearance. Computer technology only accelerates this 
tendency.

1.1 Websites demand more & more resources from users' machines. Low-Tech 
Magazine charted these changes: in 2010 the average site had a "weight" of 
0.45 MBs; in 2018, the average site weights 1.7 MBs. The increased 
consumption of memory & power is making computing environmentally 
unsustainable. Complex operations burn out computers quicker, increasing 
the demand to manufacture more machines. The making of computer components 
is the most energy intensive expenditure associated with them.

1.2 Bloated web design is rewarded. We live in the so-called "attention 
economy" & designers feel pressured to use flashiness in order to increase 
user engagement. Then there is feature creep, bored designers adding more 
& more features. I myself have witnessed websites sending 120 different 
forms of JavaScript to my computer & still not function as intended. The 
satiric Motherfucking Website sends out this message to designers: "What 
I'm saying is that all the problems we have with websites are ones we 
create ourselves. Websites aren't broken by default, they are functional, 
high-performing, and accessible. You break them. You son-of-a-bitch."

1.3 Complexity has also severly reduced the number of viable 
architectures. One can no longer simply build programs from scratch; there 
are too many factors to consider. Consider what Mastodon user & Rhizomatix 
Blog comrade @erkin@mastodon.sdf.org told me on Discord: "The current 
state of web browsers bothers me. 99% of currently maintained engines 
either descend from Gecko or KHTML lineage, or aren't suitable for 
anything beyond light browsing. Actually, make it 100%, now that EdgeHTML 
is dead. It's more or less impossible to write a new engine from scratch 
now that WWW turned into a pile of overengineered cruft." A Google 
developer wrote a blog post in which he even admitted that it took him 
hours upon hours to figure out why his Gmail account once froze. If 
developers can't figure out problems, what hope is there for average 
users?

1.4 It does not help that for decades users have been actively warned 
against tinkering. As Chris on Libre Lounge notes in episode 21, "Command 
Line Culture": "In a lot of operating systems, we've intentionally set-up 
this barrier, 'Well, you're not supposed to touch those computery things 
under the hood.' Right? 'Those are for the people who are making this for 
you.'" Whenever I open "about:config" in Firefox to tailor my settings, 
Mozilla warns me that my actions may void my warranty. It's an effective 
deterrent for users less stubborn than me.


## Minimalism as a Solution   

2.0 Computing's current state is not inevitable; we can collectively 
change its direction by transforming our values. Bitreich elegantly states 
those notions: "Software has to not misbehave, it has to follow our rules, 
it has to be reusable, it has to be easily maintainable, it has to provide 
its recompilable source and it has to be easily understandable."

2.1 Minimalist computing should front-load content, making it easily & 
universally accessible. Aesthetics should only aid in use & never take the 
focus away from the substance. This will put into practice the tenth 
principle in Dieter Rams' manifesto, "Ten Principles for Good Design": 
"design should therefore be both neutral and restrained, to leave room for 
the users self-expression."

2.2 Many answers lie in our computing past, especially the start of the PC 
revolution, when fostering a DIY attitude among users was more encouraged. 
In the frenzy for innovation, we left behind a lot of good ideas. Yet as 
@enkiv2@eldritch.cafe reminds users on Mastodon: "A part of that is 
engaging with retro tech, but when doing so, we need to distinguish 
nostalgia & aesthetics from serious analysis." We need to explore the 
computing past in order to rediscover unexplored ideas, not recapture past 
experiences. I want to learn from Paul Baran's early ideas about 
distributed networks, but I don't wish to compute like it's 1964.

2.3 While they're not visually attractive, early computer features such as 
the command-line interface have the power to reduce our contemporary 
digital noise. Mastodon user @bob@soc.freedombone.net describes how: "With 
a command line your eyes aren't roaming around the screen a lot, you're 
not dragging anything to anywhere. It's just typing on the keyboard and so 
there isn't any 'hidden state' from a user interaction perspective because 
the keys are right in front of you. There aren't any distracting images. 
There are no ads." The command line could reintroduce focused 
concentration into our computing lives.

2.4 The Gopher protocol's potential has never been fully explored. 
Developed in 1991 at the University of Minnesota, Gopher is a method for 
retrieving files from straight-forward directories on multiple computers. 
For a time, Gopher & the web were equal in popularity, but after the 
advent of Mosaic, the web quickly became favored. But Gopher didn't die. 
Its simplicity kept it alive: it requires little knowledge to set-up & it 
requires little in terms of resources. Gopher has been left unscathed by 
what Mastodon user & Rhizomatix Blog comrade @gcupc@glitch.social dubs, 
"the original sin of complexity." Gopher is minimalist without even 
trying, its structure unable to adopt the features that bloated the web. 
As Rob Bigelow states on his Gopher blog, or "phlog": "Because it doesn't 
use 'cookies,' display images, support Flash, Java or Java-script, Gopher 
may be the last commercial-free space on the Internet." We can return to 
the Gopher protocol not to revel in a pre-web state, but to figure out 
what is essential & functionally useful in internet protocols & what are 
distractions.


## End Note

3.0 I summon Edsger W. Dijkstra's ghost again, this time words from 1972's 
ACM Turing Lecture, "The Humble Programmer": "The competent programmer is 
fully aware of the strictly limited size of his own skull; therefore he 
approaches the programming task in full humility, and among other things 
he avoids clever tricks like the plague." Dijkstra's lecture notes from 
the late 1960s & early 1970s are full of these sorts of exhortations. The 
reader gets the sense that he's talking to himself as much as he is his 
colleagues. Reading these notes in 2019 is absolutely refreshing. 
Dijkstra's words are empty of the arrogant tone & perspective that's the 
standard operating norm for technological discourse today. Silicon 
Valley's messianic/dystopian pronouncements have infected cultural 
perspectives on technology & led us to a confused place. My humble & 
fractured essay asks, "Why don't we change the nature of our relationship 
to computing?"