Functional Programming Differences
loup-vaillant: "Treat functions as first class citizens"Actually, Object oriented programmers already do this.  If they use "class polymorphism", "mixins", or any mechanism where an object's method could be determined at runtime, they use first class functions. They just don't know it yet. So, take an example where they would use mixins, then present them a closure or lambda equivalent. That should make functions less scary. (Side note: try to avoid the terms "first class" and "anonymous", "closure", and "lambda". "Ordinary" and "literal" are better, less scary. They point out the fact that functions are as mundane as integers, or strings, so of course they could be parameters or return values.)"stay immutable"This is indeed crucial.  But effectively impossible until you don't change the way you think.  Most imperative programmers think about what the objects should do.  Of course, without side effect, they won't do anything, making programming impossible. So they have to think more about what the objects should be.  Then, they will be able to avoid side effects until they are really needed."factor relentlessly"Talk about that only when you have talked about functions (don't say "first class"!), as an example of how you could really use them. `sort`, `map` and `filter` would be my favourite examples. Insist on the low syntactic burden of factoring.