Review: Functional Thinking
Disclosure: I received a review copy of this title from O’Reilly
Functional Thinking by Neil Ford of Thoughtworks is another great series in the O'Reilly video library. As I've come to expect from O'Reilly videos, the production quality, picture and audio are excellent. The content is also pretty great. The key to this title is in the name - Functional Thinking. The aim of these videos isn't to teach a specific functional programming language, and you won't be fluent in a specific language as a result of watching them. Instead, the focus is on thinking a little bit differently. As Mr. Ford emphasizes: learning functional programming isn't comparable to learning a new language - it is a new way of thinking. This is a very important distinction and one i'm glad that the author made.
I'd recommend this title for seasoned developers who are new to the functional programming world. The videos seem intended for use by those already schooled in object-oriented paradigm and detail numerous mechanisms employed by functional languages, why they are beneficial and how such mechanisms are permeating into existing mainstream (traditionally object-oriented) languages. The series does not focus on one specific language (though as suggested by the course title Java is often used as the base OOP language for comparison purposes) with Mr. Ford leveraging examples from Gradle, Clojure and Scala to illustrate his points. A little Java knowledge won't go astray - but developers with experience in any OOP language should be able to follow along.
The author clearly has a deep understanding of content and is very engaging throughout (I was also impressed at his ability to answer random/difficult questions from the audience). He makes the content extremely accessible and does a great job of explaining constructs available in functional programming that don't necessarily exist in other languages (first class functions, closures, etc.). To do so, he provides simple examples in OOP languages and iteratively refactors them into their functional counterparts. Along the way he explains the history and the thought process behind the designs of the constructs being discussed.
I learned a lot from this video series, not only about the benefits of specific functional constructs, but also issues with some OOP concepts that I have for a long time taken for granted (for instance, coupling introduced by polymorphism and limitations to dispatch mechanisms). You won't be able to write your first program using a functional programming language as a result of watching this course. However, you may just think differently about how you code. I highly recommend this series.