Today, computing is all about the cloud and the cloud is all about scaling. The numbers are crucial because successful web service operations sell into a global market at launch.
This could mean millions of users or even billions: in the 1st quarter of this year Facebook had 1.28 billion active monthly users. And each of those users will be generating scores of requests per day.
The new e-commerce players aren’t knocking out widgets in mass production lines, they’re providing always-on services that have to survive in the market not only by creating solutions to everyday problems but more fundamentally by providing a quality service of perfect consistency. How long would Twitter have lasted if it displayed the wrong tweets or took forever to update your twitter page with a new tweet?
Google Go – The Beginning
Go or GoLang is a programming language that was designed for the cloud and specifically for cloud computing’s demand for concurrency.
It has illustrious parentage, being co-authored by Ken Thompson, the man who developed Unix, Rob Pike and Robert Griesemer. They conceived and developed it as an alternative to C and C++ but it’s popularity is salient among the Ruby generation, mainly because just like the other challenger technologies, Go is simple to use and its coding is elegant and pithy. It gets the job done but with fewer lines of code.
The Go team didn’t want to create a kind of C-lite. They started from the ground floor and built a whole new language that does the work that C does but with less code, super-charged with more expressiveness.
In creating this new language they switched focus from the generic type taxonomies, with their rigid stratification, and instead focused on what the code can actually do for the programmer.
Google Go is lighter and more nimble in contrast the the highly stratified, features-heavy languages that Go provides an alternative to. Further, according to Pike, Go is a language that can work just as well as the incumbent technologies in big enterprise level projects.
“We started off with the idea that all three of us had to be talked into every feature in the language, so there was no extraneous garbage put into the language for any reason.”
Instead of winning over C and C++ developers, Go is getting an influx of engineers who are Ruby and Python afficionados. For software industry practitioners and observers like Rob Pike, it’s as if the programmers steeped in C are more concerned about the method they use to build client solutions as opposed to the Ruby generation who are more concerned about solving them.
It might not have the level of development that C++ has or the level of control it offers but Go, just like Ruby-On-Rails and Python, offers simple building blocks to engineer a solution to a business problem.
The pressure is on many business to build back-end infrastructure that can scale. This is why concurrency has always been prominent in the development of Go. In his account of the day Go first took shape, Rob Pike wanted to create a technology with “concurrency at [his] fingertips“.
There are other technologies out there that offer scaling solutions – functional programming languages like Scala are becoming more popular. But engineers proficient in functional programming are thin on the ground and in-house developers who are asked to start coding in languages like Scala face a steep learning curve. Google Go can be a preferred alternative in this situation.
Go in the Wild
With Go at large in the world it’s certainly exciting coders who have to work in high scaling operations. Tim Jenkins of SendGrid reported on his company blog that their programming teams experimented with Go solutions to their concurrency problems outside of working hours and effectively trained themselves up as a Go-ready solutions team, presenting a no-brainer to management as to which new technology to use in scaling their operation.
This is corroborated by the Red Monk chart below that shows Go’s uptake on Github to be exponential.
What about those developers from more mainstream technologies like Java? Some of them are starting to use Google Go as well but with caveats: Matt Stine, an engineer at Pivotal, as reported in Javaworld by Paul Krill, found Go to be a “fairly boring” technology.
According to Stine it doesn’t really compare to the “modern” feature-rich languages. Incidentally, this criticism of Go is something that Rob Pike saw as a virtue at the inception of the language. Go was a language that offered simple building blocks in engineering software projects.
But while being aware of its limitations, Stine is forthcoming about its strengths: Google Go works best in building “large, high-performance, server-side software”; it has a built-in library, which means the developer doesn’t have to look outside for add-ons, it’s a one-stop shop for building large scalable server platforms.
This is especially handy when it comes to managing concurrency. Java has no such built-in libraries which puts it at a disadvantage when it has to handle scaling. This is all in the expressiveness of the language. Go also offers the semi-automation of resource management.
The Go approach to solution building is to focus on the problem at hand and get it solved as quickly and as conveniently as possible. But this will evolve and become a more complex technology as flaws and inadequacies are uncovered and remedies developed: Infoworld senior writer Serdar Yegulalp revealed in April this year that the new Go 1.3 revision has more features added to it.
The list of companies using Go (albeit not exclusively) is growing and there are some heavyweights in amongst them. These include;
- Google, for many projects, notably including download server dl.google.com
- In 2012, SoundCloud’s Peter Bourgon wrote about why they use Go for “dozens of systems”
- Dropbox migrated some of their critical components from Python to Go in 2013 and wrote about it on their blog
- CloudFlare, the Content Delivery Network use Go for their delta-coding proxy Railgun, their distributed DNS service, as well as tools for cryptography, logging, stream processing, and accessing SPDY sites
As long as the people developing it remember to focus on the needs of the developer and not the methodology, this evolution of Go will continue as a boon and not a bane.
Main image created by and property of Christopher Hack