Kotlin, Python, Clojure, Java and Go are Scala's most popular alternatives and competitors. The requirement for object-oriented language, together with the functional programming language, gives weight to Scala. Some of the more complex features of the language (tuples, functions, macros, to name a few) ultimately make it easier for the developer to write better code and increase performance by programming in Scala. What makes a programming language functional is its ability to realise functional programming paradigms.
The popularity and use of Scala is growing rapidly, as evidenced by the increasing number of vacancies for Scala developers. Haskell is a general-purpose programming language that is standardised and has pure functional programming features. In terms of programming paradigms, Scala inherits the object-oriented model from Java and extends it in several ways. Scala is a type-safe JVM language that incorporates both object-oriented and functional programming in an extremely concise, logical and extraordinarily powerful language.
While it supports all the object-oriented features available in Java (and, in fact, augments them in a number of ways), Scala also provides a large number of capabilities normally found only in functional programming languages. Scala also has many functional programming facilities, including features found in advanced functional languages such as Haskell, and tries to be agnostic between the two paradigms, allowing the developer to choose between the two paradigms or, more often, some combination of them. Scala is a pure object-oriented programming language (in the sense that each value is an object) that also offers the features of functional languages (in the sense that each function is a value). It is a continuation of the work on Funnel, a programming language that combines ideas from functional programming and Petri nets.
Scala enough to give you a preliminary idea of Scala's power and capabilities and whet your appetite for learning the language.