Functional programming is a style of building software in which the program is expressed as the application and composition of functions, rather than as a sequence of commands that change the machine’s memory step by step. Instead of telling the computer “do this, then change that,” a functional program describes what a result is in terms of simpler results, and lets the language work out the rest.
The paradigm draws directly on the lambda calculus, the formal model of computation built entirely from defining and applying functions. Languages in the LISP family, including Scheme, were among the first practical systems to put these ideas to work; the 1975 Scheme report describes an interpreter for a LISP-like language “based on the lambda calculus.”
The most influential argument for the approach is John Backus’s 1978 Turing Award lecture, “Can Programming Be Liberated from the von Neumann Style?” published in Communications of the ACM. Backus criticized conventional programming for being tied to the “von Neumann style” of moving data in and out of a single store one word at a time, and proposed instead a “functional style” with an algebra of programs, where whole functions can be combined and reasoned about mathematically.
In a functional style, functions ideally avoid side effects: given the same inputs they always return the same outputs, and they do not quietly modify shared state. This makes individual pieces easier to test, to reason about, and to combine. The idea spread well beyond its origins, shaping later languages such as ML, Haskell, Erlang, and Clojure, and influencing features now common across mainstream languages.