lunes, 2 de marzo de 2015

El boom de la Programación Funcional (parte 1/3)

Desde hace relativamente pocos años, el paradigma de la programación funcional ha tomado un nuevo auge, hasta el punto en que hoy en día podríamos considerarlo como una especie de "trending topic" en el mundillo de la programación en general. Podría decir que los conceptos esenciales son más viejos que la programación misma. Pero, para alguien como yo, que tuve toda mi formación inicial en lenguajes estructurados y procedurales, que luego pasé a la "moderna" orientación a objetos, y que desde hace años C++ es mi herramienta de trabajo en el día a día, esto es nuevo. Es algo que empezó a hacerme ruido con la estandarización de C++11, y que por lo que veo, gracias al auge del paralelismo, llegó para quedarse.

Hay muchos programadores sueltos que han tenido una formación similar a la mía, y que aún no descubren lo enriquecedor que es el mundo de la programación funcional. A esos colegas les estoy escribiendo. Por que si bien, es muy probable que yo nunca use de verdad un lenguaje realmente funcional, las ideas que me va implantando el aprender sobre este paradigma sí repercuten en mi forma de pensar los problemas y analizar las implementaciones. Creo que todo informático debería tener una formación básica en programación funcional, con el solo objetivo de abrirle la cabeza a otra forma de analizar un programa y de entender la programación.

 "Lisp is worth learning for the profound enlightenment
experience you will have when you finally get it; that
experience will make you a better programmer for the rest
of your days, even if you never actually use Lisp itself a lot." 
(Eric Raymond, "How to Become a Hacker")

Como ya dije, en mi formación universitaria no me topé nunca con la programación funcional (por suerte ya arreglaron eso en el plan de carrera). Empecé a aprender sobre esto cuando descubrí los videos de los cursos del MIT OpenCourseWare. Estaba buscando sobre algoritmos y estructuras de datos, pero me llamó la atención que en un área tan cambiante, halla uno muy popular que date de 1986. Así que lo baje y lo empecé a mirar también. Es el mítico "Structure and Interpretation of Computer Programs" de los grandiosos Hal Abelson y Gerald Jay Sussman. El título se ve muy prometedor, pero no dice nada de programación funcional. Sin embargo, es en gran parte sobre lo que se aprende en su primera mitad, utilizando ese famoso y ridículo lenguaje que es lisp. Un lenguaje que, aunque en su extremadamente sencilla sintaxis resulta algo bastante horrible (al menos para mi), en sus ideas y posibilidades es toda una maravilla, una obra de arte.


A lisp, lo han definido como "un lenguaje de programación programable", "un instrumento de la razón humana", "el lenguaje que Dios habría usado para implementar el universo mismo", y hasta como "el Chuck Norris de los lenguajes de programación". Esto se debe a que no solo permite hacer programas, sino que permite construir sobre el mismo y fácilmente nuevos lenguajes, ya sean generales o específicos para resolver un problema. Esto es algo mucho más abstracto, complejo, útil y por sobre todo interesante. Y lo logra con elegancia, a partir de muy pocas reglas. Recomiendo a cualquiera ver el curso completo ya que, además de la claridad de los docentes, está lleno de perlas imperdibles, y el contenido no pierde vigencia con los años. Ya dije en otro post que la primer clase, de Abelson, era todo un ejemplo en sus definiciones. Y como para terminar de convencerlos, les adelanto que en la lección 7a, Sussman demuestra lo maravilloso que es el paradigma y su lenguaje de una forma tan pero tan reveladora, que se viste especialmente como una mago para la ocasión. En los primeros 30 minutos de esta lección, llega a escribir todo un intérprete de lisp (sí, así de complejo es el ejemplo), escrito en lisp (sí, así de potente es el lenguaje), cuyo código fuente entra en nada más que 4 pizarrones (sí, así de elegante es el paradigma). Sin duda una de las clases de programación más memorables que he visto.

Capturas de la lección 7a del curso de Sussman y Abelson, disponible aqui. Una ilustración muy bien traída al
caso del genial M. C. Escher, un Sussman vestido de mago, y una música de revelación ochentosa ambientan el
 momento en que los los alumnos contemplan a lisp implementándose a si mismo, en una epifanía colectiva.

Aunque, como dije antes, nunca use directamente casi nada de lo que vi en ese curso, sí digo que me abrió la cabeza, me dejó impresionado, y me mostró una forma de pensar muy diferente e interesante. Pero esto es solo el comienzo, como adelanté en la introducción, el auge paralelismo le ha dado nueva vida al paradigma, y más utilidad y aplicaciones aún en lenguajes basados en otros paradigmas. Pero para evitar aburrirlos, dejo eso para la segunda parte.

2 comentarios:

  1. Estudie en la universidad de Lujan, Bs As, alla por 1998, bachillerato en sistemas. La primer materia de programacion es "Metodos de Programacion". el docente era Jorge Scucimarri, un capo total, que no lo volverias a ver hasta el ultimo año de Licenciatura.
    En esa materia vimos (de entrada, como para atragantarnos y plantearnos si de verdad estabamos dispuestos a cursar la carrera) PROGRAMACION LOGICA, FUNCIONAL Y ALGORITMICA. Ja! Muchos salieron correindo despues del pront de prolog:
    >?
    Y el dolor de cabeza de 2 horas y media de programacion logica no te haces idea...
    Y LISP..., despues de prolog, era mucho mas accesible, te lo puedo jurar.

    ResponderEliminar
  2. si... corria los interpretes en una Casio!!

    ResponderEliminar