What is functional programming? It’s a type of programming paradigm—meaning a way of thinking about and organizing code to solve problems.
Different programming paradigms are based on different concepts, principles, and practices about the best way to code for different projects.
Functional programming paradigms are based on the concept of functions as the primary building blocks of programs.
Functional programming focuses on creating pure functions that take inputs, process them, and return outputs without modifying the original data. It often also employs higher-order functions and recursion to solve problems.
Start coding now
Stop waiting and start learning! Get my 10 tips on teaching yourself how to code.
Success! Now check your email to confirm your subscription.
So, what is a functional programming language? 🤔
They are specific programming languages built around the ideas behind functional programming paradigms.
A few examples include Haskell, Scala, Clojure, F#, and more (we’ll cover seven of the best functional programming languages in this article).
Lots of other programming languages also support programming in a functional style—or incorporate some of the features and benefits of functional programming—but aren’t on the functional programming languages list since they’re not primarily functional languages.
These include C#, Python, Go, Rust, and Java (since Java 8).
In this post, I’ll break down more about what functional programming is, what it’s used for, how it compares to other paradigms (e.g. functional vs object-oriented programming), some functional programming benefits and drawbacks, and the most popular functional programming languages you might want to learn.
Disclosure: I’m a proud affiliate for some of the resources mentioned in this article. If you buy a product through my links on this page, I may get a small commission for referring you. Thanks!
If you’re new to the idea of functional programming paradigms, let’s use an example to break it down into simple terms.
Functional programming (or FP) is a method of writing computer programs that is like following a recipe.
With this example of functional programming, you have a list of steps (called functions) that take in ingredients (inputs) and make a final dish (output). You always get the same result from a function, given the same inputs. This way of programming can make your code easier to understand and use.
In functional programming, you avoid changing values and state, just like in a recipe you don’t change the ingredients once they’re set. The same ingredients (inputs) plus the same functions (steps/processes) will always equal the same meal (output), so there are no surprises.
This way of programming can lead to code that is simpler, more maintainable, and easier to understand—just like many good recipes are easy to follow and have predictable results!
Object-oriented programming (OOP) is another popular programming paradigm. When you’re breaking down functional programming vs OOP, the main difference is how code is organized. Instead of centering code around functions, OOP centers it around objects.
In object-oriented programming, you write code by creating objects and giving them properties and behaviors (aka “methods”). Each object represents a real-world thing, and you can use its methods to interact with it.
➡️ For example, if we were writing a program to simulate a zoo, we might have objects for different animals like lions, tigers, and bears. Each of these objects would have its own properties (like color, size, and weight) and behaviors (like roaring, running, and eating). You can also have your objects interact with each other.
Overall, object-oriented programming is a way of writing computer programs that makes it easier to organize and understand complex systems by modeling them after real-world objects and interactions. Read more about object-oriented programming languages here.
Imperative programming focuses on describing a sequence of steps to accomplish a task. It typically involves changing the state of the program as it executes, and uses control structures like loops and conditional statements to determine the flow of the program.
In imperative programming, we tell the computer what to do step by step. We might say “first do this, then do that, then do this other thing”.
By contrast, in functional programming, we write our code as a series of functions that take in inputs and produce outputs. It’s more like a machine that takes something in, processes it, and spits something else out. We don’t tell the computer what to do step by step, but rather describe what the program should accomplish as a set of rules or transformations.
Overall, imperative programming is like giving the computer a list of instructions to follow, while functional programming is like giving the computer a set of rules to apply to whatever inputs we enter.
The last paradigm we’ll compare here is functional vs procedural programming. Procedural programming is a specific subtype of imperative programming.
In procedural programming, the program is made up of a series of procedures (also called functions). Each procedure is a block of code that performs a specific task, and the program’s execution follows a sequence of instructions. So far, this might sound like a mix of functional and imperative programming—and it kind of is.
The main difference is that in procedural programming, procedures can have side effects—meaning they can modify data outside of themselves. This can make the program more complex and less rigid.
In contrast, functional programming focuses on writing functions that map inputs to outputs without any side effects: the program cannot change anything outside itself.
None of these programming paradigms are necessarily “better” or “worse” than any other. Whether you use functional programming vs OOP vs imperative or procedural will depend on your specific project needs and preferences as a programmer.
Functional programming is used in a variety of applications, such as:
Ultimately, learning a functional programming language (or at least being familiar with functional programming paradigms) can prove useful in a wide range of industries.
Learning different types of programming paradigms, including functional programming, helps you solve problems better. Instead of just learning the rules of each individual programming language, learning the concepts behind every paradigm helps you think like a programmer.
As this Redditor explains: “There’s a very real benefit to having exposure to lots of different techniques and mindsets around organizing and manipulating data: when you run into an unfamiliar challenge, there’s a higher chance you can connect it back to something you’ve previously learned. This is where functional programming and OOP comes in: they’re both somewhat higher-level mindsets for thinking about data, and so are both useful things to learn.”
It also helps you become more competitive in the tech workforce, considering that functional programming is becoming more popular. Another Redditor says: “Is it important for the future? Seeing how pretty much all modern languages have quite a few functional features (and the fact that even imperative languages like C# are getting more and more functional features) I’d say yes.”
Finally, learning functional programming can help you improve your coding skills, even if you don’t end up using it in your day-to-day work. It can help you write cleaner, more modular, and more maintainable code.
Like with any paradigm, there are functional programming benefits and drawbacks. Here are a few of the main pros and cons when it comes to learning and using functional programming paradigms/languages.
✅ Pros:
❌ Cons:
If you’re totally new to coding, you may want to start your learning journey with a more traditional style of programming.
Imperative programming languages such as Python or JavaScript are generally more accessible places to start and have large, supportive communities.
Functional programming could be a way to level up and expand your understanding once you’re ready.
There’s not really a number one “best functional programming language,” since they’re all used for different things.
Instead of ranking them, we’ll take a quick look at seven of the most popular functional programming languages and their applications.
Haskell is a purely functional programming language that has been around since 1990. It is known for its strong type system, lazy evaluation, and expressive syntax.
The language is popular in academia, and it has been used to build several real-world applications like games, music composition apps, analytics platforms, and more. Haskell is also popular in the finance and insurance industries, where it is used to build high-performance and reliable systems.
Scala is a hybrid functional and object-oriented programming language that runs on the Java Virtual Machine (JVM). It combines the best of both worlds by offering functional programming constructs such as first-class functions and immutable data structures, along with object-oriented features like classes and inheritance.
Big data and distributed systems are often built with Scala, with one of the biggest examples being Apache Spark (a popular big data processing framework). Scala is also used in web development, particularly in the development of web applications and backend systems.
Clojure is a modern, dynamic, and functional programming language that runs on the Java Virtual Machine (JVM) and the .NET runtime. It is a Lisp dialect that emphasizes immutability and functional programming concepts.
Web development is the biggest area where programmers use Clojure—particularly for building web applications and backend systems.
Erlang is a functional programming language that was designed for building highly concurrent and fault-tolerant systems.
It is particularly well-suited for building telecommunications systems, such as VoIP and messaging systems, due to its ability to handle high concurrency and network traffic.
F# is a functional programming language that runs on the .NET runtime. It is a hybrid language that combines functional programming concepts with object-oriented and imperative programming.
This language is primarily used in the development of Windows applications, games, web apps, and cloud-based systems. It’s also useful in scientific computing and data science.
Elixir is a functional, dynamic programming language built on top of the Erlang Virtual Machine. It is designed for building scalable and fault-tolerant applications.
Elixir is good for building web apps and real-time applications that require high concurrency and fault tolerance. It is also used in the development of distributed systems, such as messaging systems and IoT (Internet of Things) applications.
OCaml is a powerful, statically-typed functional programming language that supports both functional and imperative programming styles. It is also known for its native code generation and garbage collection mechanisms, which make it great for both high-performance and memory-intensive applications.
This FP language is commonly used in scientific computing, particularly in the development of numerical libraries and simulation software. OCaml is also used in the development of web applications and compilers.
Let’s finish up by answering a couple of frequently asked questions about functional programming.
Python is not strictly a functional programming language, but it does include many functional programming concepts.
It’s what we call a “multi-paradigm” programming language, which means that it supports several different paradigms, including imperative, object-oriented, and functional programming.
Python is most frequently coded in an imperative style.
Want to master Python?
Then download my list of favorite Python learning resources.
Success! Now check your email to confirm your subscription.
Similar to Python, C++ is not strictly a functional programming language. C++ is a multi-paradigm programming language that supports imperative, object-oriented, generic, and functional programming.
While C++ was originally designed as an imperative programming language, it has evolved over the years to include several functional programming concepts.
Better Programming Through OCaml is about the OCaml language but it’s an excellent introduction to FP in general. It’s used by students at Cornell and it comes highly recommended:
“It’s fantastically organized, easy to follow, and assumes very little knowledge from the programmer.” – u/ws-ilazki on reddit
There are also online courses you can check out, like:
Learning functional programming can be challenging, but with practice and persistence, you can certainly teach yourself the basics and hone your skills from there.
No matter how far you want to take your learning, being familiar with FP is worthwhile and valuable for any programmer to have.
For programmers who are used to imperative or object-oriented programming paradigms, like C++ or Java, it can be helpful to approach functional programming like you’re learning how to code all over again. Start with a blank slate so your mind is open to the new concepts.
Functional programming requires a different way of thinking about programming, and it can take time to understand the functional programming concepts. As long as you’re prepared for that and you can dedicate the necessary focus to learn the paradigms and languages, you can master functional programming!