In our company, we adopt microservices architectural and it’s allowed us to decide our own programming language and technology stack. And these are 3 most chosen language: Ruby, Java, Golang.

Which one is better for microservices? None. I always believe that choice of language and architecture design decision is subjective based on knowledge, experience and preference of developer. Even design pattern almost felt like propaganda for me. Every programming language has pro-contra and it’s not only single person decision. Golang maybe powerful, but will you choose if only yourself that able writing the code in whole company? We must consider people, learning curve, team culture and project needs before choosing the language.

Disclaimer: This writing is my personal opinion of java/ruby/go without any intention to disregard specific programming language.

Ruby

Programmer’s best friends ~Rubyist

The reason for me to using Ruby because of Ruby on Rails framework. This framework offers convention over configuration which is saving much time and effort because developer don’t need to decide many aspect of development. Rails have clear standard how to organize file, testing, handle database, etc. We even doesn’t need to write code from scratch, just scaffolding then edit few line of code. Development is fast and it’s easier to apply TDD and rotate programmer to another rails project. Many framework is also inspired by rails.

However the language itself is relative slow, not mentions it doesn’t support real multithreading too. Using JRuby is a better option than Ruby MRI. The rails itself design to develop web application based on best practice (rails conventions), so it may tricky if you need to make custom configuration or something different with the conventions.

Ruby on Rails is a great choice for developing simple portal or RESTFul services in a short time.

Java

A Programmer had a problem. He decided to use Java. He now has a ProblemFactory. ~Java Joke

Java is object-oriented and mature programming language. Most developer already familiar with this beast and I doesn’t wanna say much. Regardless its bad and good, Java is still industry standard of how a programming language should be. Maybe it’s most supported language in open source community, especially on apache community. In search of java-killer-language, another programming language is born yet running on top of JVM like Scala, Kotlin, Clojure, etc.

I was working with java for mobile apps, automation tool and some services but I still don’t have preference library/framework for backend service. I have a short experience with Spring Hibernate and not fans of it. Spark Framework and Play Framework seem promising, however, java itself have too many configurable and boilerplate that slow the development process. You also need to tunning the JVM for best performance. So development wise, I want to avoid using java beside it may have good performance.

Java probably the best option for a project that required some apache software or has some open source dependency. Java also a good start to learn programming since it’s straight forward, conceptual and less magical than most popular programming language today.

Golang

To put it simply, if Docker had not been written in Go, it would not have been as successful. ~Solomon Hykes

Go or Golang is language created by Google. It’s native programming language which produces binary program that running directly on top of machine hardware, yet it’s cross platforms so the source code for Windows is same as for Linux. The deployment is easy (just copy paste the binary) and the performance is good by nature.

Coding in golang is quite simple and kinda felt like writing some scripting language. However it has unique programming paradigm and philosophy. Object-oriented approach in golang is not inheritance but using composition. It doesn’t support exception since it threat error as value.

Concurrency is one big plus of golang, it’s using parallelism instead of multithread. The lightweight thread in golang called goroutine. Every goroutine is isolated with another goroutine and only can communicate via channel. So no more lock for synchronization. Golang even doesn’t provide pool by default, maybe because goroutine is super cheap, 1000 goroutine is comparable to 10 regular thread.

Garbage collection and pointer also nice. We can say that golang have better garbage collection compare with other so far. Check my post regarding memory on go.

I like Reflection library in golang too, it’s much easier compared to java. However, collection library is not so good.

Because golang relative young, discussion is still happening around best practice on golang. The choice of library is not as many as other popular languages.

I prefer Golang for any possible project because of brute strength and simplicity.

This article have be repost on medium