Functional programming on the JVM.
WHAT IT IS
A statically typed language combining object-oriented and functional programming, on the JVM.
WHAT DISTINGUISHES IT
A powerful and complex type system Strong functional programming support Immutability by default in its idioms Pattern matching as a central construct
WHAT IT IS USED FOR
Large-scale data processing Distributed systems Financial and analytical systems
WHY IT BECAME PROMINENT
Major data processing frameworks were written in it.
WHAT ITS STRENGTHS ARE
Expressiveness Type safety at a level few languages reach Suitability for concurrent and distributed work
WHAT ITS DIFFICULTIES ARE
A steep learning curve Code that varies enormously in style between teams Longer compilation times
WHAT THAT STYLE VARIATION MEANS
Two Scala codebases can look like different languages.
WHAT TO ESTABLISH IN A TEAM
Which subset of the language is used, and be consistent.
WHO IT SUITS
Teams with strong functional programming experience, working on data or distributed systems.
WHO IT DOES NOT
Teams wanting a language everyone can pick up quickly.