To be honest, designing a good programming language is not just collecting random good features from other languages and gluing them together. Particularly, adding new features to an old and mature language like Java or C++ is very hard if not impossible to do right. We have a few examples of this in happened already in Java world: half-broken generics or support for lambdas with no proper map&#x2F;filter etc. on basic collections (forcing to do a lot of conversions to&#x2F;from streams). Sure, it is better than no generics or no lambdas at all, but it is Java that really looks like a hack now, not Scala.<p>There is also stuff that probably can&#x27;t be taken out from Java without major backwards compatibility issues. E.g. Scala has no distinction for primitive&#x2F;box types, which makes it much simpler and more elegant for basic imperative&#x2F;OOP programming than Java.<p>As for frustration working with Scala - I didn&#x27;t notice, despite working on a few projects for a few years now. I&#x27;ve known only one programmer in my whole career who complained about introducing Scala into one project because &quot;Scala was too complex&quot; and guess what... he was one of the poorest Java programmers on that team at that time. Java did not save him either. Reading his Java code was probably much more frustrating than waiting 5 minutes for a full Scala build would be. Poor programmers do exist and you should not blame the tool just because someone can&#x27;t properly learn how to operate it.