A GO train in Southern Ontario, Canada

The Little Language That Could

Go is taking the world by storm, and many people are puzzled by that. I’m not.

In the past 18 months, the Go programming language has skyrocketed to prominence, according to Redmonk’s rankings. For a whole year, Go lingered at #28 (it was #32 in 2010).Then it quickly climbed to #21. Finally, it broke into the top 20 one year ago. Now, it’s firmly ensconced in position #15.

IEEE Spectrum

You gotta love this. IEEE Spectrum’s list of the Top Ten Programming Languages for 2015 is:

  1. Java
  2. C
  3. C++
  4. Python
  5. C#
  6. R
  7. PHP
  8. JavaScript
  9. Ruby
  10. Matlab

These languages broadly represent the interests of IEEE members. What do you notice? Six of these languages are dynamically typed!!! It would seem that dynamic typing is still very much alive and well. (This is the Smalltalker in me talking.)

The rest of the list is interesting, too. Go language is at #13…quite strong, surpassing Swift and Scala, and far surpassing D, Haskell, and Rust.

I even created an ad hoc index to see where Go stands, since PYPL is too limited in scope. Go does quite well, being in 8th position ahead of Swift and Scala, and far ahead of Haskell and Rust.

CodeEval places Go in 9th position, corroborating my own index. I believe that if Go is not yet widely a Top 10 language, it will be relatively soon. Its upward trajectory is undeniable.

(The TIOBE Index is rather pathological with respect to Go. According to their own definition, “go programming” brings in too many false positives, so they special-case Go by using the search term “Google Go programming”, where “Google” is required. WTF. Who searches for “Google Go programming”??? No wonder it ranks so poorly at TIOBE.

For what it’s worth, Go is finally back on February’s TIOBE at #38.)

Despite critics of Go (see here and here, for example), the language has been very well-received by the IT community. Why is this?

It’s not enough that Go has a major corporate backer in Google, nor that luminaries such as Rob Pike and Ken Thompson are behind it. For example, AtScript died, Dart is languishing, and GWT has not taken the world by storm, despite Google’s backing. Programmers place greater importance on utility than on branding. (Yes, Apple’s Swift is the exception; Apple developers have drunk the Kool-aid.)

So what is Go’s utility? In a word: simplicity. Go is a carefully designed language that balances feature set with ease of learning and ease of use. As with all such designs, there are engineering trade-offs, and while some people may question the choices made by the Go language team, the IT community has clearly embraced Go’s philosophy and benefits.

Rob Pike had interesting things to say at this 2012 keynote

Go’s purpose is therefore not to do research into programming language design; it is to improve the working environment for its designers and their coworkers. Go is more about software engineering than programming language research. Or to rephrase, it is about language design in the service of software engineering.

So Go is about pure pragmatism.

Syntax is the user interface of a programming language. Although it has limited effect on the semantics of the language, which is arguably the more important component, syntax determines the readability and hence clarity of the language. … Go was therefore designed with clarity and tooling in mind, and has a clean syntax.

Go is also about readability and clarity.

Software engineering guided the design of Go. More than most general-purpose programming languages, Go was designed to address a set of software engineering issues that we had been exposed to in the construction of large server software. Offhand, that might make Go sound rather dull and industrial, but in fact the focus on clarity, simplicity and composability throughout the design instead resulted in a productive, fun language that many programmers find expressive and powerful.

The problems that Google is solving are the same problems that most large companies face. That’s one of the main reasons for Go’s rising popularity.

Dave Cheney gave a wonderful keynote at Gophercon India, where he said:

If you would listen to language critics, they demand that any new language should push forward the boundaries of language theory.
In reality this appears to be a veiled request that your new language include all the bits they felt were important in their favourite old language, while still holding true to the promise of whatever it was that drew them to investigate your language in the first place.

He goes on to say:

Go is a language that chooses to be simple, and it does so by choosing to not include many features that other programming languages have accustomed their users to believing are essential.
So the subtext of this thesis would be: what makes Go successful is what has been left out of the language, just as much as what has been included.
Or as Rob Pike puts it, “less is exponentially more.”

The rest of his keynote is fascinating.

Go is a language for programmers who want to get things done.

Interestingly, Go is not the first language to pursue the strict goals of simplicity and pragmatism. In 1981, Per Brinch Hansen came out with Edison, a concurrent programming language that aimed for ultimate simplicity. Said Brinch Hansen:

In designing the programming language Edison I tried to do two things: (1) to achieve simplicity by questioning the necessity of a number of well-known language concepts, and (2) to gain new insight by deliberately approaching language design with a philosophy that is completely different from the spirit in which Concurrent Pascal was designed.
The first viewpoint gradually led to the omission of many language features that I had previously thought were valuable features of the programming languages Pascal and Concurrent Pascal, namely
subrange types
variant records
unnamed types
goto statements
case statements
repeat statements
for statements
with statements
cycle statements
init statements
multiple class instances
parameterized classes
process modules
process queues
If I were to do it again, I would go further and eliminate functions as well.
When you see the list of what is not in the language, you may wonder what is left. The answer is — not much!

A few years later, Niklaus Wirth brought us Oberon, which had pretty much the same objectives.

Golang’s FAQ provides responses to most of Go’s criticisms. It clearly shows the engineering trade-offs and the thinking behind the language designers, and I find them quite agreeable.

Here’s the thing: no matter what trade-offs you make, there will always be criticisms, because no programming language can be perfect. Ultimately, the question is whether or not programmers find the language useful. In Go’s case, this is not in doubt.

According to Donnie Berkholz, Go adoption is real and growing. The numbers of users worldwide are legion. Apparently, the design team’s engineering goals strike a chord with developers everywhere. Pragmatism. Simplicity. These things win out in the end. (Which is why I don’t believe Rust will ever supplant C for systems programming. It’s comparatively far more complicated.)

This little language that seems to be dull and lacking in modern language innovations has achieved what many critics thought was unlikely and unpropitious. It’s an inspirational success.

On a personal note, I picked up Go in 2014 out of curiosity. I was utterly astonished by the speed and ease with which I absorbed the language. This was an experience unlike anything else I had previously. And I’ve tackled many diverse languages such as C (the primary tool in my IT career), C++, C#, Objective-C, Java, Python, Fortran, and Smalltalk. Go’s syntax was clean and simple. Go’s tooling was easy to use and highly efficient. Go’s super speed at compiling gave it a dynamic feel. For the first time, I found a (statically typed) language that was as much fun as Smalltalk and made me just as productive! This is a remarkable admission coming from a Smalltalk devotee. Short of doing systems programming (where C is de rigueur), I’d use Go everywhere…server software, web applications, mobile apps, financial services, some classes of games, etc.

By the way, Go is great for web development. (Beego is crazy hot in China.)

UPDATE July 27, 2016: IEEE Spectrum have just released their 2016 language ranking and it shows that Go has risen to #10 spot.

UPDATE August 13, 2016: TIOBE have just released their August 2016 language ranking and Go has finally broken into the Top 20 at #20, a jump of 35 places from the previous month’s #55 position! Said TIOBE:

The restriction “Google” has been removed from the search queries for the programming language Go. Ilja Heilager sorted out that without the search term “Google” the resulting Go hits are still referring to the Go language. After having removed this restriction Go jumped from position #55 to #20. Thanks Ilja!

They might’ve read this article 5 months ago and made the correction earlier!

UPDATE November 6, 2016: TIOBE have just released their November 2016 language ranking and Go has jumped to #13. It should be a Top 10 language soon!