Years ago, I raised this topic elsewhere, and it became a big stink for many reasons… Not long after that, I left that forum because I was getting trolled too much, and shortly after that, they established long-overdue guidelines on discussions.
Recently I watched KEYNOTE Simply Scala Martin Odersky, which inspired further thought…
- When we use terms like “scala is complex” or “scale is simple,” we must be clear on what we are discussing.
- I agree with Martin that the Scala language is relatively simple in some ways, such as language syntax. And I also agree with Martin that some things, like SBT, are too complex.
Overall, it is clear that Martin strives for simplicity and has demonstrated outstanding leadership. However, sometimes the levels of abstraction going on make Scala feel more complex. I think I favour Scala becoming more opinionated, as Martin claims, as when I read other people’s Scala code, there are just too many ways to skin a cat, so to speak.
While Scala is my favourite programming language, I rarely recommend it to others because it takes a lot more discipline than Java and Kotlin not to abuse the power of Scala.
On another tangent, I look forward to Java 21 when Project Loom becomes more standard, and I will be watching closely to see how that affects both Scala and Kotlin. Already, I have used Project Loom APIs in both Kotlin and Scala with few problems. In particular, while Project Loom is impressive, I feel there are still lessons to learn from Scala, particularly wrt Capabilities, Effects, Resources, etc. But Scala needs a stable foundation of Virtual Threads, Structured Concurrency, Scoped Variables, etc., to experiment with.