(This post is based on a twitter thread, so if you’d like the tldr up front start here)
The tech industry is notoriously fixated on a pathological version of Modernism politely euphemized “minimalist.”1 I’m going to try to convince you, dearest reader, that this is because our culture is profane and rotten,2 and that the tools we’ve made are just outgrowths of that profanity. Let’s talk about everyone’s favorite burrowing mammal.
The humble gopher
I want to say up front that I’ve written a fair bit of Go, and on a purely technical level I think it’s a decent language. This isn’t an attack on people who use Go, or even the people who created it. The things we create express the ideology our culture stews us in, totally independent of our intentions.3
Greetings, Henry Ford!
Go is a language that only a megacorp could produce. It doesn’t aim for elegance. Its minimalism isn’t parsimony of characters. It’s about keeping the complexity of any individual line low. It’s the first language (or at least, the earliest I know of) to treat its autoformatter as a first class citizen. It is so committed to One True Style that common stylistic choices in syntactically similar languages are parse errors.
Go code is homogeneous way beyond what you see in other languages. People have habits. They put recognizable little flourishes in. You’ll see this even under a strict style guide. In C++, in Python, in Scala, etc, if you’ve seen someone’s code enough you start to recognize those things. In Go, you often can’t because they’re not there. The language’s official documentation encourages using short (think 2-3 letter) variable names when possible. Without complex abstractions, there’s very few ways to put together a Go program. And since syntactic style is enforced at the parser level, the whole thing pushes people into writing near-identical code.
Why do this? What’s the point? Well, it gets back to the pathological minimalism. Go takes “function over form” to such an extreme that it actually tries to remove form entirely. Go believes that code should not be subjective. It’s an attempt to pare down a language to a set of purely utilitarian features, with no space for the aesthetic.
It’s a warped view of programming, I think. Programming is not paint-by-numbers, it’s an artform. Go tries to turn the developer into a code widget-producer, which requires cutting away the room for self-expression. It means stripping away the personness of the person producing code. But it’s perfectly in line with how Silicon Valley’s ideology pushes itself forward. We attack culture, because it creates “friction” for our beautiful automated vision of the world
in which Peter Thiel hooks us all up to blood extraction machines in vast factories.
Human experience is messy. The process of creating things in a human manner is complicated and uneven. Uber, Taskrabbit, and in its strange way Go are all attempts to make the people actually doing labor totally interchangeable. It may seem like a stretch, but fundamentally they all do the same thing: They try to strip away the complexity and sand down the unevenness. That leveling happens elsewhere, too: I think the same moral rot underlies what Kyle Chayka called Airspace. I’m convinced it’s what produces the sense of unsettling unreality Anna Wiener captures Uncanny Valley.
The artifacts we produce say a lot about us. It should worry us that, when given the freedom to produce what we wanted, some of us produced Go.
The ordinary term is “pigshit.” ↩
And capitalist! But I repeat myself. ↩
What I’m saying is, don’t @ me. And don’t @ Rob Pike either. Thx. ↩
“The unenlightened peasantry just aren’t smart enough to know what’s good for them, so we enlightened nobles must bear the burden.” It’s…not a coincidence that the FP community attracts reactionaries. ↩