Imperative programming versus declarative programming