Academics love functional programming, many practitioners fear it. But, neither love nor fear are appropriate. Functional programming technology comes with advantages and disadvantages, like all other technology. With this talk, I will introduce functional programming, distinguish it from functional programming languages, and explain the importance of both.
One key benefit of functional programming is its unrivaled clarity of expression. In contrast to imperative programming, all communication between distinct components uses explicit channels. Hence it easy to test components, to compose them, and to validate them.
The requirement of explicit channels also means that both the programmer as well as the compiler knows all dependencies. As a result, functional programming creates numerous opportunities to exploit modern forms of parallelism. For the programmer, explicit communication means a reduction in race conditions; for the compiler, it means lowering the cost of automatic parallelization.
Last but not least, functional programming languages provide many more mechanisms for designing and implementing embedded domain-specific programming languages. Such languages greatly facilitate collaboration with domain experts and in principle, they enable compilers to produce much more efficient code than for programs in full-fledged languages.