¿Cuál es la mejor manera de aprender y entender la programación funcional?

Si desea aprender la teoría detrás de los lenguajes de programación funcionales, en realidad se basa en el cálculo de Lambda.

Una introducción a la programación funcional a través de Lambda Calculus es un buen libro para presentar el cálculo lambda básico. Puede aprender la teoría básica y conocer cómo desarrollar el lenguaje lisp a partir de la teoría.

Aunque Erlang es un lenguaje de programación funcional, su sintaxis y estilo están más relacionados con el lenguaje de programación lógico Prolog. Y es más utilizado en la industria que en la educación. Para aprender, quizás puedas probar otros lenguajes de programación funcionales más pequeños como Scheme o Standard ML.

Recomiendo altamente la Estructura e Interpretación del Programa de Computadora para aprender el lenguaje del Esquema. O también puedes probar los lenguajes de programación – Universidad de Washington | Coursera, que utiliza Standard ML, Racket (Dialect of Scheme) y Ruby como vehículo para introducir lenguajes de programación.

Experiencialmente.

Desde mi propia experiencia (aunque hace algún tiempo), la programación funcional es mucho más difícil de explicar que simplemente de hacer.

Esto puede tener algo que ver con sus raíces matemáticas. Tal vez solo las personas que escriben sobre esto son comunicadores pobres … quién sabe.

Pero lo que puedo decirles es que es mucho más fácil “hacer” que describir.

Ayuda tener un lenguaje que te fuerza la mano. Recomiendo Erlang. A pesar de su apariencia extraña al principio es de hecho simple.

No te preocupes por las cosas concurrentes. El Erlang secuencial permite que el centavo caiga. Sigue algunos turoriales en línea y te encontrarás solo ‘haciéndolo’.

Ojalá fuera el idioma con el que empecé.

Puede comenzar con el curso de Martin Oderskys Coursera: https://www.coursera.org/course/ …, que es una buena introducción a la programación funcional y Scala.

Acabo de leer SICP. ¡También es genial en el contexto de su pregunta con Scheme, por ejemplo!