This document discusses functional programming with Clojure. It explains why functional programming aims to eliminate side effects by making functions pure. Clojure allows for functional programming through features like immutable persistent data structures, higher order functions, recursion with tail call optimization, and lazy evaluation. Concurrency in Clojure is easier due to immutability, persistent data structures, and software transactional memory. The document provides examples of building web applications in Clojure using Ring, Compojure, and Hiccup. It also discusses building client-side apps with ClojureScript. Resources for learning Clojure like books, websites, and communities are mentioned.