Scala is currently considered one of the best programming languages for functional programming (although it still provides support for object-oriented programming approaches). Although the parallels between Java and Scala are obvious, Scala differs in many ways, with its code being much more concise, cleaner and with its own advantages, which are discussed throughout this post. Although it is an object-oriented language, Scala offers support for functional programming along with a robust static type system. This blog post will look at why I think this has happened, where Scala is now, and what the future holds for the Scala community.
Scala's popularity and usage is growing rapidly, as evidenced by the increasing number of open positions for Scala developers. It is not surprising, then, that Scala was initially received with such enthusiasm and was seen as the language that would bring functional programming into the mainstream. It takes new developers quite a while to get up to speed, and that is made much worse if you have a mix of vanilla Scala and hardcore Scala FP. According to StackOverflow's survey, Scala is in the top 5 most loved programming languages.
More recently, with Typed Actors and Reactive Streams, the Akka developer experience has changed to be much closer to the type checking experience you expect in typical Scala programs. This is because Scala is well organised, and its functional programming paradigm makes the code safe and stable. In addition, the Scala programming language has a reputation for being one of the most difficult languages in existence. As a result, there are indeed code distinctions and paradigm shifts that can make early learning of Scala programming a bit more difficult, but the result is a much cleaner and well-organised language that is ultimately easier to use and increases productivity.
In particular, Scala emphasises scalability of applications and databases by leveraging both functional programming paradigms and object-oriented concepts, such as classes and methods, to manage complexity in large code bases. While there will always be use cases where high-concurrency reactive architectures or purely functional programming are the best tool for the job, I hope that in the future developers can easily and simply get on board with the Scala language, and only have to learn those more advanced techniques when they need to. A friend of mine recently tweeted that public interest in the Scala programming language seems to have stagnated or declined, which matches my sense of the latest trends and zeitgeist.