https://medium.com/@jdgb.projects/differences-between-functional-and-imperative-programming-de0dc65baff3