Dando órdenes a las máquinas

Los móviles, tabletas, portátiles y ordenadores o computadores personales que usamos en nuestro día a día, en esta publicación nos referiremos a ellas como máquinas, no dejan de ser un conjunto de circuitos integrados en chips conectados entre sí, que nos permiten hacer una gran variedad de cosas en nuestras actividades cotidianas. En el ámbito laboral y escolar son un instrumento de trabajo y en el personal son un instrumento de relación, desarrollo personal y de entretenimiento. Sin duda alguna estas máquinas o dispositivos informáticos son hoy día unas herramientas fundamentales en nuestra vida diaria. 

La generalidad de uso de los dispositivos informáticos o máquinas, necesario por otra parte si se considera la diversidad de problemas o áreas en los cuales son aplicables, implica un trabajo adicional cuando se quiere que resuelvan problemas particulares. Este trabajo consiste en decirle a la máquina o dispositivo qué es lo que debe hacer. Nos tenemos que comunicar con ellas, para ordenarle que es lo que deben hacer. 

Al acto de convertir la funcionalidad que posee una aplicación en instrucciones u órdenes para la máquina se le denomina programar. Por medio de la programación ordenamos a la máquina cómo se debe de comportar. Y al conjunto de instrucciones y órdenes que contienen la funcionalidad deseada para la aplicación que se está desarrollando se le denomina programa. Cada aplicación que ejecutamos en nuestra máquina es un programa con instrucciones que debe ejecutar. Instrucciones que serán ejecutadas de manera secuencial, con cambios en el flujo de ejecución causados por las propias instrucciones o por eventos que se produzcan de manera externa.

Pero no olvidemos que una máquina está formada por un conjunto de chips, circuitos y componentes electrónicos, la pregunta que nos podemos hacer en este punto es ¿cómo podemos comunicarnos o dar instrucciones a ese conjunto de elementos electrónicos que conforman la máquina?

Estos circuitos trabajan con dos niveles de tensión, por lo que se dicen que son digitales, simbolizándose dichos niveles, por abstracción, con los números 0 y 1. De este modo, las acciones que pueden realizar un dispositivo informático consistirán en un conjunto de cadenas de 0 y 1. Un programa consistirá por tanto en un conjunto de instrucciones formadas por cadenas de 0 y 1. A ese sistema de códigos directamente interpretable por la máquina se le denomina lenguaje máquina

Cada máquina tiene su propio lenguaje máquina con el que se puede programar, que es específico para la estructura interna de la máquina. Es decir, una máquina solo puede reconocer estas instrucciones o códigos de operaciones programada para él. Aunque todos los lenguajes máquina dispondrán de un conjunto de instrucciones similares (operaciones simples, operaciones aritméticas, decisiones lógicas y operaciones de entrada/salida). Por tanto, una máquina solo podrá reconocer estas instrucciones o códigos de operaciones programada para ella.

Los programas en lenguaje máquina se ejecutan muy eficientemente, ya que el programador los redacta específicamente para los circuitos que los han de interpretar y ejecutar, y es directamente interpretable por el procesador central, no requiere de transformaciones previas para ser ejecutado. Sin embargo, la programación en lenguaje máquina es un trabajo difícil y engorroso para el hombre, necesitando éste conocer la arquitectura física de la máquina con cierto detalle. La programación en lenguaje máquina, en palabras de John Backus, era un arte oscuro, una materia arcana, solo al alcance de unos pocos que comenzaron a considerarse como miembros de una clase sacerdotal guardiana de ciertas habilidades y misterios demasiado complejos para los mortales normales, que se oponían a ningún cambio revolucionario que pudiese hacer la programación tan simple que cualquiera pudiera realizarla.

Los lenguajes de programación de alto nivel pretenden democratizar la tarea de programar los ordenadores

No obstante, el objetivo era ese: “democratizar la tarea de programar los ordenadores”, reducir el periodo de formación de los programadores y hacer esta tarea más fácil, alejándola para ello de la máquina y acercándola al hombre, permitiendo que no fuera necesario conocer la arquitectura para poder elaborar los programas. El primer avance que se hace en esta dirección es por medio del uso de una notación simbólica o mnemónica, para representar cada instrucción o código de operación de la máquina. Estas claves mnemotécnicas eran más fáciles de recordar que los códigos numéricos, pero por el contrario requerían que, una vez establecida la secuencia de instrucciones en mnemónico que solucionaban el problema, fueran traducidos a lenguaje máquina. A este lenguaje se le denominó lenguaje ensamblador

Al existir una correspondencia estrecha, generalmente uno a uno, entre las claves del lenguaje ensamblador y los códigos de las operaciones de las máquinas, la programación continúa estando próxima a la máquina y sigue siendo un proceso minucioso y complicado. En este contexto, se hace necesaria la creación de un lenguaje lo más cercano posible al hombre que permita expresar las distintas acciones que se pretendía que la máquina realizara, son los lenguajes de alto nivel.

La creación y desarrollo de un lenguaje de alto nivel implica definir: (1) su vocabulario o léxico, es decir el conjunto de palabras del lenguaje junto con sus categorías; (2) su estructura o sintaxis, es decir las reglas que establecen cómo construir frases válidas del lenguaje usando los elementos del vocabulario; y (3) su significado o semántica, es decir determinar el significado o interpretación de cada una de las construcciones y frases del lenguaje. 

En la creación y desarrollo de estos lenguajes juega un papel fundamental la Lingüística, la Teoría de los Lenguajes y las Gramáticas, y más concretamente las investigaciones del lingüista norteamericano Noam Chomsky, y su Teoría de las Gramáticas Transformacionalesque es la piedra angular de la lingüística matemática. Sus estudios sobre las gramáticas, su tipología y su utilidad para generar todas las oraciones de un lenguaje proporcionaron una herramienta esencial para el estudio y la formalización de los lenguajes de programación de alto nivel y lo que es más importante hacia la sistematización y estructuración del proceso de transformación de los programas escritos en lenguaje de alto nivel, interpretable por los humanos, al lenguaje máquina que es el que puede ejecutar la máquina. Este proceso de transformación se puede realizar por medio de un compilador o mediante un intérprete, pero esto es otro tema… 

Así que podemos concluir que los miles de lenguajes de programación de alto nivel que existen en la actualidad, que permiten programar las aplicaciones que usas en tu móvil, tablet y portátil u ordenador personal, así como los compiladores e intérpretes asociados que permiten que puedan ejecutarse en esos dispositivos tienen, entre otras, su base y fundamento en los conocimientos de la Teoría de Lenguajes y las Gramáticas. 

Infografía realizada para el proyecto Ciencias + Letras=CLAP (Ciencias y lingüística: Aplicaciones prácticas) FCT-20-15816, financiado por el Ministerio de Ciencia e Innovación en la Convocatoria de Ayudas para el Fomento de la Cultura Científica, Tecnología y de la Innovación

En los estudios del Grado de Ingeniería Informática aprenderás a solucionar problemas, usando un pensamiento computacional, programando soluciones en lenguajes de alto nivel que luego serán traducidas a lenguaje máquina para que sean ejecutadas por las máquinas, empleando la tecnología disponible para ello en todo el proceso. En la asignatura de Procesadores de Lenguajes conocerás qué hay tras el diseño de un lenguaje de alto nivel y qué ocurre cuando lo compilas o interpretas pero también aprenderás a diseñar lenguajes específicos de un dominio y a construir sus procesadores asociados orientados a la solución de problemas.