I don’t have a good track record with predicting the popularity of end user technologies. I thought Google Wave would take over all other methods of communication. I later expected Google Glass to become popular and push the development of augmented reality products to a new level. Neither of those worked out, as we now know.
I seem to have done better with programming languages and frameworks, however. I picked up HTML and JavaScript in 1998-1999, followed by PHP in 2000-2001, and C++ for desktop applications around the same time. I started using Ruby around 2005, and later picked up Rails in 2008. I learned CoffeeScript and began using it in my projects in 2010, back when it was at 0.6.
All of these languages/frameworks turned out to have enduring popularity and have served me well. However, I’m always looking for the next level of productivity and expressiveness, and I have become somewhat dissatisfied with what I can get now.
I noticed that functional programming is becoming more popular across different languages and domains. So this is what I decided to explore next. I hope that my intuition is correct again, and that FP will become truly mainstream rather than being just another fad.
Here are some interesting discussions about functional programming:
So why functional programming and not something else? Here are my main reasons:
I’ve been keeping an eye on different FP languages (mainly Haskell, Scala, OCaml, F#, Clojure and Erlang) and Haskell seems to be the most intriguing so far.
These are the main reasons why Haskell seems to have the edge over other languages in my estimation:
As of now, I don’t know if it’s worth learning Haskell as a practical language though. There are some products implemented in Haskell, but I think there is a danger that people are attracted to it as a way of solving very difficult puzzles rather than because it provides significant productivity or quality gains. I’ve seen it happen a lot in the C++ world (particularly with C++ template metaprogramming).
I don’t know enough to discern the real reason, but on the plus side, I’ve seen people express the sentiment that learning functional programming improves their coding style in “regular” languages. I’m interested in translating what I learn from Haskell back into CoffeeScript and JavaScript.
I primarily develop web applications, but at this point, Haskell doesn’t seem particularly viable for client side code in web applications.
JavaScript/CoffeeScript have first class functions. I’ve already been using Underscore.js and found it very useful. I’ve seen interesting libraries for functional reactive programming pop up (Bacon.js, Kefir.js and RxJS).
I’m interested to see to what extent functional programming can be applied in these languages.