Oreilly - Functional Thinking
Rather than focus on specific language features, Functional Thinking looks at a variety of common practices in OOP languages and then shows you how to solve the same problems using a functional language. For instance, you know how to achieve code-reuse in Java via mechanisms such as inheritance and polymorphism. Code reuse is also possible in functional languages, using high-order functions, composition, and multi-methods.
Ford encourages you to value results over steps, so you can begin to think like a functional programmer. Expect your mind to be bent, but you’ll finish with a much better understanding of both the syntax and semantics of functional languages. This video is ideal for any experienced programmer.
Shifting Paradigms: Filter, map, reduce
Ceding control: Currying and partial application; recursion
Evolution: Memoization; closures
Nailgun-driven development: Concurrency, Function composition, coupling vs. composition, functional data structures, monads
Bendability: Dispatch, meta-programming, DSLs, macros
Why you should care