3.2.8
En el interior de la Torre de Babel
Durante la reunión del 28 y 29 de mayo de 1959 en el Pentágono, se estableció que había que emprender acciones con el fin de construir ese nuevo lenguaje, destinado a hacer mucho más accesible el uso de los ordenadores. Este lenguaje recibió el nombre de CBL —common business language—. Durante esta reunión, siempre según el relato de la pionera Jean E. Sammet, se discutieron y aprobaron otras especificaciones, por ejemplo:
- La mayoría de los participantes estaban de acuerdo en utilizar la lengua inglesa, aunque algunos sostenían que había que privilegiar el uso de símbolos matemáticos.
- Privilegiar la facilidad de uso en detrimento de la potencia del lenguaje.
- Creación de tres grupos de trabajo, encargados respectivamente del corto, medio y largo plazo.
Fue entonces el grupo de trabajo sobre el corto plazo el que se ocupó de la creación concreta del lenguaje COBOL, combinando los mejores aspectos de tres lenguajes existentes en la época, utilizados internamente por actores diferentes: el FLOW-MATIC de Remington Rand Univac, desarrollado en 1958 bajo la dirección de Grace Hopper; el AIMACO (Air Material Command), desarrollado por el Air Materiel Command de la fuerza aérea de Estados Unidos en 1959; y el COMTRAN, desarrollado por IBM en 1958. El COBOL (Common Business-Oriented Language), primer gran lenguaje de programación que moviliza palabras procedentes del lenguaje natural, nació así del trabajo de un subgrupo de seis personas que formaban parte del comité del corto plazo, bajo la dirección de Grace Hopper (1906-1992), otra pionera de la informática.
Desde entonces, se han creado innumerables lenguajes de programación, más o menos específicos, más o menos próximos al funcionamiento de la máquina, donde los programas y los datos están inscritos en código binario. Se ha formado así una «estratificación» de lenguajes, diferenciados según su distancia respecto del sustrato material del ordenador y su proximidad con el lenguaje natural humano.
Como puede observarse en la tabla siguiente, el código máquina no hace ningún uso de elementos procedentes del lenguaje natural humano. Ahí están los famosos «ceros» y «unos» de lo digital, que son en realidad presencias o ausencias: de carga eléctrica en los soportes volátiles (memoria RAM), o de una orientación particular de los elementos magnéticos (discos duros HDD); y, para la señal, presencia o ausencia de un valor buscado en una corriente continua. Los 1 y los 0 son, pues, en realidad, ya abstracciones1, y la lectura de lo continuo en el nivel de los soportes y de las señales, con vistas a discretizar el valor leído, no es en absoluto trivial desde un punto de vista técnico2.
| abstracción | |||||
| lenguaje | |||||
| mnemónicos | |||||
| «natural» | |||||
| libres | |||||
| Pseudocódigo (algorítmica informal) | (No es un verdadero lenguaje ejecutable) | N/A (enlaces informales, p. ej. SI, ENTONCES, PARA…) | 100% ( solo lenguaje corriente) | Sí | Descripción en lenguaje natural estructurada como código. Ejemplo: «SI x > 0 ENTONCES mostrar "Positivo"». No impone ninguna sintaxis rígida. |
| Lenguaje específico de dominio (DSL / 4GL de alto nivel) | SQL (consultas a bases de datos) (1974) | 60 (estándar SQL-92) a 100+ palabras reservadas | 70–80% (sintaxis inglesa) | Parcialmente | Lenguaje declarativo muy próximo al inglés. P. ej.: SELECT nombre FROM Clientes WHERE ciudad="Paris";. Legible para alguien que no programa. Identificadores libres con comillas si son palabra reservada. |
| Lenguaje de alto nivel (interpretado) | Python (script, 3.ª gen.) (1991) | palabras clave (en Python 3.x) | 50–60% (sintaxis concisa) | Sí | Lenguaje de propósito general. Sintaxis próxima al inglés: operadores lógicos (and, not, in). P. ej.: for item in lista: print(item). Indentación significativa. |
| Lenguaje de alto nivel (compilado) | COBOL (gestión, 3.ª gen.) (1960) | + palabras reservadas (COBOL-85: 357) | 80–90% (muy verboso en inglés) | Sí | Sintaxis muy literal en inglés. P. ej.: IF NOT END-OF-FILE THEN MOVE TOTAL TO GRAND-TOTAL. Concebido para que lo lean personas no técnicas. |
| Lenguaje de más bajo nivel (compilado) | C (sistemas, 3.ª gen.) (1973) | palabras clave (C90/C99) | 30–50% | Sí | Lenguaje próximo al hardware. Pocas palabras clave, mucha puntuación. P. ej.: if(flag && i<10) total+=arr[i];. Código muy compacto, de ahí la baja proporción de palabras «naturales». |
| Lenguaje ensamblador (ensamblador) | x86 asm (sintaxis Intel) | 80 (8086) a 1000+ (x86-64) | 0–10% | Sí | Código nativo legible mediante mnemónicos. P. ej.: MOV AX,1; INC AX; JNZ loop. Las instrucciones abreviadas (MOV, JMP, ADD, …) y los registros (AX) no son lenguaje corriente. |
| Código máquina (binario puro) | (p. ej. opcodes x86) | (Sin palabras, solo códigos binarios) | % | No | Serie de bits incomprensible para el ser humano. P. ej.: B8 01 00 00 00 = MOV EAX,1. Ninguna abstracción: todo se direcciona numéricamente. Es el lenguaje que el procesador comprende directamente. |
En el nivel de abstracción inmediatamente superior se encuentra el ensamblador, lenguaje específico de cada máquina, en el que un centenar escaso de palabras clave3, formadas casi siempre por la abreviatura de palabras procedentes del lenguaje humano, representan las operaciones necesarias durante la programación de la máquina. Estas palabras clave son muy específicas: a menudo indican una acción, pero también el objeto al que debe aplicarse, e incluso a veces el destino de ese objeto4. Más abstractas que los «ceros», las palabras clave de los ensambladores son, sin embargo, mucho más concretas y específicas que las que se encuentran en los lenguajes de más alto nivel.
El COBOL, como hemos visto, surgido de un gran esfuerzo de «traducción» del funcionamiento de la máquina a un lenguaje comprensible para el ser humano, emplea más de trescientas instrucciones, que en su mayoría son también palabras en inglés, solo que, a diferencia del ensamblador, se presentan siempre completas, sin abreviatura. Es un lenguaje de una gran verbosidad5, lo que le ha valido duras críticas con el tiempo. Edsger Wybe Dijkstra, que recibió en 1972 el premio Turing por su contribución al desarrollo de los lenguajes de programación, era muy crítico con el COBOL, y en ello expresa el sentir de un gran número de programadores. Para Dijkstra: «El uso del COBOL atrofia la mente; su enseñanza debería, por tanto, considerarse un delito6». Dijkstra criticaba abiertamente cualquier intento de acercar la programación de un ordenador al lenguaje natural humano, como atestigua su escrito On the foolishness of “natural language programming”7.
Lenguajes como el C (1973), utilizado para construir el sistema operativo UNIX, buscaron poder emplearse en máquinas diferentes (capacidad que se conoce, para un lenguaje de programación, con el nombre de portabilidad), conservando a la vez un buen control del hardware. Mucho más tarde, a partir de los años noventa, aparecieron lenguajes de una nueva generación, como Python y C++, capaces de describir lógicas orientadas a objetos, lenguajes que se han convertido en los más apreciados por los programadores profesionales y avanzados. Por último, con el reciente advenimiento de la inteligencia artificial, Python se ha convertido en la herramienta preferida por la nueva generación de programadores8.
La programación orientada a objetos acerca el código informático al lenguaje natural en el plano semántico, es decir, en lo que estos lenguajes designan. Dicho de otro modo, con la programación orientada a objetos, el plano simbólico se acerca al de las entidades de lo real, los objetos. Ahora bien, en el plano de la sintaxis, los lenguajes orientados a objetos marcan una distancia respecto del lenguaje natural, debido a la aparición de símbolos de legibilidad reducida, o incluso nula, para los no iniciados.
Para concluir estos párrafos, digamos que han sido necesarios esfuerzos intensos y numerosos para acercar la lógica del funcionamiento del ordenador al lenguaje humano. Este acercamiento permitió cierto grado de democratización del uso de los ordenadores, desde entonces al alcance de los programadores y de los ingenieros9. Ahora bien, estos esfuerzos encontraron rápidamente sus límites, al tiempo que se llevaban a cabo de manera problemática, mediante la puesta en práctica de estrategias susceptibles de una lectura política. Lenguajes de programación más eficaces que sus predecesores «verbosos» —como el COBOL— acabaron viendo la luz con el tiempo: lenguajes situados a una distancia considerable del lenguaje natural humano, y que siguen siendo bastante ilegibles para los no iniciados, e incluso para los expertos en ciertos aspectos. Su eficacia se debe sin duda a que dividen las tareas según una representación simbólica de los objetos, acercándose así, en el plano semántico, a la manera en que el ser humano accede a lo real.
Brian Cantwell Smith nos recuerda que el hecho de ser «digital» (en inglés digitality) no es una propiedad de cosa alguna para un elemento concreto. Véase al respecto Brian Cantwell Smith, The Devil in the Digital Details (edited 2010, v75) [en ligne]. Madrid : Real Academia de Bellas Artes de San Fermando, Calcografía Nacional, 2010. disponible à l'adresse : http://www.ageofsignificance.org/documents/The%20Devil%20in%20the%20Digital%20Details.pdf.↩︎
Ibid.↩︎
Para una arquitectura x86 y de 32 bits. Esta lista de palabras clave alcanza el millar para arquitecturas de 64 bits.↩︎
Por ejemplo, PUSH quiere decir push data onto stack, ADC designa una suma con llevada (como la del sumador completo presentado más arriba), y MOVSB implica move byte from string to string.↩︎
Que emplea más palabras de las necesarias para describir una operación.↩︎
Edsger W. Dijkstra, Selected Writings on Computing: A personal Perspective. New York, NY : Springer, 1982, p. 130.↩︎
Edsger W. Dijkstra, «On the foolishness of «natural language programming» ». dans : BAUER, Friedrich L., BROY, Manfred, DIJKSTRA, E. W., et al. (dir.), Program Construction. vol. 69 [en ligne]. Berlin, Heidelberg : Springer Berlin Heidelberg, 1979, p. 51-53. [consulté le 20 junio 2025].↩︎
El índice TIOBE mide la popularidad de los lenguajes de programación entre los programadores profesionales y avanzados. Véase al respecto https://www.tiobe.com/tiobe-index/, consultado el 20 de junio de 2025.↩︎
Es menos la disponibilidad de lenguajes de programación que la aparición de las interfaces gráficas lo que verdaderamente masificó el uso del ordenador.↩︎
Citar esta páginaCórdoba, Pablo-Martín. «En el interior de la Torre de Babel». En Fábricas de las imágenes digitales a la luz del cine experimental — Resonancias antropológicas y políticas de los algoritmos en el seno de las artes contemporáneas, Tesis doctoral en artes plásticas y fotografía, Université Paris 8 Vincennes-Saint-Denis, Escuela Doctoral EDESTA (n.º 159), unidad de investigación AIAC, 2026. https://www.pablomcordoba.com/es/tesis/en-el-interior-de-la-torre-de-babel/