https://dandiasabeyesinghe.medium.com/differences-between-imperative-programming-and-declarative-programming-fff6c63d8c1c