Today, functional programming is emerging from the shadows. It turns out that when you program imperatively (viewing variables as slots in memory with changeable values), you create programs that are difficult for you to reason about when concurrency is introduced. Furthermore, thread-based concurrency techniques have not proven to be effective in enabling developers to write scalable applications. Functional languages help solve these problems by discouraging you from changing the values of variables and by providing alternate concurrency mechanics, such as actors (message-passing objects).
We have created a collection of books in this bibliography on the languages and libraries of modern industrial-strength functional programming. There are books on Scala, Haskell, Erlang, Clojure, F# and R. We’ve even listed books on applying functional techniques to work in normally-imperative languages, like C# and Java, and books to get you started if you don’t know anything about functional programming. Finally, we’ve listed a few books on the libraries and frameworks that we think are most helpful in writing enterprise-grade applications in functional languages.