Functional programming
- Immutability (variables don't change)
- Separation of data and functions.
- Pure functions (no side-effects)
- First-class functions (you can assign function to another name and you can pass function to other functions and return them as well. We can also manipulate functions)
- Higher order functions: a functions that either takes a function as a parameter or returns a function as a parameter.