Programación Funcional Práctica

Lo siguiente se reformuló de una presentación que di en LinkedIn el año pasado.
La presentación intentó explicar la programación funcional sin usar conceptos como "mónadas" o "inmutabilidad" o "efectos secundarios". En cambio, se centra en cómo pensar en la
composición puede convertirte en un mejor programador, independientemente del idioma que uses.

Hace 40 años, el 17 de octubre de 1977, se entregó el Premio Turing a John Backus por su contribución al diseño de sistemas de programación de alto nivel, especialmente el lenguaje de programación Fortran. Todos los ganadores del Premio Turing tienen la oportunidad de presentar una conferencia sobre un tema de su elección durante el año en que reciben el premio. Como creador del lenguaje de programación Fortran, uno puede haber esperado que Backus disertara sobre los beneficios de Fortran y los desarrollos futuros en el lenguaje. En su lugar, dio una conferencia titulada ¿Se puede liberar la programación del estilo Von Neumann? en el que criticaba algunos de los principales idiomas de la época, incluido Fortran, por sus deficiencias. También propuso una alternativa: un estilo funcional de programación .

La conferencia contrasta los programas convencionales y su "incapacidad para usar eficazmente formas de combinación potentes" con programas funcionales que "se basan en el uso de formas combinadas ". La programación funcional ha recibido un interés renovado en los últimos años debido al aumento de computación paralela. Pero el principal beneficio de la programación funcional es que se puede realizar sin importar si su programa se paralelizará o no: la programación funcional es mejor en la composición .

La composición es la capacidad de ensamblar un comportamiento complejo al agregar piezas simples. En las clases de informática se pone mucho énfasis en la abstracción: tomar un gran problema y dividirlo en partes tratables. Se pone menos énfasis en el reverso: una vez que tienes las piezas pequeñas implementadas, ¿cómo las conectas juntas? Parece que algunas funciones y sistemas son fáciles de conectar entre sí, mientras que otros son mucho más complicados. Pero tenemos que dar un paso atrás y preguntar: ¿qué propiedades de estas funciones y sistemas los hacen fáciles de componer? ¿Qué propiedades los hacen difíciles de componer? Después de haber leído suficiente código, el patrón comienza a emerger, y este patrón es la clave para comprender la programación funcional.