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.
We look at using map, filter, and reduce to manipulate arrays of objects, using techniques borrowed from functional programming.
While OO and FP are orthogonal, they are not mutually exclusive. That a good functional program can (and should) be object oriented. And that a good object oriented program can (and should) be functional.
Over the years, we’ve all heard some skepticism around using functional programming on a real life project. In our view, most of this skepticism stems from the perception that functional programming is inaccessible, overly academic, or not terribly useful.
Lambda expressions in Java are simply a less verbose way of creating (slightly constrained) Objects and as such the most likely outcome of adopting Lambda’s without a good understanding of core functional concepts is gnarly, twisted, hard to follow, obfuscated imperative Object Oriented code with a nice concise syntax.