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 @[email protected] 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 @[email protected] 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
@[email protected] 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 @[email protected] 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 @[email protected] 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?"