This document introduces functional programming and its motivations. It discusses how functional programming uses immutable values, pure functions with no side effects, and precise types. This eliminates state which makes the code simpler to reason about, enables free concurrency and parallelism, and makes the code more reusable. The benefits of functional programming are simple code that is easy to reason about.