Of course, the question came up: What does “win” mean?
In any definition of “win” that has anything to do with the real world, Scala can’t “win” against Java. Scala is based on Java and the JVM – for it to “win” it’d have to work against its own underpinnings, and not only is that counterproductive, it’s likely to be impossible.
If “win” means “attracting the attention of the cool kids, who will now sneer at Java” then yes, Scala will win that battle immediately. (And it did win that battle. What year is this? 2013? It won that battle when it first showed up, and started losing it to the next cool language within seconds.)
The bottom line is this: Scala is cool. So is Haskell, so is Processing, so is Clojure, so are many other languages. That doesn’t mean that Java loses functionality; it’s going to improve, slowly as always, and continue to be fairly verbose and very simple.
That’s a strength of Java; it’s a strength that Scala replaces with other strengths.
The beauty of Scala is that it gives you a new paradigm to work with on the Java Virtual Machine, while retaining compatibility with other Java classes.
Why, then, does it have to “win?” Why can’t it be used where it’s more appropriate? If it has a sufficiently large niche – and it should – then it and Java can coexist happily, and productively.
The question shouldn’t be if Scala or Java wins. The question is whether we win. And we do.