Functional Thinking: Functional Programming using Java, Clojure, and Scala by Neal Ford; O’Reilly Media
June 29, 2013 Leave a comment
Functional Thinking: Functional Programming using Java, Clojure, and Scala video collection by Neal Ford was very interesting and informative to watch. I have been developing in object oriented languages for the past 17+ years and the last time that I developed using a functional language was in my undergrad when I took a class on LISP. At the time a was very frustrated with having to keep track of the begin and end brackets with Vi. I understand that it is probably much nicer to develop utilizing a IDE that would help keep track of those brackets and let you focus more on the problems. Therefore, watching this video collection is a paradigm shift for an object oriented developer, but not that big of one for me. I have already recognized that many functions that we place inside of classes really stand on their own and can be used in many different situations. Typically these functions tend to land in a utilities classes and are statically available to all the code. In addition, I have been very excited about the ability to pass functions (lambda function) and the ability of having high-order functions. Neal Ford does a great job of explaining concepts and presenting solutions that are more functional based thinking and pointing out some of the problems in object oriented thinking. He does a great job in presenting solutions in Java, Groovy, Scala, and Clojure, but don’t expect to get a detailed tutorial of these languages since that is no the focus of these videos. If you want to learn about functional programming, the benefits of it, benefits of other concepts like immutable objects, and get a little exposure to a few functional programming languages. Then this is a great collection of videos for you to watch. If you are a die hard object oriented and Java developer and don’t want to hear about any possible issues with this paradigm, then you might not want to watch, since he does provide some criticism of both of these. If you can open your mind an accept another persons point on things, then I would recommend seeing things through the functional programming eyes.
The Functional Thinking video collection does a great job of quickly covering some major topics in functional programming. Some of the areas that I really enjoyed were the use of filter and map, meta-programming, functional data structures, and overall the bendability of functional languages. He presents the idea that functional languages are more focused on the language bending to solve the problem vs bending the problem to fit the language. I think this is a very interesting idea and makes me more interested in learning about Scala or Clojure. I agree that in Java it seems that you have to write a lot of code that is not helping solve the problem, but more building the framework to solve the problem in. I also agree that we should look at approaching the solution to the problem by seeing what language is the best fit and we can do that since all of the languages will run within the same JVM. I forget the term that he used to describe this idea, but agree with him completely on this concept.
Overall if you are looking for an introduction into why functional programming has been and will continue to gain traction, this is a good collection of videos for you to watch. Keep in mind that this is more of an introduction and you cannot explain everything in under 4 hours of lecture. But I would be that you do walk away thinking about implementing some of the concepts in your Java code, like immutability, favor composition over inheritance, and/or get you really excited for lambda functions that should be coming in Java 8.