Llamk’ana: un lenguaje de programación en quechua

Introducción

En el siglo XXI, la digitalización de las sociedad es imparable. Las prácticas sociales, políticas, económicas, culturales, de todo tipo, se están imbricando con medios digitales. Sin embargo, como en todo proceso social, también existe desigualdad y exclusión. Particularmente el sur global y nuestro país, Bolivia, debe enfrentar al menos tres brechas digitales, que tienen sus respectivos componentes. Una brecha de acceso que tiene que ver tanto con dispositivos adecuados, no solo precarios como los celulares, y conexiones de calidad, no solo conexiones móviles con planes limitados. Otra brecha de uso y apropiación, que tiene que ver principalmente con las habilidades digitales y la apropiación de estas tecnologías para contextos y problemas locales. Y finalmente una brecha de producción, a nivel de contenidos digitales, como también software y hardware.

Para el tema específico del software, el conocimiento clave está en el manejo tanto conceptual y aplicado de lenguajes de programación, donde predomina el inglés. Ese hecho suele ser una barrera lingüística en un país plurilingüe como Bolivia, y donde existen alrededor de 1.3 millones de personas cuyo idioma principal es el quechua (Censo 2012). Esta situación impide desarrollar puentes de intercambio cultural entre el mundo de la programación y el mundo quechua, que implicaría a su vez nuevas posibilidades de educación técnica en lengua nativa y mayor apropiación y desarrollo local.

Objetivos

De allí que en el Laboratorio de Tecnologías Sociales nos hemos planteado diseñar un lenguaje de programación en quechua, al que hemos bautizado como “llamk’ana” (herramienta en quechua), que tiene como propósito servir como un medio más de educación técnica en programación para quechuahablantes, además de fomentar de este modo la revitalización del quechua para contextos técnicos y el mundo digital del siglo XXI.

Diseñar un lenguaje de programación tiene muchas fases y detalles, las cuales resumimos en la parte de ‘consideraciones informáticas’. Pero en este primer artículo queremos ensayar un primer enfoque, tomando solo la parte de las estructuras de control en la programación, y particularmente el teorema de la programación estructurada (secuencia, repetición y decisión). Estos tres conceptos son centrales en toda la lógica de programación y se manifiestan de formas muy similares en diferentes lenguajes de programación.

Metodología

Nuestra metodología es inter y transdisciplinaria. El equipo encargado inicialmente de este proyecto está compuesto por un informático, una antropóloga y una lingüista, pero planificamos ampliar la participación para el diseño y aplicación del lenguaje en las siguientes etapas más críticas a todas las comunidades de especialistas y de usuarios interesados en la temática, siguiendo los principios de apertura y colaboración que siempre hemos seguido en el Laboratorio. En este primer paso, tomamos varias decisiones iniciales, que luego pueden ser refinadas colectivamente.

Partiremos de unas consideraciones antropológicas centrales, hacía otras de corte informático y finalmente lingüístico. Para luego plantear una primera traducción de las estructuras de control e implementarlas en un prototipo que sigue el entorno y la sintaxis de JavaScript, el lenguaje de programación más popular del mundo, como una suerte de extensión.

Consideraciones antropológicas: ¿es posible programar en una lengua indígena?

Construir un lenguaje de programación en una lengua nativa es una tarea que requiere integrar nociones abstractas de informática con formas particulares de expresión lingüística, pero, ¿es esto posible? ¿Son compatibles las estructuras programáticas abstractas con las particularidades de una lengua indígena, como el quechua? Si es así, ¿qué requisitos deberían cumplirse para lograrlo?

Una forma tradicional de pensar sobre la relación entre lengua y cultura fue establecida por los antropólogos culturalistas, a finales del siglo XIX e inicios del siglo XX. La escuela que había iniciado Franz Boas comenzó a reflexionar cómo las lenguas indígenas, en sus conceptos,  expresiones y registros lingüísticos reflejaban diversas configuraciones culturales que se habían desarrollado a lo largo del tiempo. Estos antropólogos vieron que las lenguas expresan normas de comportamiento, roles sociales, instituciones, estructuras de parentesco, concepciones diversas sobre el espacio-tiempo, ideas políticas o religiosas, y también adaptaciones ecológicas a un medio ambiente determinado.

El quechua posee palabras y expresiones que no tiene el español. Por ejemplo, existen dos palabras para referirse a la palabra ´nosotros´: Ñuqayku, que expresa un nosotros excluyente y Ñuqanchik, un nosotros inclusivo. Pero, a su vez, el quechua carece de palabras para expresar ciertas nociones occidentales. Tanto el inicio como el fin de los encuentros interpersonales, que en español se expresan con un ´hola´ o un ´adiós´, no tienen una traducción exacta. En todo caso ´Imaynalla´ (¿Cómo estás?) es lo más cercano a un ´hola´, y ´Tinkunakama´ (hasta la próxima vez) es lo más próximo al ´adiós´. (Negretty, 17/02/2019)

No obstante, el razonamiento culturalista rápidamente dio pie al determinismo lingüístico, que se sintetizó en la hipótesis Sapir-Whorf. Dicha hipótesis postulaba que la lengua determinaba la visión del mundo que tienen sus hablantes, limitando su forma de pensamiento y capacidad de aprehensión. Esto implica que cualquier lengua indígena, al ser un sistema de comunicación desarrollado para una cultura y ambiente particular, sería incapaz de comunicarse efectivamente con otras lenguas y aprehender nociones e ideas fuera de su contexto. Sin embargo, aunque es cierto que las lenguas indígenas reflejan configuraciones culturales diversas, la investigación lingüística ha demostrado que no limitan el pensamiento humano. Un ejemplo clásico -pero equivoco- sostenido por deterministas linguísticos era que, ya que la lengua Zuñi no contaba con palabras para denominar el amarillo y el naranja; significaba que sus hablantes eran incapaces de reconocer estos colores. Sin embargo, cuando se retornó a la comunidad y se hicieron pruebas con los hablantes, vieron que los Zuñi, aunque no tenían palabras para denominar dichos colores, eran completamente capaces de distinguirlos y señalarlos.

Pese a que el determinismo lingüístico ya se ha descartado, en nuestro medio -y principalmente en el terreno del discurso político- todavía pregona la idea de que las culturas indígenas (expresadas en su lengua) y el pensamiento moderno (que, en nuestro caso se manifestaría en lenguajes de programación) son completamente opuestos e incompatibles. Según ellos, la llegada de las tecnologías digitales, expresadas en lenguajes de programación e inglés, necesariamente implicaría la desaparición de las culturas particulares y sus lenguas y que, si éstas pensaban sobrevivir, tendrían que resolver sus problemas mediante la disputa cultural.

“es importante y urgente comprender la cultura como un campo de disputa, en el que las prácticas y representaciones culturales operan como dispositivos para la reproducción o re-existencia, de formas particulares de vida” (Romero, 2019. pp: 264)

Pero, tras una mirada a la realidad, se comprueba que las culturas y lenguas indígenas todavía gozan de buena salud y, más aún, que sus hablantes se están apropiando de las nuevas tecnologías y expresiones culturales globales, mediante procesos que los intelectuales indígenas de nuestro país han denominado ‘automodernización popular’. Esto no quiere decir que las culturas particulares no corran el peligro de desaparecer con la llegada de la globalización y las nuevas tecnologías; pero significa que los propios actores están haciendo esfuerzos para que sus identidades sigan existiendo en la modernidad digital. Aunque existen muchas iniciativas, un ejemplo muy interesante de este fenómeno es la conformación de grupos de Facebook de hablantes aymaras y quechuas, que pretenden crear un espacio digital en las redes sociales para poder preservar su lengua.

El grupo Aymar Yatiqaña, dedicado al aprendizaje y revitalización del aymara en espacios digitales, reúne 87200 personas en Facebook.

Sin embargo, pese a los esfuerzos de los hablantes por ingresar al mundo tecnológico, una posición escéptica puede preguntarse si una lengua indígena, que responde a una sociedad y medio concreto, posee las expresiones abstractas que se requieren para programar. Al respecto, Levi-Strauss (1962) señalaba que, durante mucho tiempo, antropólogos y políticos se habían complacido en señalar que a las lenguas indígenas les faltaban términos para expresar conceptos abstractos, como ‘árbol’ o ‘animal’, aunque tenían todas las palabras necesarias para crear un inventario detallado de especies naturales. El autor señalaba, de manera muy atinada, que los creyentes de una supuesta superioridad lingüística (y actualmente muchos relativistas-activistas), omitían ejemplos que comprobaban la gran riqueza de expresiones abstractas que tienen las lenguas indígenas.

por ejemplo, la lengua chinook (...) usa palabras abstractas para designar muchas propiedades de los seres y de las cosas (...) la proposición: el hombre malvado ha matado al pobre niño, en chinook se expresa así: la maldad del hombre ha matado a la pobreza del niño; y, para decir que una mujer utiliza un cesto demasiado pequeño: mete raíces de potentila en la pequeñez de un cesto de conchas (...) En toda lengua, el discurso y la sintaxis proporcionan los recursos indispensables para suplir las lagunas del vocabulario. (Levi-Strauss, 1962: 11)

Es más, la lingüística moderna ha llegado a reconocer que, en medio de la diversidad, todas las lenguas comparten estructuras gramaticales comunes. Noam Chomsky fue quien, a mediados de los 50, revolucionó la lingüística, sosteniendo que la razón por la cual las personas somos capaces de construir y comprender miles de oraciones nuevas a lo largo de nuestra vida, es que poseemos algoritmos sintácticos innatos que nos permiten comprender el orden y la combinatoria de palabras. La existencia de estas estructuras o normas innatas sería la razón por la que, por ejemplo, los niños pueden adquirir de manera intuitiva el lenguaje y que, además, seamos capaces de aprender muchos idiomas pese a no ser hablantes nativos.

Consideraciones informáticas

Los lenguajes de programación son esenciales en el desarrollo de software y también en la resolución de problemas de información y datos. Es a través de ellos que se pueden expresar procedimientos estructurados, replicables y escalables que permiten procesar información para diversos propósitos y que a su vez crean valor para la sociedad.

Los lenguajes de programación son un hito importante en el desarrollo cultural humano, ya que allí concurrieron el trabajo conjunto tanto de matemáticos como lingüistas. Estos nos permiten comunicarnos con las computadoras sin que tengamos que usar los patrones binarios (unos y ceros) que gobiernan las computadoras.

Aprender un lenguaje de programación es considerado por muchos ({autores}) como una habilidad clave e indispensable del siglo XXI. Algunos lo comparan con aprender un idioma más. Sin embargo, pueden existir muchas barreras para su aprendizaje, tanto de las estructuras lógico-matemáticas que las gobiernan, como su propia expresión en una lengua extranjera, donde predomina el inglés.

Lenguajes formales vs. Lenguajes naturales

Los lenguajes de programación son lenguajes formales, por oposición a los lenguajes naturales. Los lenguajes naturales son las lenguas humanas, como el español, inglés y quechua; son lenguajes complejos, muy expresivos, pero también ambiguos, y evolucionan con la historia misma de sus sociedades. Si bien tienen regularidades presentes en sus respectivas gramáticas, éstas no explican toda la lengua y hay un montón de excepciones, ambigüedades y áreas no cubiertas. Los lenguajes formales son lenguajes artificiales, como  la lógica proposicional o algún lenguaje de programación específico. Si bien son más simples y menos expresivos, al mismo tiempo son más precisos, estructurados y no ambiguos, lo que es más útil en ciertos dominios de aplicación, como la comprobación de la validez de argumentos o la computación. Tienen una gramática y sintaxis más regular y estricta, emulando las formas matemáticas.

Al mismo tiempo los lenguajes de programación pueden tener un “registro” más natural, tratando de emular la sintaxis de algún idioma, como COBOL que trató de emular la sintaxis del inglés; o sonar de forma más estructurada y robótica, como FORTRAN o ALGOL.

Teorema de la programación estructurada

Ahora bien, los lenguajes de programación tienen, como todo lenguaje formal, una semántica y sintaxis específica, entre otros elementos. Pero además, y este será el centro de la traducción y la implementación del lenguaje de programación que proponemos, existen constructos relacionados al control del flujo del programa: las estructuras de control. Estas estructuras de control son conceptos abstractos que definen el orden de ejecución de las instrucciones o su “flujo”. Este flujo, si bien anteriormente se especificaba mediante órdenes de dirección a posiciones numeradas o nombradas, con la instrucción GOTO ( “ir a” en inglés), que generaba un código poco legible denominado como “spaghetti”, hoy en día se la realiza con tres constructos que provienen del “teorema de la programación estructurada:

  • Secuencia, que consiste en ejecutar las instrucciones una tras otra, de forma ordinal (primero esto, segundo lo otro, tercero, etc.). Visualmente se puede representar como una línea. En el código esto se suele plasmar escribiendo instrucciones de arriba hacía y separando las instrucciones con un punto coma (;) o hasta con bloques de código dentro de llaves ({ … }).
  • Repetición o iteración, que consiste en repetir una instrucción un determinado número de veces. Visualmente se puede representar como un bucle. En el código se usan palabras clave como WHILE (mientras) o FOR… IN… (por cada… en…).
  • Decisión o elección, que consiste en decidir entre una u otra instrucción dependiendo de si una condición se cumple o no. Visualmente se puede representar como una ramificación. En el código se usa las palabras clave IF… THEN… ELSE (si… entonces… sino).

Estructuras de control en las culturas andinas

Como señalamos anteriormente, el pensamiento abstracto y concreto se desarrollan en todas las culturas, independientemente de si éstos se hayan expresado o no en la lengua. Para demostrarlo, ponemos como ejemplo dos ámbitos de las culturas andinas, donde las nociones de secuencia, repetición y decisión se presentan: las técnicas de elaboración textil y la organización política.

Estructuras de control en el tejido

Arnold y Espejo (2019), en su libro Ciencia de tejer en los Andes, señalan que las estructuras y técnicas textiles andinas se aprenden por etapas, comenzando por la realización de tejidos sencillos (ina en aymara y siq’a en quechua) hasta los más complejos (apsu, en ambas lenguas). Las niñas comienzan elaborando prendas pequeñas con patrones relativamente sencillos, llamadas tirinsa (en aymara) o watu (en quechua); y al llegar a la adultez se encargan de construir prendas mayores como aguayos, ponchos y frazadas con patrones y diseños de gran complejidad y simbolismo.

Las estructuras de control, aunque no necesariamente están formalizadas o expresadas verbalmente por las tejedoras, están presentes en las técnicas de tejido desde los niveles más básicos. Una vez preparado el telar, las mujeres despliegan estrategias para ordenar las capas de urdimbre y ordenar las capas de color, mediante un trezado de hilos que se caracteriza por seguir pasos en secuencias ordenadas de pasos. Estas secuencias y movimientos de trenzado se ejecutan en bucle o repetición, para poder generar distintos patrones matemáticos de tejido. Finalmente, para poder frenar el bucle, terminar su tejido, o enlazar allí mismo otra estructura textil, las tejedoras observan si ciertas condiciones se cumplen, y toman decisiones técnicas para proceder. Por ejemplo, en la urdimbre entrelazada o cruzada:

“la técnica textil es la combinación y direccionalidad de las manipulaciones de los hilos de urdimbre. Por esta razón, el patrón del motivo es determinante en las técnicas. Por ejemplo, (...) en el caso del rombo, la dirección del movimiento va desde adentro hacia afuera, y luego nuevamente desde afuera hacia adentro para crear la forma del rombo. En el caso del motivo de zigzag, el movimiento se alterna sucesiva y reiteradamente hacia la derecha y luego hacia la izquierda” (Arnold y Espejo, 2019. pp: 77)
Estructura de Rombos (Arnold y Espejo, 2019. pp: 78)
Estructura de zigzag (Arnold y Espejo, 2019. pp: 75)

Estructuras de control en la política

Las estructuras de control también están presentes en el ejercicio de la autoridad comunal, en aquellas localidades donde todavía perviven formas tradicionales de organización política, por ejemplo, en regiones como Calamarca, donde se practica el sistema de rotativo de autoridad y el thaki (Carrillo, 2015).

En primer lugar, encontramos la secuencialidad en el thaki o ´camino´ en aymara. Se trata de una serie de peldaños ascendentes por los que deben pasar todos los comunarios varones, cumpliendo cada cargo en orden jerárquico. Aquí, un miembro de la comunidad comienza su trayectoria a partir del reconocimiento por parte de la comunidad como una persona adulta, que implica haber formado una unidad doméstica con una mujer y ser terrateniente. A partir de allí, comienza a desempeñar pequeños cargos, que van escalando de complejidad e importancia con el tiempo.

La estructura de decisión se observa en la valoración de las cualidades de las personas elegibles para otorgarles distintos cargos de autoridad:

“aparecen una serie de elementos que hacen a la autoridad, como tener conocimientos (en leyes, normas, gestión y otros), experiencia (aspecto muy valorado por la mayoría y asociado a la idea del thaki), la edad (sabiendo que muchos llegan a una edad muy avanzada para cargos superiores), ser residente (que implica estar más tiempo en los centros urbanos), ser profesional (tener más conocimientos sobre la administración), ser líder (puede ser joven a aunque no se pueda cumplir el thaki). En todos ellos se manifiestan aspectos positivos y negativos que determinan el ser autoridad” (Carrillo, 2015. pp: 64)

Finalmente, la estructura de repetición se puede observar en el sistema rotativo de cargos, que se repite año tras año. Al terminar un ciclo, se da inicio a otro de la misma duración para que las nuevas autoridades puedan ejercer.

Consideraciones lingüísticas

Vistos los ejemplos culturales donde encontramos algunas equivalencias y similitudes entre los conceptos de estructuras de control en informática y la cultura andina y quechua, entonces podemos afirmar que es posible una traducción. Sin embargo, no será una traducción completa ni libre de desafíos, pues hay que tener en cuenta los siguientes aspectos, que luego nos obligarán a tomar unas primeras decisiones.

Como lenguas, el inglés y el quechua difieren, en primer lugar, por su diferente estructura morfológica. El inglés es una lengua analítica que tiende a usar palabras sueltas sin muchos cambios morfológicos o inflexiones; mientras que el quechua es una lengua sintética, específicamente aglutinante y sufijante, donde las palabras van modificando su significado al añadirles sufijos (En inglés ‘para ti’ es for you, mientras que en quechua es QamPAQ). En segundo lugar, a nivel sintáctico, mientras en el inglés predomina las construcciones de Sujeto-Verbo-Objeto y las preposiciones, en quechua predomina las construcciones de Sujeto-Objeto-Verbo y las posposiciones (En inglés ‘Yo como papa es I eat potatoes, mientras que en quechua es Ñuqa papata mikuni). Asimismo, en el nivel semántico el inglés, debido a su contacto global, contiene más palabras en diversos ámbitos y por tanto generalidad, mientras el quechua tiene una mayor riqueza de significados en, por ejemplo el ámbito agrario, doméstico y comunitario, lo cual sin embargo no impide expandirse a nuevas áreas, como en el presente caso que se expandirá al área de informática.

Sobre el tema de la traducción, esta es una tarea compleja y nunca es perfecta. El resultado dependerá de muchos factores que involucran tanto los textos, contextos y los traductores mismos. Aquí queremos enfatizar un aspecto que será central en el resultado de esta primera traducción: el ámbito objetivo de la traducción. No es lo mismo traducir al quechua para un ámbito coloquial o literario, donde importa mucho el tono y la expresividad de las frases, que para el ámbito informático, donde importa más la no ambigüedad y la precisión, a expensas de la belleza.

Si bien la traducción coloquial y literaria tiene sus propios desafíos, la diferencia radica en que el lenguaje de programación se caracteriza por ser un lenguaje lógico, formal y relacionado con la automatización. Entonces, sucederá que la traducción de programación a un idioma como el quechua pueda dar como resultado algunas traducciones que no resulten “normales o usuales”, e incluso “feas” o “plásticas” desde el punto de vista coloquial y literario.

En ese ámbito los neologismos también juegan un rol importante. La necesidad de crear nuevas palabras en una lengua se da a partir del contacto entre distintas realidades culturales y frente a los neologismos hay posturas en contra y a favor. De acuerdo a la lingüista española Teresa Cabré (2022), la creación de neologismos indica la vitalidad de una lengua, mientras más neologismos tenga una lengua, más vitalidad tendrá. Cuando una lengua es vital los hablantes se enfrentan a la necesidad de crear nuevas palabras y por tanto incrementan su vocabulario, lo cual resulta positivo.  

Por ejemplo, existe un neologismo en quechua para celular que es “karu parlana”, donde karu es un adjetivo (lejos, distante), y parlana se encuentra conformada por la raíz parla de parlay (hablar) y el sufijo nominalizador -na. Karu parlana podría traducirse como “para hablar de lejos”. En la vida real y en la mayoría de los casos para hablar de un celular los quechua hablantes suelen usar directamente la palabra celular y no así karu parlana, entonces por eso la parte del consenso y difusión entre los hablantes durante la creación de neologismos en una lengua indígena es muy importante.

Como puede observarse en el anterior ejemplo del neologismo mencionado, suele suceder que la creación de nuevas palabras es un proceso de creatividad, pero también un proceso de incomodidad pues varios quechua hablantes desconocen esta palabra y cuando la escuchan la desconocen. Crear es un acto que incomoda.

 

Propuesta de traducción

Nuestro objetivo es aproximarnos a un lenguaje de programación en quechua, pero que al mismo tiempo posea una gramática predecible, precisa, no ambigua, y que sea fácil de analizar sintácticamente (parsing) y evaluar mediante un
compilador/intérprete digital. Para lo cual tomaremos como modelo la gramática formal de la lógica de predicados
que ha influido en todos los lenguajes de programación. 

Entonces, para nuestra propuesta de traducción tomamos las siguientes decisiones. A nivel morfológico y semántico, usaremos más palabras raíces del quechua, sin aglutinación y en modo infinitivo, sin conjugación; esto le quitará la “dulzura” a las expresiones quechuas, pero se ganará en precisión. De momento no usaremos neologismos, sino palabras de uso corriente. A nivel sintáctico, en realidad todas las lenguas al formalizarse en lógica de predicados, pierden su estructura, ya que en vez del SVO del inglés o el SOV del quechua se usa el VSO o notación prefija de funciones, donde el verbo, acción o predicado se antepone a los “términos” (sujeto y objeto). Estas decisiones harán que el lenguaje de programación en quechua suene con un registro más “robótico” y no tan dulce, pero es algo que también les sucede a todos las lenguas naturales que se formalizan.

A continuación mostramos las traducciones de los lenguajes naturales a la lógica de predicados, tomando en cuenta los conceptos de estructuras de control y sus palabras clave en JavaScript:

Informática Lenguaje natural
Area Concepto Español Inglés Quechua
Asignación Variable

Sea el promedio de Juan 67

Sea el nombre del gato Tomas

Sea alfa igual a 0.76

Let the average of Juan be 67

Let the name of the cat be Tomas

Let alpha be equals to 0.76

Juanmanta 67 promedionta kachun

Misimanta Tomas sutinta kachun

Alfaqa 0.76ta kachun

Estructuras de control
Repetición
Mientras Juan sea menor de 18 años, no hay que darle cerveza While Juan is under 18, we must not give him beer Juanqa sullk’a 18 watayuqkama kanman, ama cervezata qunanchik tiyan.
Por cada pata de la mesa, limpiarla For each leg of the table, clean it Sapa jamp’araq chakin, chakinta pichay
Decisión Si Juan es mayor de 18 años, entonces invitarle una cerveza. Sino, invitarle
un
refresco
If Juan is over 18, then invite him a beer. Else invite him a soda Sichus Juan 18watayuqmanta aswan kuraq kanman, cervezata quwaq. Manaqa,
refrescota
qunkiman.
Informática Lógica de predicados
Area Concepto Español Inglés Quechua
Asignación Variable

sea(promedioJuan, 67)

sea(nombreGato, Tomas)

sea(valorAlfa, 0.76)

let(juanAverage, 67)

let(catName, Tomas)

let(alfaValue, 0.76)

kachun(juanmantaPromedio, 67)

kachun(misimantaSuti, Tomas)

kachun(alfa, 0.76)

Estructuras de control
Repetición
mientras(menorQue(Juan, 18), noDarCerveza) while(lessThan(Juan, 18), dontGiveBeer) chaykama(pisiSullk’a(Juan, 18), amaCervezaQuy)
porCada(pata, mesa, limpiarla) forEach(leg, table, clean) sapa(chaki, jamp’ara, pichay)
Decisión siSino(mayorQue(Juan, 18), invitarCerveza, invitarRefresco) ifElse(greaterThan(Juan, 18), giveBeer, giveDrink) sichusManaqa(aswanKuraq(Juan, 18), cervezaQuy, refrescoQuy)

Como se puede ver, todas las lenguas naturales pierden su sintaxis frecuente, preposiciones y conjugaciones verbales, pero ganan en generalidad y abstracción, que justamente es una parte importante del aprendizaje de programación.

Y ahora pasamos de la lógica de predicados al lenguaje de programación.

Informática Lenguaje de programación
Area Concepto Español Inglés Quechua
Asignación Variable

sea promedioJuan = 67

sea nombreGato = «Tomas»

sea valorAlfa = 0.76

let juanAverage = 67

let catName = «Tomas»

let alfaValue = 0.76

kachun juanmantaPromedio = 67

kachun misimantaSuti = «Tomas»

kachun alfa = 0.76

Estructuras de control
Repetición
mientras(juan < 18) {
noDarCerveza()
}
while(juan < 18){
dontGiveBeer()
{
chaykama(juan < 18){
amaCervezaQuy()
}
por(pata en mesa){
limpiar(pata)
}
for(leg in table){
clean(pata)
}
sapa(jamp’ara, chaki){
pichay(chaki)
}
Decisión si(Juan > 18){
invitarCerveza()
} sino {
invitarRefresco()
}
if(marco > 18){ giveBeer() } else { giveDrink() } sichus(marco > 18){ cervezaQuy() } manaqa { refrescoQuy() }

De esta forma, los términos elegidos son los siguientes:

Area Concepto Termino
JavaScript
(inglés)
Termino
JavaScript
(español)
Termino
Llamk’ana
(quechua)
Descripción
Asignación Variable let sea kachun Permite asociar una variable o identificador a un dato concreto
Estructuras de control
Repetición
while mientras chaykama Permite repetir indefinidamente una acción mientras se cumpla una condición
for…in por cada (elemento) en (conjunto) (accion) sapa Permite repetir una acción para cada elemento de un conjunto
Decisión if..else si (entonces acción) sino (otra acción) sichus…manaqa Permite tomar ejecutar una acción si una condición es verdadera. Si la
condición
es falsa, entonces se ejecuta otra acción.

Prototipo de intérprete

En función a los términos elegidos implementamos un pequeño prototipo, que funciona de momento como una extensión de JavaScript vía macros. Puedes intentar, por ejemplo los tres siguientes programas básicos u otros similares:

// Ejemplo 1: Hola mundo

qillqay («Imaynalla tukuypaq!»);

// Ejemplo 2: Datos personales

// declaramos variables con los datos de interés

// imprimimos el resultado y concatenamos las variables con el operador «+»

kachun sutiy = «Ñuqa Juan Marca sutikuni»;

kachun wata = «Iskay chunka watayuq kani»;

kachun maymanta = «Cochabambamanta kani»;

kachun llamkay = «Ñuqaqa Yachakuq kani»;

kachun simita = «Ñuqaqa Castellanota, qhichwata ima parlani»;

qillqay(«¡Imaynalla! « + sutiy + «,» + wata + «,» + maymanta + «,» + llamkay + «,» + simita + «. Chaylla, pachi»);

 

// Ejemplo 3: Algoritmo de euclides (version recursiva)

kachun euclides = (a, b) => {

 sichus(a % b === 0) {

   qillqay(b);

 } manaqa {

   euclides(b, a % b);

 }

}

euclides(35, 10) // resultado 5

Para acceder al prototipo, da click en la imagen 👇

Conclusiones y trabajo futuro

Vemos a la tecnología no como un enemigo, sino como un instrumento, un medio para la inclusión y revitalización de lenguas indígenas como el quechua, como también apostamos por el multilingüismo en la Web y la informática. Asimismo, un lenguaje de programación en quechua tendría una aplicación práctica en la educación técnica en lengua nativa, principalmente para el aprendizaje de conceptos fundamentales de programación, y así romper de forma activa las brechas digitales.

Naturalmente, el enfoque y avance que hemos hecho también tiene sus limitaciones. A nivel antropológico, se podrían analizar más casos tanto macro o micro, en áreas cosmológicas, agrícolas, políticas, técnicas, etc.; donde se podrían encontrar lógicas tanto universales como particulares que podrían guiar el diseño de conceptos y técnicas de programación. A nivel lingüístico, se podrían ensayar otras traducciones más naturales, pero que al mismo tiempo tendrían que también concordar de algún modo con los requerimientos de las gramáticas formales. Y, a nivel informático, faltaría todavía implementar un montón de palabras claves de programación, relacionadas con los tipos de datos, operadores, estructuras de datos, definición funciones, funciones incorporadas, módulos, un mejor alfabeto, etc.; como también implementarlo en un compilador/intérprete completo, que incluya tokenizadores, parsers, árboles, transformadores y generadores de código, y para un mejor performance usar un lenguaje como C++ en vez de JavaScript. Y hasta se pueden ensayar versiones que se aproximen más al estilo natural del quechua.

Algunos lectores de este artículo pueden tener algunas preguntas importantes, que a continuación nos adelantamos a responder:

  • ¿Este lenguaje de programación que plantean pretende competir y hasta sustituir lenguajes más maduros y ampliamente usados en la industria de software como Python, JavaScript, Java, C#?
    • No. Hay que observar que existen diferentes tipos de lenguajes de programación según su ámbito de aplicación. Los lenguajes que se mencionan son del área de “producción”, y sirven para desarrollar productos. Pero también hay lenguajes de programación del área de “educación”, que sirven para aprender los fundamentos, pero no para crear productos; por ejemplo, PSeInt o Scratch. Llamk’ana es un lenguaje de programación de propósito educativo, con el que luego se puede transitar a otros lenguajes de programación del área de  producción.
  • No estoy de acuerdo con las traducciones que plantean, ¿son definitivas?
    • No lo son. Se tratan de unas primeras traducciones que hicimos para poder implementar un prototipo de lenguaje de programación en quechua, y para lo cual tomamos ciertas decisiones que ya describimos anteriormente. Se pueden discutir colaborativamente las decisiones y mejorar las traducciones en el futuro. Para este primer trabajo queríamos tener la estructura y una propuesta inicial, para mostrar que es posible realizarlo.

 

Dado que este es un trabajo inicial, y como laboratorio creemos en la apertura y colaboración colectiva, si estás interesado en contribuir al proyecto, te invitamos a colaborar llenando el siguiente formulario: https://forms.gle/CmNugexKmMguKu1j6. Estableceremos con los interesados reuniones semanales y un cronograma de trabajo.

Bibliografía

Cabré, M. 2022. Los neologismos no nos sirven únicamente para expresarnos y para denominar, nos sirven también para distinguirnos de los demás.

Couto, H. 2007. ¿Qué es ecolingüística?  

Phillipson, R. 2002. International languages and international human rights.

Negretty, N. (17/02/2019) En quechua no existe el adiós

Canal NativLang (2013) Does language shape how we think? Linguistic relativity & linguistic determinism

Arnold, D. & Espejo, E. (2019) Ciencia de tejer en los Andes: estructuras y técnicas de faz de urdimbre.

Levi-Strauss, C (1962) El pensamiento salvaje.

Carrillo, J. (2015) Estructuras y jerarquías en las autoridades del cabildo de Calamarca (entre el poder local y la colonialidad)

Instituto Nacional de Estadística (2015). Censo de Población y Vivienda 2012. Características de la Población. Fondo de Población de las Naciones Unidas.

Autores

Alex Ojeda Copa: informático y sociólogo

Valeria Peredo: antropóloga

Nicaela León: lingüista

1 comentario en «Llamk’ana: un lenguaje de programación en quechua»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *