Sorry, this page is no longer available
We may earn an affiliate commission when you visit our partners.

Functional Programming

Save
May 1, 2024 Updated May 9, 2025 36 minute read

Functional programming is a programming paradigm, a way of thinking about and structuring code, that treats computation as the evaluation of mathematical functions. Unlike imperative programming, which focuses on sequences of commands that change a program's state, functional programming emphasizes the application and composition of functions. In this paradigm, functions are considered "first-class citizens," meaning they can be assigned to variables, passed as arguments to other functions, and returned as results, just like any other data type. The core idea is to build software by creating and combining these functions to achieve desired outcomes.

Exploring functional programming can be an engaging endeavor for several reasons. Firstly, it often leads to more concise, predictable, and maintainable code. Because functional programs are often built from pure functions—functions that always produce the same output for the same input and have no side effects—they can be easier to reason about, test, and debug. Secondly, functional programming principles are well-suited for concurrency and parallelism, which are increasingly important in modern software development due to multi-core processors. The immutability of data, a common feature in functional programming, helps avoid many of the complexities and bugs associated with shared, mutable state in concurrent environments.

Definition and Core Principles

At its heart, functional programming (FP) is a style of software development that constructs programs by applying and composing functions. It is a declarative programming paradigm, meaning that developers focus on what the program should accomplish, rather than explicitly detailing how it should be accomplished with step-by-step instructions. This contrasts with imperative programming, where the emphasis is on a sequence of commands that modify the program's state.

Path to Functional Programming

Take the first step.
We've curated 24 courses to help you on your path to Functional Programming. Use these to develop your skills, build background knowledge, and put what you learn to practice.
Sorted from most relevant to least relevant:

Share

Help others find this page about Functional Programming: by sharing it with your friends and followers:

Reading list

We've selected 30 books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Functional Programming.
An updated edition of the popular 'Functional Programming in Scala', this book covers the latest standards of FP and includes full code updates to Scala 3. It helps developers learn to recognize and write purely functional code and work with common functional structures. It's suitable for those with some Scala or Java experience.
Deep dive into functional programming concepts using Scala. It is considered a serious tutorial for programmers looking to apply FP to their work. It covers basic techniques to advanced topics with concrete examples and exercises. A second edition is available, updated for Scala 3.
Classic in the field, focusing on the design and implementation of data structures using purely functional principles. It's a valuable resource for those who want to understand the intricacies of building persistent and efficient data structures in functional languages. It assumes some working knowledge of FP.
A widely recommended introductory book for learning Haskell and functional programming. It is known for its clear explanations and practical examples, making it suitable for beginners. It's often used as a textbook.
This highly influential textbook on type systems and programming language theory. While not solely focused on functional programming, it provides a deep theoretical background that is essential for understanding advanced FP concepts and language design. It is frequently used as a graduate-level textbook.
Focuses on using Haskell to solve real-world programming problems. It's excellent for those who have a basic understanding of Haskell and want to see how FP concepts are applied in practice. It provides a practical approach to functional programming.
Introduces functional programming concepts to developers familiar with object-oriented languages. It uses examples in Java and Scala to explain core FP ideas like pure functions and immutable data. It focuses on practical aspects and helps bridge the gap between OO and FP thinking.
Explores the new features in modern Java (Java 8, 9, 10, and 11), including lambdas and streams, which enable a more functional style of programming in Java. It's excellent for Java developers looking to incorporate functional programming concepts into their existing skillset.
A popular and whimsical guide to learning Haskell. It's known for its engaging style and clear explanations, making complex concepts approachable for beginners. It serves as a great supplementary resource for learning Haskell and FP.
Takes a deep look at the Clojure language, going beyond syntax to show how to write fluent and idiomatic Clojure code. It covers functional and declarative approaches and techniques for concurrency and performance. It's appropriate for readers with some experience in Clojure or Common Lisp.
Comprehensive guide to the Clojure programming language, a Lisp dialect that emphasizes functional programming. It's suitable for developers interested in a dynamic functional language that runs on the JVM.
Demonstrates how to apply functional programming principles in C#. It's valuable for C# developers who want to write more robust and maintainable code using FP techniques. It covers core FP concepts and their implementation in C#.
Explores functional programming concepts within the Python language. It covers topics like lazy evaluation, generator functions, and monads in a Python context. It's valuable for Python developers looking to incorporate FP techniques into their coding. A second edition is available.
Teaches the Elm language, a functional language for building web applications. It introduces a new approach to frontend development with Elm's architecture and compiler. It's valuable for developers interested in functional frontend programming.
Uses a unique question-and-answer format to teach the fundamentals of recursion and functional programming using Scheme. It's a relatively quick read that helps build a strong intuition for functional thinking. It is particularly useful for those new to the concepts and serves as a good precursor to more in-depth texts.
Introduces the Elixir programming language, which functional language built on the Erlang VM. It's suitable for those interested in learning a modern functional language known for its concurrency and fault tolerance features.
Introduces functional programming concepts to JavaScript developers. It shows how to apply FP principles in a language not traditionally purely functional. It's useful for web developers and those working with JavaScript frameworks.
Comprehensive guide to the Kotlin language, which supports both object-oriented and functional programming paradigms. It's useful for developers interested in learning Kotlin and how to apply functional concepts within the language.
This free online book that teaches the Erlang programming language, another functional language known for its concurrency and fault tolerance. It's a good resource for those interested in distributed systems and functional programming.
A follow-up to 'The Little Schemer', this book delves into more advanced functional programming concepts and techniques using Scheme. It continues the question-and-answer format and is suitable for those who want to deepen their understanding after reading the first book. It's more challenging than 'The Little Schemer'.
This German language book provides a comprehensive overview of functional programming, covering both theoretical foundations and practical applications.
Extends the functional language Scheme with logical constructs, bridging the gap between functional and logic programming. It helps functional programmers think logically and logic programmers think functionally. Familiarity with a functional language or the first five chapters of 'The Little Schemer' is assumed.
Table of Contents
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser