The document discusses functional programming and compares it to object-oriented programming. It provides a brief history of functional programming languages like Lisp from the 1950s and newer languages that have become popular more recently like Clojure, F# and Scala. It explains some key aspects of functional programming like higher-order functions, recursion, pure functions and using functions as values. It also discusses why functional programming has become more popular again recently, in part due to multi-core processors and a need for concurrency.