From First Principles: Why Scala?
I am a Scala programmer &amp; think it&#x27;s a great language.  Here are some arguments for why not Scala:<p>* Li&#x27;s libs (os-lib, upickle, utest) have clean public interfaces, but most Scala ecosystem libs are hard to use, see the JSON alternatives for examples: <a href="https:&#x2F;&#x2F;www.lihaoyi.com&#x2F;post&#x2F;uJsonfastflexibleandintuitiveJSONforScala.html#scala-alternatives" rel="nofollow">https:&#x2F;&#x2F;www.lihaoyi.com&#x2F;post&#x2F;uJsonfastflexibleandintuitiveJS...</a><p>* The Mill build tool looks a lot better than SBT, but seems like everyone is still using SBT<p>* Scala minor version are binary incompatible, so maintaining Scala projects is a big pain.  Upgrading Spark from Scala 2.11 to Scala 2.12 was a massive undertaking for example.<p>* Scala has tons of language features and lets people do crazy things in the code.  Hard to win technical arguments with Scala geniuses that like using complicated language features.<p>* Scalatest is stil used by most projects and is annoying to use, as described here: <a href="https:&#x2F;&#x2F;github.com&#x2F;lihaoyi&#x2F;utest#why-utest" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;lihaoyi&#x2F;utest#why-utest</a>. The overuse of DSLs in Scala is really annoying.  Too many DSLs is another example of something I consider to be an antipattern, but there is no Scala community consensus on the responsible use of DSLs.<p>I&#x27;m optimistic about Scala.  There are some folks that love the language and are continuously improving the ecosystem.  Scala 3 will have to sell a better story about ditching legacy tooling and giving users a better default stack if it wants to compete with modern Go&#x2F;Rust&#x2F;Python.