If you’re researching on the question of which general-purpose programming language or platform should you use for your next web application and contemplating Java 8 and Scala; you might find this article useful or interesting.
In 2011, Oracle released Java 7 and promised a 2-years release cycle, however many felt that; Java is not moving fast enough to keep up with the Web 2.0 movement.
The industry was looking for more productive and less verbose language, such as Ruby, utilizing the Rails framework or RoR (Ruby on Rails).
This is when many believed Scala was a perfect fit to replace Java, runs on the JVM, Functional Programming Language that supports the OOP paradigm, and thrives in the following areas -among others-,
Less boiler-plate code and less code required to accomplish similar things in Java.
The ability to safely access collections and data concurrently without the inherent issues that usually associated with mutable data structures parallel programming.
the functional paradigm and immutability -among other things- by design, makes Scala a winner on the scalability side.
In 2013, Oracle delayed the Java 8 release and that was a disappointment for the Java community, many considered Java is a dead-end and Oracle might not be that committed to support Java and that definitely strengthened the Scala case. There was a momentum for Scala and many enterprises adopted Scala as the standard general-purpose programming language.
In 2014, Oracle released Java 8, it was somehow impressive and made a major improvement in the verbosity and productivity department by introducing the Lambda expressions and first class functions, less boiler-plate code and better support for parallel programming.
In 2015, we have seen a lot of online chatter on how some companies scaling down on the use of Scala as a general-purpose language and opting for Java 8 instead, mainly for the following reasons,
- Learning curve and the availability of Scala resources
Scala is a very rich language and very broad, however while this is an advantage in many cases, it presented a learning challenge for some, many reported steeper learning curve, also, it’s harder to find experienced Scala resources.
- Complexity and Maintainability
While less verbose is a good thing, still too verbose or encrypted code is a really bad thing for debugging and troubleshooting, you can see many discussions online regarding this issue, while you can abuse any language, seems Scala is an easier target.
Martin Odersky, the Scala founder, highlighted the complexity issue in his Scala new year resolution blog. Apparently, there’s an appealing case to simplify the language and create a better system to adopt less complex and more useful libraries.
While the Scala system is continuously growing, it is undeniable that; the Java Ecosystem is a lot bigger and it’s easier to find Java help or support.
In 2016, the enterprise company leading the charge behind the Scala movement, changed the name from TypeSafe (Scala strong types) to LightBend and changed the strategy to be a language-agnostic entity versus focusing mainly on Scala, also, LightBend is going to release a Microservices -Lagom- framework for Java users before the Scala users and that will be first.
Major distributed computing frameworks, written in Scala have picked up Momentum, such as the Play web framework and the Apache Spark.
Scala is getting a lot of praise in the Big Data world.
In my humble opinion, for now, Java 8 is not going to kill Scala nor the other way around, instead, Scala will move from general-purpose language to a special-purpose language, focusing more on the scalability, cluster computing and reactive computing use cases, again this is for now.
I believe this is going to be a good thing for the industry, Java and Scala can play well together and contribute to each other ecosystem to improve on both ends.
It might be a good strategy to invest into building new projects using the Play framework + Java 8 stack. The Play framework supports both Java and Scala and that could prove to be a valuable advantage.
Those are my personal views and not representing the people I worked with, the companies I worked for, or my/our past and present customers in any shape or form. Any resemblance to real life use cases or situations is accidental and not intentional in any way, shape or form.
Hope this is helping some and again I understand other’s experience and views could be completely different than mine and I completely respect that.