openskills.info
Course Preview

Functional Programming

Functional programming is a way of building software from pure functions and immutable data instead of mutable state. It makes programs easier to reason about and test, and it powers languages from Haskell to the functional features of JavaScript and Python.

itSoftware engineering

Don't Panic — Functional Programming

Functional programming is a way of building software from value-to-value transformations rather than a procession of statements poking shared state. This sounds decorous until you remember how much software consists of values being poked by accident. The useful unit is a function whose result follows from its arguments, not from a clock, a global variable, or a previous visitor to the same memory location.

The main picture is a pipeline. Data arrives, a pure function changes it without side effects, and another function receives the result. Map, filter, and fold handle the recurring chores: transform each item, keep the suitable ones, or combine them into one answer. It is less a ban on loops than a preference for naming the transformation so that the route from input to result remains visible.

The surprising bit is that functional programming does not deny that computers read files, call networks, or remember things. It puts those activities at an effect boundary. The calculation stays in the pure core; console, file, network, state, and concurrency sit at the edges. In a language such as Haskell, the type distinguishes an action from an ordinary value. The apparatus can look formidable, because reality has brought its own luggage.

Data also stays put. An immutable value is not revised in place; a transformation produces a new value. Pattern matching then lets code inspect the shape of a value, including an option value that represents presence or absence. That means a missing result can be part of the program's data model, rather than a trapdoor concealed under a cheerful name.

There is no single functional-country passport. Haskell is pure, lazy, and statically typed. Elm is pure and strict. Erlang, Elixir, Scala, Clojure, and F sharp use functional ideas alongside effects and other styles. The choice is usually about where composition and explicit data make a system easier to reason about, not about evicting every imperative instruction from the premises.

For the fuller map, read the Introduction for the concepts and language choices, then use Slides for the pipeline and boundaries at a glance. The Cheatsheet is where terms such as recursion, algebraic data type, and lazy evaluation wait in compact form. The practice reference and exercise turn the pipeline into code; the quiz checks whether the boundary has remained where it belongs.

Where this skill leads

Relevant careers

See how this topic contributes to broader role-level skill maps.

Sources

  • https://en.wikipedia.org/wiki/Functional_programming
  • https://en.wikipedia.org/wiki/Lisp_(programming_language)
  • https://en.wikipedia.org/wiki/ML_(programming_language)
  • https://en.wikipedia.org/wiki/Scheme_(programming_language)
  • https://en.wikipedia.org/wiki/Miranda_(programming_language)
  • https://en.wikipedia.org/wiki/Haskell_(programming_language)
  • https://en.wikipedia.org/wiki/John_Backus
  • https://en.wikipedia.org/wiki/Erlang_(programming_language)
  • https://en.wikipedia.org/wiki/Scala_(programming_language)
  • https://en.wikipedia.org/wiki/F_Sharp_(programming_language)
  • https://en.wikipedia.org/wiki/Clojure
  • https://en.wikipedia.org/wiki/OCaml
  • https://en.wikipedia.org/wiki/Elm_(programming_language)
  • https://plato.stanford.edu/entries/lambda-calculus/
  • https://www.cse.chalmers.se/~rjmh/Papers/whyfp.html
  • https://www.haskell.org/
  • https://www.haskell.org/get-started/
  • https://www.haskell.org/tutorial/
  • https://www.haskell.org/onlinereport/haskell2010/
  • https://htdp.org/
  • https://clojure.org/about/history
  • https://elixir-lang.org/
  • https://elixir-lang.org/blog/2014/09/18/elixir-v1-0-0-released/
  • https://www.erlang.org/
  • https://www.scala-lang.org/
  • https://fsharp.org/
  • https://ocaml.org/
  • https://elm-lang.org/
  • https://www.purescript.org/
  • https://racket-lang.org/
  • https://github.com/sindresorhus/awesome
  • https://github.com/lucasviola/awesome-functional-programming
  • https://github.com/hemanth/functional-programming-jargon
  • https://github.com/timoxley/functional-javascript-workshop
  • http://lambda-the-ultimate.org/
  • https://www.schoolofhaskell.com/
  • https://www.cl.cam.ac.uk/research/hvg/Isabelle/
  • https://github.com/idris-hackers/idris-koans
  • https://www.youtube.com/playlist?list=PLTA0Ta9Qyspa5Nayx0VCHj5AHQJqp1clD
  • https://www.youtube.com/watch?v=6COvD8oynmI
  • https://www.manning.com/books/functional-programming-in-scala-second-edition
  • https://www.manning.com/books/grokking-simplicity
  • https://gcanti.github.io/fp-ts/
  • https://arrow-kt.io/
  • https://blog.haskell.org/a-couple-million-lines-of-haskell/