Go Ahead

What’s Past is Prologue

I’ve been programming computers since the days of the Commodore 64. I guess that means my programming experience is properly measured in decades. In the three decades I’ve been instructing computers to do my bidding I’ve done so primarily in a handful of mainstream languages.

If you squint your eyes and don’t worry about a year or two here or there the decades break down as follows.

Once More Unto the Breach

I am now at the beginning of my fourth decade of writing software and—once more—my primary language seems to be changing. Since the beginning of this year I have been coding almost exclusively in Go.

Although I have been using Go professionally for only a few months, my adoption of Go took place gradually over the last four years.

In late 2013 we made the decision (at work) to rewrite an old C++ application. It is a distributed application that must deal with a lot of concurrency and run on both Windows and Linux. The choice of language was between Java and Go. We knew we could do it in Java, but I thought Go was a better fit. After some proof of concept work my managers were persuaded. Eight months later I am glad we chose Go.

I Like This Place and Willingly Could Waste My Time in It

In his essay “Most Software Stinks!” Charles Connell wrote about seven qualities that he felt all beautiful software possesses. He suggested that of those seven qualities simplicity is the most important. He also suggested that the simplicity of a program tells us something about the ability of its authors.

Junior programmers create simple solutions to simple problems. Senior programmers create complex solutions to complex problems. Great programmers find simple solutions to complex problems. — Charles Connell

The idea that simplicity is a worthy design goal is not new. I was first told to “keep it simple stupid” in the late ‘80s, but the KISS principle has been around since at least 1960. Although the idea is not new, we must all learn it in our own way and our own time.

Good decisions come from experience, and experience comes from bad decisions. — Unknown

It seems to me that the the Go designers are great programmers who have learned from plenty of bad decisions in the past. They have kept Go simple without sacrificing expressiveness. They have wisely chosen the path of including only what is good for the language as a whole.

Perhaps more importantly, however, they are leading by example. The community that is growing around Go appears to value simplicity. Maybe that is self- selection bias at work, or maybe the language and standard library act as models that educate the community about the value of simplicity. Regardless, I have found the language and community invigorating.