Functional Programming promotes assignment less programming 
(immutability) and higher order functions.

Higher order Functions:
1. Functions are first class citizens
  You can pass functions to functions, create functions within
    functions, and return functions from functions.

2. Functions don't have side-effects
  Functions do not modify anything outside and are not modified by
    anything outside. They don't change any input parameter and
    don't change anything they return once they return it.