https://medium.com/anna-vu/what-is-the-difference-between-imperative-programming-declarative-programming-6ae3837d663