Functional programming is a programming paradigm, such as object-oriented, imperative and many other programming “styles”. So, before we start to crack functional programming, let’s learn a little bit about its history.
To made functional programming possible, many mathematical and computer science theories, concepts and researches were published. Functional programming is very attached to math and functions, its roots are in mathematical logic.
Informal logic systems have been in use or over 2000 years, but the first formalization was made only in the middle of the XIX century. Hamilton, De Morgan and Boole published their works, that were the basis to the formal logic:
- Propositional Calculus;
- Predicate Calculus.
Also, in the XIX century, the number theory was introduced.
In 1936, three different approaches for computability were proposed: Turing’s Turing machines, Kleene’s recursive function theory and Church’s lambda calculus. Turing’s proposal is the foundation of the computer science and programming languages as we know today, and the recursive function theory and lambda calculus are the backbones of functional programming.
The first programming languages were created in the late 1940s, Assembly was the first, and FORTRAN was the first high level programming language to become popular; created in 1954. In the next years new programming languages were created, but now high level, and mostly procedural.
As the computers were becoming more popular, new languages appeared, so in 1958, McCarthy created the LISP programming language, which is considered the first functional language in history.
LISP is a very simple language based on recursive functions manipulating lists of words and numbers. LISP is a non-typed language. Besides that, LISP is not considered “purely functional”, because it has some imperative elements.
The functional paradigm has become popular recently, programmers and companies started to use functional languages in their projects more frequently. Some examples of popular functional languages are:
Today, we also have the “multi-paradigm languages”, that are languages that you can code using many paradigms, like imperative, object-oriented and functional. Examples of “multi-paradigm languages”: