Functional programming, also known as FP, is the process of using pure functions to build a software which helps to avoid the use of mutable data and side-effects.
Functional programming is declarative, meaning it expresses the logic of the computation without explicitly outlining its control flow.
The overriding difference between other programming paradigms and the functional programming paradigm is that, while other programming paradigms use statements to express concepts, functional programming uses functions.
This is a major revolutionary step within the programming space and allows engineers to be more agile. Rather than focus on writing a specific set of steps to resolve an issue, an engineer can use functions to run a task and not worry about how the language makes this task happen.
Nevertheless, compared to other paradigms, functional programming is stateless. In brief, state allows people to track the relationship of values between function calls. In some cases, using state is necessary in order to produce variant results based on the environment. For example, when shopping online, it is important to track the changes made within a user's cart as they jump between pages.
The flip side in not maintaining state is that it makes functional programs much more predictable. By not maintaining state, the data becomes immutable (meaning it cannot be changed). Each time a variable’s value needs to be changed, an entirely new variable needs to be created. This process is what helps make these functions more predictable and could support engineers working on more than one processor more easily and without side effects.
Imperative programming (the opposite of declarative programming) works similar to assembly lines. Data moves along a set of steps in a very specific order to generate a final result. Each time a new result is desired, an engineer must program a new assembly line, exposing the rigid operating methods of imperative programming.
Functional programming essentially dismantles this assembly line by using pure functions to manipulate the data. Therefore, anyone who can understand how functions work can develop an application that performs the task at hand.
This loss of rigidity allows for these pure functions to craft a much more flexible environment, where code order only relies on math that models a real-world environment. As this environment changes and evolves, so does the functional code alongside it.
Another benefit of functional programming is that it can be executed much faster, and is less error-prone when compared to other methods of programming.