Hace poco he visto este chiste en xkcd que refleja a la perfección el sentimiento que se tiene al programar en lisp:
«Elegantes armas, para una época mucho más civilizada.»
Lisp es el lenguaje de programación de la inteligencia artificial (clásica) por antonomasia. Paul Graham, que además de emprendedor es un gran defensor de lisp, tiene varios artículos a favor de lisp. Estos son algunos de sus argumentos a favor de este lenguaje (escribo de memoria, que alguien me corrija si me equivoco):
- Tiene una sintaxis concisa. Paul sostiene que cuanto más conciso es un lenguaje de programación, más potente es.
- Es posible redefinir el propio lenguaje, permitiendo crear nuevos lenguajes, por lo que en realidad es un meta-lenguaje.
Paul argumenta que los lenguajes de programación se están lispificando y creo que esto es más o menos lo que está pasando. Tomemos por ejemplo ruby y groovy. Ruby es un lenguaje de programación interpretado muy potente. Groovy es la versión javaficada de ruby (también existe Jruby, que es ruby ejecutado sobre la máquina virtual de java). Groovy es más bien una reinterpretación de java como lenguaje interpretado y creo que terminará imponiendose a medio plazo al propio java, para ciertos ámbitos de aplicación. Ambos son lenguajes relativamente modernos, ambos son interpretados y tienen closures que a su vez (y entre otras cosas) permiten la creación de lenguajes específicos de dominio (DSL’s). Aún así, no llegan a la potencia de las macros de lisp que permite redefinir el lenguaje y que existan dialectos del lenguaje (como scheme). ¿Máquinas virtuales? Lisp ya era interpretado en los años 60 y sólo ahora que el hardware lo permite se están redescubriendo las ventajas de los lenguajes interpretados.
El principal problema de lisp es su sintaxis, recargada de paréntesis como los del chiste, lo que lo hace difícil de mantener porque ser muy difícil de leer, aunque Paul Graham lo ve cómo un problema menor. Pero en esto discrepo y creo que es mejor usar ruby o groovy, que mantienen parte de las ventajas de lisp, sin la desventaja del mantenimiento.
En general también pienso que los lenguajes se están lispificando. Es lógico que cuanto más haga un ordenador por tí, mejor. Y por eso creo que no sólo se están lispificando, sino que poco a poco los lenguajes se están convirtiendose en algo más cercano al lenguaje natural, hasta que (idealmente) algún día no programemos, sino que hablemos directamente con los ordenadores.
Pero tampoco abogo por el «todo en ruby». Es impensable implementar ciertas aplicaciones con un lenguaje interpretado (en particular en robótica) pero a alto nivel, es mejor tender hacia lenguajes cada vez más abstractos, que permitan, como lisp desde hace mucho tiempo, decir mucho con poco y adaptar el lenguaje a cada situación.