Functional programming is a programming paradigm that treats computation as the evaluation of mathematical functions and avoids mutable state and side effects. Some benefits of FP include succinct and understandable code, different programming perspectives, and easier concurrency without data races. FP programs are made up of functions that avoid variable assignment and modification by relying on immutable data and lazy evaluation. Functional programming is supported by many languages through features like higher-order functions, recursion, and immutable data structures.