by Harshavardhana

Comparing early days of Go and Java

In the last 2 years Golang (or simply ‘Go’) has raised to the ranks of mainstream programming languages like Java, Python and C/C++. Companies like Google, Docker, DigitalOcean and more have picked up Go to build their modern cloud infrastructure tools.

Since its first release January 21, 1996 Java has succeeded far beyond anyone’s expectations. From mobile apps to mission critical financial software Java is ubiquitous today. Comparing the Go’s pace of growth with Java, some enthusiastically speculate if Go could be the next Java or at least raise to an equal stature.

While Java has been around for close to 2 decades, Go is relatively young. First stable release appeared only 3 years ago. It may be premature to compare Go to Java at this point in time. However there is preliminary data to compare the early days and current trends of both the languages.

Early days of Java and Go

Java

Language History

James Gosling, Mike Sheridan, and Patrick Naughton initiated the Java language project in June 1991. Java was originally designed for interactive television, but it was too advanced for the digital cable television industry at the time. The language was initially called Oak after an oak tree that stood outside Gosling’s office. Later the project went by the name Green and was finally renamed Java, from Java coffee.

In 1991 Java was definitely ahead of its times. In the first 4 years, Java re-incarnated itself couple of times before it reached its final form. Java was strongly influenced by Objective-C, Smalltalk and Modula. The goal of Java was to be a modern object oriented portable language that is also high performance, robust and secure. It got its fundamentals just the right proportion to be sophisticated and simple at the same time. Java’s byte code approach and virtual machine implementation was just brilliant.

1*DwcjXJc0_86RsSMD0TpfFQ
Java Books sorted by Library of Congress Classification call number at the York University in Toronto. — Source: https://commons.wikimedia.org/wiki/File:LibraryOfCongressClassification.jpg

Go

Language History

Robert Griesemer, Rob Pike, and Ken Thompson started designing Go at Google in late 2007, to address the software development problems Google was facing.

Go also took the same four years to mature from concept to version 1, similar to Java and most other languages. Go was strongly influenced by Modula, Pascal, Oberon and Newsqueak. It was born out of frustration with the existing system programming languages. Go was designed to be a fun language and at the same time it is productive, practical, expressive and powerful. Programmers could sense how Google might have influenced Go’s design choices and tooling, but who wouldn’t want to inherit Google’s best practices. Go’s highlight is efficient go-routines, channels and fast compilation.

1*M_Z5dQRwX9SsPS-WTqIBGw
Source: https://commons.wikimedia.org/wiki/File:Golang.png

Java is popular both in the open source and proprietary world. List of popular projects and companies using Java is endless. It is one of the most proven and mature modern languages of our times. Java’s biggest strength is the availability of experienced high quality software developers across the world. Here is a gist of notable open source projects in Java.

  • Junit
  • Eclipse
  • Spring
  • Solr
  • Hudson and Jenkins
  • Hadoop
  • Android
  • ElasticSearch
  • Apache Commons

Since Go is in the early days of adoption, its list is nowhere comparable to Java. However the adoption Go already has received at this stage by organizations like Google, Dropbox, MongoDB, The BBC and SoundCloud is noteworthy. Leading trend in the industry today is cloudification of the enterprise software stack. Go is rapidly growing as the language of choice for cloud infrastructure and tooling projects. Here is a list of notable open source projects in Go.

  • Docker
  • Kubernetes
  • Deis
  • CoreOS
  • InfluxDB
  • Packer, Consul — by Hashicorp

Java Growth Trend

Java has outlived its expectations and it’s already on the decline. It has been falling gradually since 2005. Not much data has been collected publicly before 2005, but this sufficient to make a comparison with Go.

1*BDyOwdX_LFfNhxmUXHMcKA
Source: http://www.google.com/trends/explore?hl=en-US&q=/m/07sbkfb&tz=Etc/GMT%2B8&content=1

Go Growth Trend

Go has been experiencing phenomenal growth since 2011. While Java has been declining Go has been growing at a rapid pace. However if you overlay the plot you will notice Go has a long way to go.

1*30uaOSR9eQ5HeMCt1-l7sw
Source: http://www.google.com/trends/explore?hl=en-US&q=/m/09gbxjr&cmpt=q&tz=Etc/GMT%2B8&tz=Etc/GMT%2B8&content=1

Maturity

Unquestionably Java is one of the most mature programming languages today. Anything above version 3 is considered “ready for prime time” in the enterprise world. Java is already on its way to version 9. It is supported by all major operating systems and hardware architectures.

Major release versions of Java, along with their release dates:

  • JDK 1.0 (January 21, 1996)
  • JDK 1.1 (February 19, 1997)
  • J2SE 1.2 (December 8, 1998)
  • J2SE 1.3 (May 8, 2000)
  • J2SE 1.4 (February 6, 2002)
  • J2SE 5.0 (September 30, 2004)
  • Java SE 6 (December 11, 2006)
  • Java SE 7 (July 28, 2011)
  • Java SE 8 (March 18, 2014)

Compared to Java, Go is still in its infancy. Latest stable release of Go “v1.6” happened just weeks ago. Go has a vibrant collaborative community driven approach and frequent release cycles, approximately every 6 to 8 months. It is easy to foresee with this approach Go will reach maturity sooner than Java.

Major release versions of Golang, along with their release dates:

  • go1 (released 2012/03/28)
  • go1.1 (released 2013/05/13)
  • go1.2 (released 2013/12/01)
  • go1.3 (released 2014/06/18)
  • go1.4 (released 2014/12/10)
  • go1.5 (released 2015/08/19)
  • go1.6 (release 2016/02/17)

Conclusion

It is too early to tell if ‘Go’ will ever replace Java or even reach its level of ubiquity, but quite certainly Go will make a long lasting impact in the general purpose programming languages category forever. It is likely to replace more of Python, Ruby, NodeJS, Perl, C, C++ environments before it makes any noticeable dent in the Java landscape.

1*ad_35CJ0Nx0XE0pbuGEaHg
Playing Go — Source: https://commons.wikimedia.org/wiki/File:Playing_weiqi_in_Shanghai.jpg