A question often asked by novice programmers who want to work in a big Java software development company is what programming language to learn? The question sounds reasonable. I want to choose the best one so that I don’t have to retrain later.
Master several languages from radically different families, and you will be familiar with most of the concepts found in modern programming languages.
In addition to the Fortran, imperative languages include Pascal, C, C++, Java, C#, Python, Go. The functional – Haskell, Scala, Erlang, Clojure, Scheme, F#.
There are flaws in this classification. First, not everyone agrees with the simple definition of functional languages. Some experts believe that only pure functional languages can be considered truly functional. Of the known ones, in fact, only Haskell.
Secondly, modern languages support several paradigms at once. Lambda functions, which are the foundation of functional languages, can now be found in many imperative languages, including C++.
Despite the shortcomings of the classification, I recommend that you follow the original plan. Take a couple of imperative languages and a couple of functional languages and write some small programs in them. It will be great if you choose languages with different syntax.
The unfamiliar syntax makes new languages incomprehensible. But in reality, you can get used to it in just a few days. Unfamiliar concepts can be much more difficult.
Imperative languages have long had a division between code and data, with the code managing the data. Languages of this kind are now called procedural languages, such as Fortran, Pascal, and C.
Are there object-oriented functional languages? Oh, sure. Usually, language developers combine several paradigms, which, by the way, greatly simplify our task, namely, the development of different concepts. And if Pascal is imperative and procedural, then OCaml is functional and object-oriented.
Languages are also classified by how they work with data types. A distinction is made between statically typed and dynamically typed languages, as well as strongly and weakly typed languages.
Statically typed languages check the data types, so the programmer has to declare the objects he uses. This applies to variables, functions, and even types themselves. Programs in such languages tend to be larger because, in a sense, duplication helps deal with typos and other simple errors. In this category, we will find C++, Java, C#, Kotlin, Go.
Another recognized method of classification is the division of languages into low-level and high-level languages. Low-level languages are used in system programming and game development, that is, where high code performance and resource-saving are required. These include C, C++, Rust, and, to some extent, Go.