Scala : the 2 principles
excerpted from : An Overview of the Scala Programming Language, Second Edition
1. First, we postulate that a programming language for component software needs to be scalable in the sense that the same concepts can describe small as well as large parts.
Therefore, we concentrate on mechanisms for abstraction, composition, and decomposition rather than adding a large set of primitives which might be useful for components at some level of scale, but not at other levels.
2. Second, we postulate that scalable support for components can be provided by a programming language which unifies and generalizes object-oriented and functional programming.
For statically typed languages, of which Scala is an instance, these two paradigms were up to now largely separate.