<i>bringing in more modern paradigms such as functional programming and richer type-checking than the Smalltalk-inspired pure object-oriented model of Objective-C.</i><p>One thing I noticed while using Smalltalk: Large swathes of the Class Library were &quot;pretty close&quot; to functional, in that there were very few side effects. Because the debugger was so powerful, you could use it edit a method and &quot;go back in time&quot; to replay execution with the new version. My theory is that, as a result, a kind of social pressure against side effects developed, because introducing side effects made fellow programmers annoyed at you while using that wonderful debugger.<p>I wonder if there are other social mechanisms for getting to such a desirable state, like having very few side effects? (Other than functional paradigm hipsterism.)