Why Software Engineers Should Embrace Go: Lessons from a Simpler Era

A deep dive into the programming language Go, exploring its philosophical underpinnings and implications for modern software engineering. This article reflects on the attitudes of today's programmers and draws contrasts with the past era of programming culture.
Why Software Engineers Should Embrace Go: Lessons from a Simpler Era
Photo by ThisisEngineering RAEng on Unsplash

Attention, Spoiled Software Engineers: Take a Lesson from Google’s Programming Language

The language Go hails from an era when programmers had smaller egos and fewer commercial ambitions. My generation of strivers has a lot to learn.

Many of today’s programmers—excuse me, software engineers—consider themselves “creatives.” Artists of a sort. They are given to ostentatious personal websites with cleverly hidden Easter eggs and parallax scrolling; they confer upon themselves multihyphenate job titles (“ex-Amazon-engineer-investor-author”) and crowd their laptops with identity-signaling vinyl stickers. Some regard themselves as literary sophisticates. Consider the references smashed into certain product names: Apache Kafka, ScyllaDB, Claude 3.5 Sonnet.

A regular column about programming. Because if/when the machines take over, we should at least speak their language.

Much of this applies to me as well. The difference is that I’m a tad short on talents to hyphenate, and my toy projects—with names like “Nabokov” (I know, I know)—are better off staying on my laptop. I entered this world pretty much the moment software engineering overtook banking as the most reviled profession. There’s a lot of hatred, and self-hatred, to contend with.

Perhaps this is why I see the ethos behind the programming language Go as both a rebuke and a potential corrective to my generation of strivers. Its creators hail from an era when programmers had smaller egos and fewer commercial ambitions, and it is, for my money, the premier general-purpose language of the new millennium—not the best at any one thing, but nearly the best at nearly everything. A model for our flashy times.

The Neoclassical Framework of Go

If I were to categorize programming languages like art movements, there would be mid-century utilitarianism (Fortran, COBOL), high-theory formalism (Haskell, Agda), Americorporate pragmatism (C#, Java), grassroots communitarianism (Python, Ruby), and esoteric hedonism (Befunge, Brainfuck). Go, often described as “C for the 21st century,” represents neoclassicism: not so much a revolution as a throwback.

Back in 2007, three programmers at Google came together around the shared sense that standard languages like C++ and Java had become hard to use and poorly adapted to the current, more cloud-oriented computing environment. One was Ken Thompson, a Turing Award recipient known for his work on Unix, the mitochondrial Eve of operating systems. Joining him was Rob Pike, another Bell Labs alum who, along with Thompson, created the Unicode encoding standard UTF-8. You can thank them for your emoji.

Watching these doyens of programming create Go was akin to seeing Scorsese, De Niro, and Pesci reunite for The Irishman. Even its flippantly SEO-unfriendly name could be forgiven. I mean, the sheer chutzpah of it. A move only the reigning search engine king would dare.

The language quickly gained traction. The prestige of Google must have helped, but I assume there was an unmet hunger for novelty. By 2009, the year of Go’s debut, the youngest of mainstream languages were mostly still from 1995—a true annus mirabilis, when Ruby, PHP, Java, and JavaScript all emerged.

It wasn’t that advancements in programming language design had stalled. Language designers are a magnificently brainy bunch with a reformist zeal for dislodging the status quo. However, what they build can sometimes resemble a starchitect’s high-design marvel that ends up having significant performance issues.

The Power of Go

From the get-go, Go was ready to go. I once wrote a small search engine in Python to sift through my notes and documents, but it was too sluggish. Rewritten in Go, my pitiful serpent grew wings and took off, running 30 times faster. As some astute readers might have guessed, this program was my “Nabokov.”

Exploring Go: The Programming Language of the Future

This is not to say that Go is a perfect language. It’s more workhorse than show horse. Released 15 years ago, it has faced a stream of critiques in the industry’s papers and forums, particularly Hacker News. Many find Go code ugly. There’s a procrustean uniformity to it, and it lacks the tidy shorthand of, say, Ruby or Python, leading to cluttered code. Ask a Go programmer about “error handling,” and you’ll unveil a deep discussion. Additionally, you can’t run the code with correct syntax unless certain stylistic conventions are strictly adhered to, akin to a word processor that won’t let you save unless your essay is grammatically flawless.

I’ll readily admit that Go lacks the ergonomics of newer languages. However, I suspect these complaints stem from a spoiled era. If the chief engineer of the first-generation Ford Mustang were tasked with designing a new line of cars, and produced models of practicality and workmanship, would anyone bemoan their absence of touchscreens?

It’s odd to think about the youth of computer science as a field. Alan Turing’s paper that launched the discipline is less than a century old, and we currently live in a time where pioneers are still alive and professionally active, even into their eighties. Go is a language crafted by individuals who had nothing left to prove.

Embracing a Late Style

It may seem a bit contrived to speak of a “late style” in programming. This notion, attributed to the German philosopher Theodor Adorno, touches on a growing contradiction and alienation in Beethoven’s later works. The literary critic Edward Said expanded on this theme in his posthumous work, discussing how some artists, when facing mortality, reject traditional closure while embracing fragmentation and unresolved tensions.

However, what captivates me more are cases where masters, in their later years, accept some degree of closure and, as Said put it, maintain a “spirit of reconciliation and serenity.” In our current social media landscape, we often witness the sobering spectacle of supposedly accomplished individuals—especially in technology—engaging in unseemly calls to account for their various baggage.

Yet when I reflect upon Go, a sense of serenity permeates my thoughts. Instead of sparring with younger discontented figures, the Go team directs you to their FAQ page—the gold standard of FAQ pages—crafted in a gentle, statesmanlike tone. And with that, they rest their case. It’s comforting to think that such tranquility is attainable in one’s work. Perhaps my generation can learn to temper our egos and discover our footing as well. We still have a few decades to make it happen.

Understanding the breadth of programming languages and their philosophies