You should know it, but don't get all ideological and neglect your advanced object or imperative programming training. You might even want to look at gasp other paradigms like rule based coding to broaden your toolbox a bit.
tl;dr scala is the best object-oriented imperative programming language I've ever used.
This is something I think Martin Odersky did really well in this class... he spent a decent amount of time discussing tradeoffs between FP and OOP and how one might arrive at choosing the different features of Scala, even going so far as to cover the "expression problem" in Scala. I think it was a superbly tasteful presentation of Scala and FP.
I prefer the pure OO trait-based solution to the expression problem that isn't supposed to exist; pattern matching is not the only way to do it. Scala is just that good.
Sure, being ideological and closed-minded is never a good thing.
But one of the takeaways is that lambda expressions/anonymous functions, first-class functions, and function closures, are very powerful tools that should be provided in any modern, high-level programming language.
The fact that they're working on adding these features to Java 1.8 is testament.
Would be nice if they could also add polymorphic function/method declarations and Hindley–Milner type inference, but oh well, you have to start somewhere...
Right. Scala is functional like C# is; yes, the functional abstractions are more powerful than C#, but like C#, its not forced down your throat. I'm still waiting for people to discover how Scala is the best OO language we have so far, traits are incredibly powerful and case matching on top of that is just icing.
Heh. When I first checked out Scala, what I liked about it was that it dealt with a lot of the stuff that annoyed me when going from Smalltalk to Java :)
tl;dr scala is the best object-oriented imperative programming language I've ever used.