If history is anything to go by it seems inevitable1 that a new language will dominate the next decade. A new language will also need to solve problems that matter to this expanded world and that the existing languages will be slow to provide (or find impossible to provide). Could that new language be Go?
Go is the most exciting new mainstream language to appear in at least 15 years and is the first such language that is aimed squarely at 21st century computers – and their programmers.2
What is Go?
Go has been in development at Google since 2007 and as an open source project since 2009.
Compared to most languages in use today, Go was designed with many programmers, concurrent systems, and large-scale problems in mind. Some languages, like C, were simply not designed at a time where multi-core and multiprocessor systems were in broad deployment. Some languages, like Python, weren’t originally intended to scale well onto multiple cores and have been slow to adopt strategies for utilizing such resources. Many languages to this day don’t have networking libraries which work predictably and have a clean, understandable API. Programs written in many languages, especially those with operator overloading, require in-depth knowledge of both the architecture of the program itself and the libraries in use in order to be able to understand the code well. Go attempts to address all of these problems and more; in my opinion, it does so brilliantly.3
Google researchers4 designed the Go programming language that helped them solve the problems they had:
- software needs to be built quickly,
- the language should: run well on modern multi-core hardware, work well in a networked environment, and be a pleasure to use.
Go, is a language that has the feel of a dynamic language like Python or Ruby, but has the performance and safety of languages like C or Java.
Python and Ruby programmers come to Go because they don’t have to surrender much expressiveness, but gain performance and get to play with concurrency.5
Organizations using Go
Since May 2010, Go is used in production at Google for the back-end infrastructure, e.g. writing programs for administering complex environments. Google wants to invest in it and the language is production-worthy.
Go is being used in many organizations beyond Google like BBC Worldwide, Novartis, bitly, Torbit, Conformal and Heroku to name a few. Here are some more companies using Go.
The First Ever Go Conference is being held in Denver CO, USA this April and their sponsors list has some interesting company names like Ubuntu, Paypal, Apcera, Stripe, Poptip, Canonical, Iron.io amongst many others.
I will be representing my company Josh Software at the conference.
Success Stories with Go
The Go success stories from around the web makes an interesting read too.
Why learn Go?
For me to invest the time to learn a new language, it must affirm at least one of these two questions:
- Is this a language I could realistically use in a production environment?
- Will this language grow my ability to solve complex problems in different ways?
After watching the Google IO videos, the answer to both of these questions appeared to be yes.
What’s been surprising about Go is how much complexity and cruft has been stripped away from C and C++, yet their fundamental structures still remain in Go. Ideas such as generics, polymorhpism and object orientation have been reduced to their most simple primitives in Go. Go is so minimal and feels so well thought out, that I marvel at how much I’m able to accomplish with such a small syntax and relatively few language features. Go is clearly a labor of love, with decades of well thought out language design baked right to its core.6
Some of Go Features
Here is a quick overview of some of the language capabilities:
- Concurrency7 baked right into the language with channels and goroutines.
- Open source, but with corporate backing (read “Google” and not going away anytime soon)
- Cross platform AND cross processor
- Native compiles with no runtime installation required (a huge win)
- Ultra-fast compilation speeds–even faster than JIT-based languages
- Speed of a compiled language, but feel of an interpreted language
- A built-in package management system
- C-based syntax (pros/cons here for different people)
- Strong typing and duck typing at the same time
- Synchronous, yet non-blocking IO using goroutines
We’ve found the community to be vibrant, active, and growing quickly. The number of libraries available to perform various tasks continues to grow at a rapid pace. Sure, it’s nowhere near the size of other mature languages, but it’s not a minefield of abandonware either.8
Go as a first language
This article makes the case for “Go as a first language” due to:
- Language simplicity: Go is not just free of cruft, it is also very well designed.
- Standard library: Go comes with well designed APIs for many of today’s requirements: HTTP server and client, JSON, Unicode, Cryptography, HTML and plain text template engine. If you are making a web application that does not need a database, the standard library has you covered.
- Formatting and coding style: In Go, this is a non-topic. The only acceptable formatting is the one generated by the
go fmtcommand. The compiler knows no warnings, there are either errors or no messages.
- Distributing binaries: Go generates stand alone binaries.
- Documentation: Everything about Go feels thought out and well made.
Uses of the language
- can be used for systems programming
- is a good fit for game server development
- can be used for Complex event processing
- is also a general programming language, useful for solving text-processing
problems, making frontends, or even scripting-like applications
However, Go is not suited for real-time software because of its garbage collection and automatic memory allocation.
Will Android switch from Java to Go?
Apple owns Objective-C. Microsoft owns C#. Google obviously does not own Java, which is a shame because they had their chance when Sun was heading toward bankruptcy and they missed it. If Google makes the switch from Java to Go for Android then Android developers will have to learn Go. In the long run it definitely sounds like something that would be ideal for Google since they’d have full control over what happens with the language. Since it’s such a friendly language they might even get developers to be interested in learning it, just like the vast majority of iOS developers had to learn Objective-C to make iOS apps.9
Go and Cloud Computing
Java is an amazing language but it predates the cloud. It is much easier to build and deploy high performance applications in virtual environments in Go.
Derek Collison (CEO, Apcera and former architect/technical director at Tibco, Google, and VMware) is also a big proponent and believer that Go will take over the core of the cloud computing infrastructure.
If Go could replace Java for cloud computing, what would that do to Oracle? It would remove a lot of connection to Oracle from companies in the cloud space and would ignite a whole new set of innovation based around Go libraries, frameworks, platforms and services. The lock-in that Java has within the enterprise would also dissipate as companies moved core areas of development to Go.10
The coming decade
So does the next decade belong to Go? Your guess is as good as mine!
Follow the ‘heated’ discussions on Hacker News and reddit.
- In the 1970s, Fortran and Cobol where champions. In the 1980s, we had Pascal and C. In the 1990s, Basic and C++. In the 2000s, Java and C#. In the 2010s we have Ruby and Pascal Python. Why would the years to come be any different? ↩
- Mark Summerfield in his book “Programming in Go: Creating Applications for the 21st Century” ↩
- Kyle Lemons blog post “Go: A New Language for a New Year” ↩
- Balbaert Ivo in his book “The Way to Go: A Thorough Introduction to the Go Programming Language” ↩
- Rob Pike in his article – “Less is exponentially more” ↩
- Blake Smith in his article – “Why You Should Learn to Program in Go” ↩
- Multicore is the future so I like that Go has concurrency built right into the core. ↩
- Jonathan Oliver in his article – “Why I Love Go” ↩
- Lucian Armasu in his article – “Will Android switch from Java to Go?” ↩
- Julie Bort in her article – “Google Has Created A Programming Language That Thumbs Its Nose At Oracle” ↩
17 thoughts on “Does the next decade belong to Go?”
I think you meant ruby and python for the 2010s.
Interesting article, thanks!
Pascal in the 2010’s???
As soon as Go adopts generics I will take a serious look at it. Until then…
Everybody has his/her favourite language feature, but for Go to maintain its simplicity and elegance, it has to be very careful about what features to add. Generics is no more important or desirable as any other language feature, and as I understand it, generics would complicate the language a good deal. I greatly admire Go’s simplicity and elegance, and that’s the **only** reason I am studying it right now; I hope to use it extensively in the future. Let’s keep Go nice and simple!
There are 3 considerations that too impact this emerging trend irrespective of the ‘efficiency and ease’ aspects of Go as a programming language:
1) Adoption by large PaaS platforms: Here it wins as its already a part of Google App Engine with good support + with cloud offerings like AWS its easy to set-up
2) Adoption by broader community: What I mean is adoption by the ‘mass’ irrespective of the inherit goodness of language. Take for example PHP, there’s so much stickiness just because of the huge amount of talent into it. Frankly in terms of adoption rates, PHP still is way ahead of Ruby or Python.
3) Availability of off the shelf CMS / Ecomm / Framework type systems: This is a key element that aids my above stated point 2. For instance a lot of Ruby popularity can be attributed to Rails. A lot of PHP popularity can be attributed to WordPress, Symphony, Codeigniter etc.
But all in all, it will be an interesting thing to watch this unfold.
@akshayraje – Well said. Replying to your points.
1. PaaS adoption was an effect not a cause. Lightly put, Go was conceptualised to solve modern problems with modern languages. Go has many usages beyond this.
2. Adoption by the community is like the snowball effect. Given the current open-source community traction and support, Go is going places. I would rank ‘adoption rate’ higher than ‘adoption numbers’.
3. Adoption because of frameworks is rather unfortunate (personal biased opinion). I personally belong to the ‘unfortunate’ group who picked up Rails and then fell in love with Ruby. However, I have a LOT more respect for people who learnt Ruby first and then also work in Rails. Having said that, in a world where speed and efficiency is of the essence, frameworks in Go are inevitable. Have a look at beego.me
We also have Martini (similar to Sinatra) and Revel frameworks for Go.
Reblogged this on Saichovsky's adventures in planet Tech.
Go when released in 2009 seem some spike and after it just became flat. Even Go performance is better than traditional enterprise language such as ‘java’, ‘.net’ and Go concurrent support using goroutines is much better than java still it fails to attract developer
Trend is anything but flat: http://www.google.com/trends/explore#q=golang
There’re 2 important things for anything in any era to succeed:
1> The corporate and/or political will to whatever policies for whatever products and for whatever governance in terms of the implementations of all. Success goes in hands of the owners when this mixture is balanced. Almost every great happening in the world qualifies this rule. And probably, this is how success is achieved, be that a democratic way or non-democratic way.
2> Support from the community for what is presented and how it’s presented to the masses.
All matters of success and failure revolve around these two aspects, IMHO.
When Android came into existence in Oct-2007, many people who had a very strong belief on C like programming languages, exited from that fork, with a realization that both the roads will have to meet at a common main stream road. Web-2.0 is the best example where client applications on devices, server programs, and browser based client programs had to co-exist.
One should stand tall for what (s)he firmly believes on. And then it’s its ability, again corporate will and political will and in accordance to the support from masses, decide the success or failure.
Google with the giant foot, has ability to dictate political and corporate will and has a huge luminescence around them to attract and thus gain support from masses. Read between lines. Google has a strength to throttle it down to the programming community in the best democratic means (the way it’ll be perceived by the masses).
Go has good future and so do the Go programmers.
While the comparison has been done between other languages and Go, it is like comparing apples with peaches.
My question being, does the golang offer something vastly different than node.js (and can be used instead) that is prompting people to switch to golang.
@sumitbisht in the case of considering Node.JS, and with all the arguments made before, don’t you think Google’s Dart would probably become the language of choice for the new generation of software developed for the client as well as the server.
Erm, Python was just as “dominant” as Java or C# in the 2000s. And Ruby was never dominant. In the 2010s, Java is **still** dominant and will likely remain so for quite a few more years.