Functional programming emphasizes the absence of side effects and immutability, focusing on composing first-class functions. It contrasts with object-oriented programming by separating data and behavior, advocating for functions to be treated as first-class citizens while avoiding mutable state. Key concepts include pure functions, higher-order functions, and the use of composition and partial application to create new functions.