Meanwhile, the discussion also broke down to the benefits of functional programming versus imperative programming. Functional programming is a programming paradigm that treats computation as the evaluation of mathematical functions and avoids state and mutable data. It emphasizes the application of functions, in contrast to the imperative programming style, which emphasizes changes in state. The difference between a mathematical function and the notion of a "function" used in imperative programming is that imperative functions can have side effects, changing the value of program state. A key tenet of functional programming is the concept of immutability. In functional programming, an immutable object is an object whose state cannot be modified after it is created.