Functional programming is a programming paradigm based upon building abstractions using functions, avoiding side effects and change of state. Pure functional programming is thread safe.
- Stackoverflow.com Wiki
Go to books ↓
Sometimes people say extreme things, such as "Functional programming isn't truly possible without referential transparency." Whether we agree or disagree, the act of looking at an extreme statement and analyzing the ways in which it is right, the ways in which is wrong but practical as an abstraction, and the ways in which it is fundamentally wrong is a very, very useful exercise.
As software becomes more and more complex, it is more and more important to structure it well. Well-structured software is easy to write,
easy to debug, and provides a collection of modules that can be re-used to reduce future programming costs. Conventional languages place conceptual limits on the way problems can be modularised. Functional languages push those limits back.
Learning Clojure and/or Haskell will make you a better programmer. Even if you don’t use it day to day, there are a ton of prescient lessons to be taken back to your language of choice.
We all know there's something to "get" -- but is it one massive "Eureka!" moment, or is it a series of smaller "Aha!" steps?
Just as the recursive call optimization removes the limit imposed by the call stack size, the early exit technique takes off the limitation imposed by our mental stack.
I can’t think of another 5-letter word that strikes fear in the hearts of so many developers, coming from an object-oriended/imperative language to a functional one. The problem with most monad tutorials is they present monads as a solution to a problem which is not clearly defined.