- Programming is organized as evaluation of functions
- Avoiding mutable objects
- Avoiding states, and changes of state
- Avoiding side effects (function output depends only on arguments and not on state: f(X) always returns the same value for same X)