De Fortran a Python, de Smalltalk a Ruby, de Lisp a Clojure, los lenguajes de programación sirven para crear soluciones computaciones que modelan la realidad a su manera. Lenguajes cuyo ciclo de vida, con suerte, alcanza a extenderse por generaciones.

En la historia encontramos lenguajes hoy olvidados como el influyente ALGOL 60 o el es-sorprendente-que-siga-vivo lenguaje Cobol. Y en los extremos, allí donde pocos tienen el atrevimiento de viajar, experimentar o jugar, encontramos los llamados lenguajes de programación esotéricos.

Lenguajes de programación

Los límites de mi lenguaje son los límites de mi mundo. Todo lo que sé es para lo que tengo palabras. -- Ludwig Wittgenstein

Esa frase nos dice que el conocimiento que tenemos de la realidad está en función de la calidad de nuestro lenguaje. Tiene sentido porque modelamos en mundo con palabras y otros signos relacionados con el lenguaje. Para informáticos-desarrolladores yo diría que "los límites de mi lenguaje de programación son los límites de mi máquina". Donde un lenguaje de programación es un conjunto finito de símbolos que escritos adecuadamente (es decir, conforme una sintaxis) pueden ser interpretados por una máquina. En otras palabras, un programa de cómputo es una combinación válida de esos símbolos.

Bueno, de hecho, tal máquina no existe realmente. Los lenguajes de programación funcionan siempre sobre abstracciones de la máquina física. Por ejemplo, Java, cuyos programas corren sobre una máquina virtual, a su vez sobre otra escondida por una serie de capas al estilo de la artesanía Matrioska hasta convertirse en instrucciones puras del procesador en turno.

En el futuro tal vez los lenguajes de programación serán tan parecidos a los "lenguajes humanos" que no podremos distinguir unos de otros. Entonces la programación será un acto de comunicación orgánico entre hombres y máquinas. A la fecha, creo que Wolfram Alpha es un adelanto de ello.

Lenguajes esotéricos

¿Qué hace que un lenguaje de programación sea esotérico? Su propósito (o la falta de él). Puesto que son el resultado de pruebas de concepto, experimentación, retos personales o simplemente bromas muy nerd. No suelen crearse para resolver grandes problemas tecnológicos, más bien para mostrar una sintaxis muchas veces ininteligible, pero muy apropiada para sorprender o divertir.

Parte del reto de diseñar un lenguaje de programación esotérico es que sea un lenguaje de programación en toda regla. En términos de ciencias de la computación, esto quiere decir que sea Turing completo.

Hace unos días hablamos de uno de ellos, de Trollscript, el lenguaje de programación troll, que no es sino una modificación del clásico Brainfuck, que veremos más adelante, antes hablaremos del primero de la historia.

INTERCAL

Estamos ante el padre de los lenguajes de programación esotéricos. Todo en él es una parodia bien pensada por sus creadores, un par de estudiantes irreverentes de la Universidad de Princeton en 1972. Uno de ellos, Don Woods cuenta que fue después de los exámenes finales y a altas horas de la noche cuando él y James Lyon iniciaron su curiosa conspiración contra los lenguajes establecidos.

INTERCAL fue diseñado para echar risas a costa de los lenguajes populares de inicios de los 70, entre ellos Cobol, Fortran, Basic, APL, Lisp, etc. Imitó sintaxis de varios de ellos y, sobre todo, agregó elementos nunca vistos por programadores en su sano juicio: no tenía ciclos, ni siquiera operadores básicos como la suma. El lenguaje de Woods y Lyon es un verdadero rompecabezas. El manual oficial de INTERCAL dice al principio:

Todo parecido con otros lenguajes de programación, vivos o muertos, es pura coincidencia... El nombre completo del compilador es "Compilador de Lenguaje sin un Acrónimo Pronunciable"... Es increíblemente fácil de aprender, adecuado para jóvenes programadores... y un reto para los profesionales... Es bien sabido que una persona cuyo trabajo en incomprensible se tiene en alta estima.

Un "Hello, world!" en INTERCAL se ve así: DO ,1 <- #13 PLEASE DO ,1 SUB #1 <- #238 DO ,1 SUB #2 <- #108 DO ,1 SUB #3 <- #112 DO ,1 SUB #4 <- #0 DO ,1 SUB #5 <- #64 DO ,1 SUB #6 <- #194 DO ,1 SUB #7 <- #48 PLEASE DO ,1 SUB #8 <- #22 DO ,1 SUB #9 <- #248 DO ,1 SUB #10 <- #168 DO ,1 SUB #11 <- #24 DO ,1 SUB #12 <- #16 DO ,1 SUB #13 <- #162 PLEASE READ OUT ,1 PLEASE GIVE UP

Y en la página oficial de INTERCAL podemos leer esta linda advertencia:

Abandona toda cordura, tú que entraste aquí.

OK. Has programdo en C. Hackeado en Lisp. Fortran y Basic no te causan terror... Dominas una docena de lenguajes que los übergeeks nunca han escuchado... Quizá estés listo para el reto máximo: INTERCAL.

Todavía es posible usar INTERCAL. Por ejemplo, para instalarlo en distribuciones Linux como Ubuntu basta ejecutar:

sudo apt-get install intercal

Por supuesto, INTERCAL no es el único de su tipo. Hay decenas de lenguajes así. Cerremos este artículo con otros esotéricos y su particular forma de imprimir "Hello world!" en pantalla.

LOLCODE

Si los Lolcatz programaran usarían este lenguaje para saludar al mundo:

HAI CAN HAS STDIO? VISIBLE "HAI WORLD!" KTHXBYE

Brainfuck

Minimalista, pero así se programa un "Hello world!".

++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+ ++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.

Urban Müller lo creó en 1993 para implementar el compilador más pequeño posible.

ZOMBIE

Diseñado para ejecutarse sobre un motor interfaz de un ser máquinal orientado a zombies (?). Los elementos del lenguaje están compuestos de undeads, demons y djinns.

HelloWorld is a zombie summon task SayHello say "Hello World!" animate animate

Shakespeare

Objetivo de diseño: hacer un lenguaje de programación con un código fuente tan hermoso que recuerde las obras de Shakespeare. ¿Cómo saluda este lenguaje? Con demasiadas líneas de código en comparación con los demás; estás son las diez primeras y son para la definición de variables:

The Infamous Hello World Program. Romeo, a young man with a remarkable patience. Juliet, a likewise young woman of remarkable grace. Ophelia, a remarkable woman much in dispute with Hamlet. Hamlet, the flatterer of Andersen Insulting A/S. Act I: Hamlet's insults and flattery. Scene I: The insulting of Romeo.

Piet

Lenguaje de programación basado en pixeles, a medio camino entre el arte abstracto y la programación. Creado por Dangermouse, doctor en ciencias, dibujante y hacker. Disfruten su "Hello, world!" (gracias a Carlos por recomendarlo en los comentarios):