It wasn't so long ago that functional programming seemed to be an arcane science. If you knew Haskell, Standard ML, or Common Lisp, you've either been programming for a very long time, involved in computer science research, or just had a lot of free time on your hands. However, functional programming has been making a comeback with languages like Erlang being used more in production settings. In addition, newer languages such as Scala, Clojure, and F# build on functional programming principles from previous languages. Still, their applications are either highly specialized or can be accomplished with more mainstream languages such as Java, Python, and C#. So, why should we even bother learning functional programming?
1. It's a completely different way of programming.
A language that doesn't affect the way you think about programming, is not worth knowing. - Alan Perlis
If you haven't done much functional programming before, it feels very restrictive. In most of them, you don't have loops or classes. In some cases, you can't mutate variables (once they're set, you can't change them). Doing something as simple as "fizzbuzz" can be very difficult and unintuitive. Students today start with Java and, when introduced to C, have difficulty grasping the idea of pointers. Going from a object oriented language to functional programming can be that kind of jump.
But stick with it and it'll start making more sense. Eventually, you'll find that functional programming takes some different approaches that, in many ways, can be even simpler and faster than their object oriented counterparts. Concepts such as currying and pattern matching provide new ways to attack old problems. Some concepts that you might've forgotten or maybe never learned like recursion come back in a big way. In fact, if you don't have a firm grasp of recursion, then learn a functional programming language. Without iteration and loops, you'll have to depend on it.
2. It's making a comeback.
Despite the relatively small number of programmers that use functional languages, old and new functional languages are making a resurgence. Erlang, a language developed at Ericcson, is designed to handle distributed and concurrent workloads. Facebook chose to use Erlang to implement their messaging systems. Opscode also used Erlang to rewrite Chef, a tool for automating infrastructure, which is used to support large scale systems like Facebook's. F#, developed at Microsoft Research, is being pitched as a language that helps programmers analyze and visualize big data.
3. Concepts from functional programming are being integrated into current languages.
4. Lots of resources
As I had described in my previous blog on learning something new, there are many ways to learn about functional programming. In the past year, Coursera offered two classes that involved functional programming (Functional Programming Principles in Scala and Programming Languages). In addition to online resources, you can seek out local user groups. In Honolulu, we have the OUDL, which meets a few times every month. The topics go beyond just programming languages and is a good chance to see what the tech community in Honolulu is like.
Functional programming used to be extremely difficult to get into, but now it's so much easier. Stick with it and you'll get the most out of the code you write, whether it's a functional language or not.