Functional programming uses immutable data and functions as the key operation. Code is written as a series of functions without side effects. Lambda calculus is the mathematical foundation, representing functions as lambda expressions. Functional programming languages include Haskell, Scheme, Clojure and F#. Benefits include ease of debugging, elegance and concurrency.