Demystifying declarative versus imperative