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.
As a result, there are certainly code distinctions and paradigm shifts that can make it a little difficult to initially learn to program in Scala, but the result is a much cleaner, well-organised language that is ultimately easier to use and increases productivity. Also, if you are well acquainted with Java, C, C and Python, Scala would be the perfect choice to improve your programming skills and get better career opportunities at the same time. Haskell is a purely functional programming language and supports powerful functional programming language features. Even based on this admittedly unscientific approach, Scala seems to be the only production-proven programming language that makes engineers happy and alleviates their need to curse more widely adopted languages like Java, PHP and JavaScript.
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.