Clojure for the Brave and True – Functional Programming
Has there been any exploration into an idea where the problem with side effects is not that they make functions impure, but they are often against the metaphor of the instructions being given?  That is, if the metaphor that one is trying to model is traditional mathematics, then of course side effects are terrible.<p>However, consider a program where the main metaphor is controlling something.  Logo, for example.  Few people argue, I would think, that the traditional imperative styling there hurts and confuses things.<p>More extreme, consider stack based languages.  These are strictly based on the current state of the program, yet my understanding is if you can fit your mind to that metaphor, it works very very well.<p>Or, my favorite category, cookbooks.  Look at traditional baking directions:  "Begin heating oven to XXX, mix dry ingredients in bowl, add butter, whip, ..."  Doesn't get any more imperative than that, and yet people around the world often have great success replicating the desired results.  (Granted, I often think that the difference in programming and teaching is that humans make an effort to understand what you were communicating, computers typically don't.)<p>Does this make sense?