This document provides an introduction to functional programming concepts using Scala. It defines functional programming as a programming paradigm focused on pure functions without side effects. It contrasts imperative programming which can contain side effects. Key functional programming concepts discussed include referential transparency, where expressions will always evaluate to the same result given the same inputs; avoiding mutable state; and using functions as first-class citizens that can be assigned to variables or passed as arguments. Benefits highlighted are improved composability, testability, parallelization and optimization of functional code. The document provides examples of functional programming in Scala including using high-order functions and anonymous functions.