JVM wars 2021: a review
We recently hosted our third annual JVM Wars event, and what a debate it was! We love to see how the facts and figures as well as the public consensus on JVM languages evolves year on year.
Last year JVM Wars 2020 resulted in a dead heat with Clojure and Scala both getting 34% of the votes! In advance of our 2021 event, we put a poll out on Twitter (we just couldn’t wait), which resulted in a clear front runner of Java with almost 50% of the 1000 votes.
Read on to see if this was reflected in your votes on the night!
This year’s JVM Wars, the Scala representative was you, our brilliant audience! Despite one of our speakers needing to pull out of the event, Scala remained very much in the fight, with everyone flying the flag for Scala coming through for us even louder in the chat! You guys got vocal and gave us some great insight, making your case as to why Scala in your opinion is the best JVM language.
First up we had Ana-Maria representing Java. Ana-Maria is currently working as a developer advocate for Red Hat and has been a passionate Java developer for more than 15 years. (Extra points for attending complete with a JVM baseball cap!)
Here are some Java highlights:
“Java has the fast learning curve command, and probably most of us started in university with this language. We know that object oriented programming is famous for that. It has great tooling support, no need to change the ID, so you don't need to instal any additional stuff. Most of the IDS nowadays, including Visual Studio Code, by the way, are working with Java and are supporting Java. There is an excellent development ecosystem, so many frameworks, so many libraries around it, and so many people answering your questions on Stack Overflow.
Last but not least, well, Java has an extensive set of open source libraries for data mining. Amongst those is my favourite, the one I've used in my master's degree backup. And not only that, many of the tools in the Hadoop ecosystem, like Hadoop, MapReduce, and HDFS are written in Java. By the way, Storm Kafka and Spark have Java in mind in order to process data.”
Next up we had Michele flying the flag of Kotlin. Michele currently works as head of architecture for JP Morgan Chase & co. As part of JP Morgan, he’s been working with JVM languages for the past 12 years, with exposure to Java, Scala, Clojure and most recently working predominantly with Kotlin.
Here’s some insights into Michele’s main points on Kotlin:
“So we're talking about data streaming, a very popular subject these days. First and foremost, Kotlin is a great choice for both data streaming LM and streaming, primarily because it's a great language overall.
In particular, to touch on what Ana was saying, not only you could do everything that you can typically do in Java, and actually, you can even mix and match. So the entire ecosystem, frameworks, libraries, you can use whatever and it still works.
On top of this, some of the things that you can use in Java, are sometimes even better in Kotlin. Good examples are Micronaut or IntelliJ IDEA itself, being from JetBrains.
So that said, potentially we could go with subscriber and producer and so on. Like in Java, there are alternatives.
And one of the great things about Kotlin is its concurrency model. In particular, it supports suspending functions as CO routines and as flows. So if you use things like React, or RX Java, or anything like that, before, the floor is essentially a very similar idea, right, so you can have a reactive stream, and it gives you control in a way that can be manipulated downstream, which is something that you can really do do with a consumer interface.”
Finally, to speak to us on Clojure we welcomed Igor Ges. Igor works at HCA healthcare, who have half a dozen hospitals in London and a number in the US. Igor has been using Java and JVM languages for some time. Professionally, over the last six or seven years he choses mostly to work with Clojure.
Some key points from Igor’s presentation on why he prefers Clojure are below:
“I'm taking a different tack from my esteemed colleagues here. We're all part of the big happy JVM family. So we can use each other's libraries. We all have IDs, none of the languages are fundamentally incapable of dealing with streaming data.
So I took the question as: What about closure makes it suited for the task at hand?
My first thought was when dealing with streaming data, you're almost certainly dealing with a lot of data, probably with complex rules and transformations around it.
Data manipulation is where Clojure really shines.
Now, as a list, it has a bit of a peculiar practice laden syntax. But if you squint a little, it's really not that different from what you've probably seen before.
Now with that comes something called a multiplicity, which means code is actually data. Now, not only does it enable a powerful macro system, but it really elevates data manipulation within the language and in that regard, Clojure went even further with its emphasis on simplicity.
The whole language is built around basically four fundamental data structures.
So you have lists, vectors, maps and sets.
Notice how simple it is to use the syntax of the language and the closure reader to build a fairly complex data structure. There are no constructors, no function calls, it's the same data you would use to write your covers.
What's more important, all of these data structures implement the same interface on which many of the core functions operate. So a large portion of the core library is focused, in fact, on data manipulation. And this is not surprising because unlike object oriented languages that entangled data and functions, the data enclosure is immutable. And so the language is nudging you to use pure functions to manipulate data.
In fact, I will argue that as you gain proficiency in Clojure, complex data manipulation becomes kind of second nature for you. So when dealing with streaming data, having an excellent data manipulation tool is a big one.
I think a big developer convenience is also announcing repple experience. Being able to connect your data sources and working with the problems in the interactive development environment is a big one for Clojure.”
Huge thanks to all our speakers for their in-depth and engaging arguments for each language.
And now, on to the results…
At the conclusion of JVM Wars 2021, Java came out on top with 31% of the votes, followed by Clojure with 27%, Scala with 21%, and Kotlin with 19%.
We’ve asked you guys live what other languages you would like to see represented next year, but don’t hesitate to reach out to us on social or at Host directly to let us know.
In addition if you missed the live event, fret not as it is all recorded, available and freely accessed online.
Watch back for much more detailed real-time demonstrations, and to view our panel discussion and Q&A in the final part of the event.