Lenguajes más intimidantes que el Klingon

25 01 Klingon

En su video “White & Nerdy” (2006), el satirista y músico Al Yankovic hace una parodia de la canción de rap “Ridin”. El personaje del video, un hiper-nerd, presume entre otras cosas de poder hablar tanto el leguaje de programación Java, como el lenguaje imaginario de los Klingon, una de las civilizaciones importantes en el universo de Star Trek. Y en efecto, aprender a decir frases como “botlhDaq SoH ghIqtal vIneH” (que quiere decir “Te reto a un duelo a muerte”) no es precisamente fácil, pero el Klingon, junto con muchos otros lenguajes artificiales en la vena del Esperanto, ha tenido una explosión de popularidad como actividad intelectual-recreativa en los últimos 20 años, con la ascendencia de la cultura “nerd”.

La diferencia es que la creación del esperanto respondió a un idealismo internacional de finales del siglo XIX, con la idea de unir culturas y reducir fricciones entre las naciones, mientras que cosas como el Klingon son fenómenos de entretenimiento que han evolucionado, tomado vida propia y hasta se han convertido en objeto de estudio. Se han creado otros muchos lenguajes artificiales como éste en la literatura, con un autor ó autores proponiendo sus bases y luego teniendo a una legión de lectores entusiastas desarrollándolo en idiomas completos y creando escuelas e institutos formales para aprenderlos y escribir en ellos.

Dos casos interesantes y divergentes son de principios del siglo XX: el primero es el R’lyehiano, la lengua de los antiguos y terribles dioses creados por H.P. Lovecraft en sus novelas de terror cósmico de los años 30. Este lenguaje de hecho no puede ser pronunciado por humanos y no por sagrado, sino porque los monstruos que lo hablan tienen otra anatomía y sus sonidos son impronunciables con nuestras cuerdas vocales.

Con esa pinta, seguro cualquier cosa que diga es impronunciable
Con esa pinta, seguro cualquier cosa que diga es impronunciable

Lovecraft sólo da algunos atisbos de él en su obra y en general los fans no lo han desarrollado mucho. La frase más famosa en esta lengua es:

Ph’nglui mglw’nafh Cthulhu R’lyeh wgah’nagl fhtagn.

(“En su morada en R’lyeh, el muerto Cthulhu sueña y espera”).

Por otro lado tenemos el Quenya, el lenguaje élfico creado por Tolkien en El Señor de los Anillos en los años 40. Siendo Tolkien un lingüista de formación, su trabajo para desarrollar el Quenya fue mucho más serio y extenso, y las legiones de admiradores de esta novela lo han desarrollado en un lenguaje completo, con gramática y escritura perfectamente estructuradas. Namárië, o el “Lamento de Galadriel”, es quizá el poema más famoso escrito en Quenya:

Ai! laurië lantar lassi súrinen,

yéni únótimë ve rámar aldaron!…

Namárië! Nai hiruvalyë Valimar.

Nai elyë hiruva. Namárië!

¡Ah! ¡Como el oro caen las hojas en el viento,

e innumerables como las alas de los árboles son los años!…

¡Adiós! ¡Quizá encuentres a Valimar!

¡Quizá tú la encuentres! ¡Adiós!

25 03 Namarie
Fuente

Este tipo de actividad estuvo siempre alejada del mainstream: todavía en los 70s se usaba de forma muy esporádica, por ejemplo con el puñado de líneas en Huttese que dice el malvado Jabba en las películas originales de Star Wars. Pero con la creación de comunidades en línea, el entusiasmo se ha concentrado y multiplicado, poniendo juntos a entusiastas de todas partes. En tiempos recientes se han añadido a la lista varios idiomas muy populares, creados por lingüistas profesionales para la industria del entretenimiento, como el Na’vi de la película Avatar, ó el Dothraki y el Valyrio de Juego de Tronos, cada uno con sus legiones de fans, sitios en línea y hasta una creciente literatura.

Crear estos lenguajes, a simple vista, puede parecer mucho más complejo de lo que parece. Pero en general, como explica David Peterson (el lingüista de Juego de Tronos), el método es basarse en una estructura gramatical conocida y luego ponerse a inventar el vocabulario. Una gramática simple le va bien a un lenguaje bárbaro como el Dothraki y las palabras inventadas deben sonar más “rudas”, usando muchos sonidos con J y K, mientras que un lenguaje sofisticado como el Valyrio requiere una gramática más elaborada y palabras con sonidos más moderados, con sonidos de SH, L y la R suave.

Tenemos también otro tipo de lenguajes artificiales y que en efecto son mucho más complejos de construir: los lenguajes lógicos. Las matemáticas son el lenguaje lógico por excelencia y a diferencia de los lenguajes naturales, no admiten ningún tipo de ambigüedad: de hecho esa es su principal característica. Podemos decir que las matemáticas y la poesía son as antípodas del lenguaje: si la poesía evoca y es infinitamente ambigua por medio de sus metáforas y alegorías, las matemáticas y la lógica quieren exactamente lo opuesto: poder expresar pocas cosas, en un terreno muy limitado, pero sin ningún tipo de ambigüedad ni equívoco. Como lo propuso el filósofo alemán Gottlob Frege (1848-1925): “la aritmética debe de poder expresar el pensamiento puro”.

Y si bien aprender un lenguaje como el Klingon ó el Valyrio toma su tiempo, siendo imitaciones de lenguajes naturales tienden a ser más sencillos que de entrada ver un lenguaje lógico como este:

FregeEse es un extracto del lenguaje que Frege propuso a fines del siglo XIX y que sirve de base para la moderna notación lógica-matemática.

Dejaré en esta ocasión de lado la notación matemática moderna, que no sólo es compleja de aprender como notación, sino que implica el aprender conceptos totalmente fuera de la experiencia diaria, cosas como “calcular el volumen de un sólido en rotación” que primero necesitamos entender qué son, para luego aprender cómo escribirlo. Me enfocaré en los lenguajes puramente lógicos, que describen, de forma muy clara pero muy intimidante, expresiones que podemos entender sin previa preparación, por ejemplo:

¬ (X ^ ¬Y), o bien

W (X \ (W Y )).

Ver esas expresiones, que de hecho tienen significados muy sencillos, nos puede dar una sensación inicial de espanto y de estar ante algo exótico e inentendible, mucho más que una frase de la Reina Daenerys hablándole a sus dragones. Las dos expresiones, que son equivalentes, simplemente representan que:

25 04 ConjuntosHay un conjunto W, con dos subconjuntos X y Y; y lo que queremos mostrar es “dentro del espacio W, la negación de X intersectada con la negación de Y”. O sea:

25 04 Conjuntos 2Esto es, que podemos entender el concepto sin ningún problema, pero la notación es muy alejada del lenguaje natural porque es una simplificación destilada que no admite error ni ambigüedad. Podemos entender sin problemas la frase y el concepto “para todo número natural, si lo elevamos al cuadrado el resultado será mayor ó igual que el número inicial”. Pero verlo en notación nos empieza a dar taquicardia:

n ∈ ℕ: n2n

Sin embargo esta intimidación inicial es porque en el lenguaje natural estamos acostumbrados a dar significados más bien laxos a las cosas que decimos. “Te quiero mucho” es entendible, pero no es cuantificable. “Nos vemos al rato” puede ser que en efecto nos veremos en un rato más, que ese rato puede ser muy largo, o simplemente “nos vemos después” ó “adiós”. En lógica y en matemáticas no podemos decir eso. O más exactamente, sí lo podemos expresar, por ejemplo en estadística: “nos vemos dentro de 30 minutos, con una desviación estándar de 5 minutos”, pero no podemos darle a una expresión matemática la ambigüedad que sobre-entendemos en el lenguaje natural.

Además de la lógica y las matemáticas, en el mundo moderno tenemos otros lenguajes artificiales de este tipo y que son ampliamente usados: los lenguajes de programación. Estos quizá son de un nivel de accesibilidad un poco mayor, porque están construidos con “instrucciones” que muchas veces intentan reflejar conceptos que ya conocemos del lenguaje natural, si bien son usados con mucho más rigor.

Un programador, por ejemplo, quiere que cuando el usuario oprima la tecla “A”, el programa le muestre la palabra “Aceptado”, de modo que escribirá la instrucción más o menos así:

SI (Tecla=A), ENTONCES IMPRIMIR (“Aceptado”).

Ver esa oración es mucho más fácil de entender, porque quienes desarrollan estos lenguajes no quieren que los programadores lidien con el “lenguaje máquina” que son 1’s y 0’s, sino que escriban instrucciones más o menos equivalentes a cómo las pensamos. Una vez terminado de escribir nuestro programa, una función llamada “Compilador” hará el trabajo de traducirlo al lenguaje máquina, para que ésta lo pueda ejecutar.

Por supuesto, hay muchos lenguajes de programación y como hay gente loca en todas partes, hay algunos que se han puesto a desarrollar lenguajes extremadamente difíciles de programar, ya sea por juego, por sadismo o bien como investigación de las posibilidades de codificación y seguridad en los lenguajes. Una forma sencilla de comparar la accesibilidad de un lenguaje es el programa “Hello World”: simplemente, son las instrucciones requeridas para que la computadora escriba esas dos palabras en la pantalla.

Veamos primero uno de los lenguajes más sencillos y populares: el lenguaje Pascal, creado en 1970. En Pascal, el programa “Hello World” requiere de estas instrucciones:

program HelloWorld(output);

begin

Write(‘Hello, world!’)

end.

OK, eso se ve bastante sencillo de entender. Pascal es un lenguaje muy intuitivo y lo único que requiere es definir el nombre del programa, empezarlo, escribir nuestra frase y terminar. Parece que empezamos con el pie derecho en esto de aprender a programar. Pero Pascal, que fue muy popular en los 80s y 90s, ha sido sustituido por lenguajes más modernos, veamos dos de ellos. El primero es C++, que data de 1983 y que es el que hoy más se usa para desarrollar programas técnicos como antes era Pascal:

#include<iostream>

intmain(){

std::cout<<“Hello, world!\n”;

return0;}

Um, muy bien. Parece un poco más difícil, pero si lo vemos con detenimiento son detalles de protocolos: en lugar de “Begin” tenemos la instrucción “Include” que le dice al programa que podemos incluir definiciones o datos externos; y en vez de “Write”, este lenguaje usa algo llamado “Std::Cout”. No parece demasiado diferente. El otro lenguaje popular es Java, que apareció en 1995 y que se usa de forma extensa en la programación de internet. Veamos:

classHelloWorldApp

{ publicstaticvoidmain(String[]args)

{ System.out.println(“Hello World!”); }}

Wow. Cambia bastante más el protocolo. En vez de “Begin” ó “Include” tenemos “Class”, que parece sencillo, pero luego tenemos cuatro instrucciones bastante crípticas. Aquí como estamos hablando de un lenguaje con más extensión de entradas, tenemos que definir más cosas: “Main(String)” es la parte importante, que dice que es una función de texto; las palabras “Public Static Void” anteriores a ella quieren decir: que la función puede ser llamada desde cualquier parte del programa, que no pertenece a otro objeto, y que al ejecutarse cumple su cometido pero no da ningún resultado de regreso.

Nos estamos metiendo en aguas más profundas, pero en general estos ejemplos (en especial Java) dan una muestras más o menos representativa del tipo de cosas que tenemos que aprender para programar: una serie de palabras intuitivas con instrucciones básicas, y una serie de protocolos que debemos añadir para que nuestro programa se ejecute sin problema en toda circunstancia.

¿Qué hay de los lenguajes en extremo complejos —muy adecuadamente llamados “ofuscantes” ó “esotéricos”— que mencioné antes? Seguro es en lo que usted está pensando. Pues por supuesto, aquí van ejemplos de ellos. El primero se llama Befunge y fue creado en 1993 como un reto de compilación: el lenguaje, en vez de estar basado en instrucciones intuitivas, tiene una matriz de funciones predefinidas, a través de la cual hay que moverse por medio de flechas que suben y bajan, o se mueven lateralmente. El programa “Hello World” se ve así en Befunge:

> vv ,,,,,”Hello”<>48*,

vv,,,,,,”World!”<>25*,@

Sí, es una barrabasada y ni siquiera voy a intentar explicarlo. Como ya dije, los lenguajes esotéricos se usan, primero como retos intelectuales y después como formas de explorar las deficiencias de las diferentes partes de los lenguajes máquina. Muchos de ellos llevan a descubrimientos para mejorar las funciones de compilación o bien a aplicaciones en criptografía. El siguiente ejemplo es Brainfuck, que es también de 1993 y tiene un nombre que ya está bastante explícito. Esta infamia es “Hello World” en Brainfuck:

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>—.+++++++..+++.>>.<-.<.+++.——.——–.>>+.>++.

Este lenguaje está hecho de ocho instrucciones ultra-básicas y una función de apuntador, de modo que el crear pasos complejos requiere que el programador los “construya” usando sólo las ocho mini-instrucciones originales. Las ocho instrucciones son:

>

<

+

.

,

[

]

y lo único que hacen es: mover el apuntador, aumentarlo ó disminuirlo en un byte, aceptar un dato ó entregar un dato, y adelantar ó regresar el apuntador a la siguiente instrucción. Con este conjunto de instrucciones increíblemente minimalista, de hecho se puede usar el lenguaje para programar lo que se programa en cualquier otro lenguaje. Por supuesto, es humanamente imposible entenderlo, pero ha dado qué pensar a los programadores en cuanto a las posibilidades de simplificación (o “fundamentalización”) de comandos.

Finalmente, tenemos el lenguaje Malebolge, de 1998 y que toma su nombre del demonio Malebolgia, que según la obra de Dante, preside el octavo círculo del infierno. Si vemos el programa “Hello World” en este lenguaje, no es difícil imaginar a un demonio hablando así:

(=<`#9]~6ZY32Vx/4Rs+0No-&Jk)”Fh}|Bcy?`=*z]Kw%oG4UUS0/@-ejc(:’8dc

Malebolge es considerado el más difícil de todos, pues usa una aritmética base tres, un código que se altera a sí mismo y por qué no, una “operación loca” que toma las entradas del programa y las cambia usando matrices definidas arbitrariamente. Este lenguaje no es completo como los otros, por sus excentricidades y sus requerimientos de memoria dinámica, pero ha sido útil en el estudio de la criptografía moderna y además hay un capítulo de la serie Elementary en donde el moderno Sherlock Holmes lo identifica como parte del misterio que está investigando.

Con todo esto, mejor ponerse a estudiar Klingon, que de repente se antoja como juego de niños.

Referencias:

Klingon Language Institute

Klingon (tlhIngan Hol). Omniglot.

Artificial Language: Na’vi, Elvish & More. Alsintl.

Esperanto: the international language. Esperanto.net

R’lyehian. CthulhuWiki – Yog-Sothoth.com.

Elvish. Tolkien Gateway.

Quenya Course. Universitetet i Bergen.

Namárië. Instituto Linguístico Lambenor.

A Translation of Jabba Desilijic‘s lines in the Star Wars Trilogy.

Learn Na’vi. Learn Na’vi.org.

Welcome to Learn Dothraki and Valyrian! Valyrian.org.

Sonia Saraiya. Meet Game Of Thrones’ resident linguist. Ki fin yeni! AV/TV Club. Junio 12, 2014.

The Leviathan”. Elementary, Temporada 1, episodio 10.


2 Comentarios

Participa Suscríbete

VictorVictor

Una entrada muy divertida y sólo un matiz.

En Github, los 2 lenguajes más populares son Javascript y Python, quedando Java y C++ en 3º y 6º puesto respectivamente. Por en medio están Ruby y PHP
https://octoverse.github.com/

El índice Tiobe, que se mueve más lento, si muestra Java en 1º lugar y C++ en 3º, dejando Python y Javascript en 4º y 6º lugar. Por medio están C y C#:
https://www.tiobe.com/tiobe-index/

El matiz está en que Python es MUCHO más fácil de entender que Pascal, C++ o Java y afortunadamente va ganando enteros. Un hello World en python se puede hacer con un simple:
print(“Hello World”)

Que es casi igual que en Pascal, pero sin los BEGIN/END porque en Python se usa el salto de linea y los espacios como delimitadores, quedando todo más legible :)

BatchDrake

Una gramática simple le va bien a un lenguaje bárbaro como el Dothraki y las palabras inventadas deben sonar más “rudas”, usando muchos sonidos con J y K, mientras que un lenguaje sofisticado como el Valyrio requiere una gramática más elaborada y palabras con sonidos más moderados, con sonidos de SH, L y la R suave.

No puedo estar más en desacuerdo. Esto es un cliché.

Deja un comentario

Tu email nunca será mostrado o compartido. No olvides rellenar los campos obligatorios.

Obligatorio
Obligatorio
Obligatorio

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>