Grupo Linuxero del Bajío

Functional Programming

Víctor Manuel Jáquez Leal

Una de las tantas cosas que lamento de mi pobre educación profesional, ha sido que salí de la universidad sin saber qué es la programación funcional [1].

Recuerdo una ocasión que un compañero del tecno y yo llenamos un cuestionario para el proceso de reclutamiento de una empresa. Una pregunta era, más o menos, ¿conoce algún lenguaje de programación funcional? Nos quedamos mirando y dijimos “C y Pascal usan funciones ¿no? Entonces sí”. Ay, el mero recuerdo me avergüenza de sobremanera.

Pero lo más lamentable es la situación sigue igual. Varias generaciones han pasado desde que yo me gradué y todas terminan ignorando por completo lenguajes como Lisp, Haskel o Erlang.

La programación funcional es otro paradigma, en oposición al paradigma de la programación imperativa, que es la acostumbrada en lenguajes como C, Pascal, Java y demás. La programación imperativa es la que nos enseñaron y creímos que era la única que existía realmente. Bueno, para hacer justicia a la verdad, una vez una maestra nos dejó investigar qué otros paradigmas de programación había, aunque la idea subyacente fue que a excepción de la imperativa, el resto eran meras ensoñaciones pretenciosas.

Yo no programo en ningún lenguaje de programación funcional puro. Es más, editar mi archivo .emacs (que está en Elisp) me cuesta un trabajo brutal. Pero me gusta, cuando tengo que tirar líneas en Python [2], mi código apunte hacia este paradigma.

Es un hecho bien conocido entre los programadores, que aunque uno utilice un lenguaje de programación imperativo, si sigue las ideas de la programación funcional, el código resultante es más legible y menos propenso a bugs.

La idea de estado viene desde los conceptos de Turing y su máquina universal, sin embargo, y casi de manera simultánea, Alonzo Church presentó su cálculo lambda, que resultaron ser mecanismo equivalentes para resolver el problema de la indecibilidad de las matemáticas.

A partir de los conceptos de la máquina de Turing, von Neumann desarrolló los fundamentos matemáticos para la computadora moderna y de estos conceptos surge la programación imperativa, con las ideas de autómatas y estados bien arraigadas.

Sin embargo, el cálculo lambda fue relegado por su poca aplicabilidad práctica y no fue hasta que una panda de hippies en los sesenta, imaginando una computadora ideal, desarrollaron un lenguaje de programación fundado en los conceptos de Church. Algunos años después algunos idealistas lo implementaron.

Este ejercicio académico derivó en grandes avances en la computación moderna: las máquinas virtuales y la recolección de basura son frutos de la programación funcional, que luego la imperativa se llevó a sus prados.

Personalmente confío más en un programador que conoce y aplica las técnicas de la programación funcional, aunque sea con un lenguaje imperativo, que un neófito que sólo sabe de estados y transiciones.

  1. http://en.wikipedia.org/wiki/Functional_programming
  2. http://www.ceyusa.com/blog/index.php/blog/show/This-is-fun.html