&gt; all languages accumulate compromises and inelegant hacks as they evolve. It&#x27;s unavoidable.<p>Scala devs deprecate and remove things that haven&#x27;t worked out well. They have an established track record of making these migrations easier with each release.<p>&gt; Null<p>Upcoming versions will make references non-nullable by default. If you want things to be nullable, you will have to opt-in explicitly with T|Null.<p>&gt; - Type inference<p>Type inference is not a huge priority, because people think that it&#x27;s a good thing that declarations require type annotations (just like it&#x27;s recommended in Haskell, too).
One of the last pain-points, higher-kinded unification of type constructors, has been fixed recently which will make type inference &quot;just work&quot; in exactly those cases where the lack of type inference was most annoying.<p>&gt; - Tooling<p>I think tooling is pretty amazing. Sure, Java has still some advantages in some places. But the tooling is superior to almost all other languages out there. SBT is amazing. IDE support is getting vastly better, not only have Eclipse and IntelliJ improved vastly, but also IDE support for Emacs, Vim, Sublime, etc. is coming along at a rapid rate, and it&#x27;s just amazing to use. There are so many tools in the Scala ecosystem which just don&#x27;t exist in this combination anywhere else.