revista de cultura científica FACULTAD DE CIENCIAS, UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Busca ampliar la cultura científica de la población, difundir información y hacer de la ciencia
un instrumento para el análisis de la realidad, con diversos puntos de vista desde la ciencia.
palabrejas de computación  
 
  menu2
PDF
            R011B02
 
Lenguajes,
Idiomas, Dialectos
¿Cuál habla tu máquina?
Elisa Viso G.
   
   
     
                     
Estamos llegando ya a una época en la que es fácil
imaginarse que cada familia tenga una computadora en su casa, de la misma manera que hoy en día tiene una televisión. Todos estamos conscientes de lo “poderosas” que son estas maquinitas y de que pueden hacer muchas cosas para ahorrarnos trabajo. El problema radica, como con los animales domésticos, en cómo “enseñamos” a nuestra maquinita a comportarse y obedecernos. Para ello debemos establecer un canal de comunicación. Así que lo primero es definir qué es lo que la maquinita sí entiende y qué no.   

Cuando utilizamos alguno de los términos arriba mencionados estamos hablando fundamentalmente de “comunicación”, generalmente entre individuos de grupos humanos. Lo que habría que determinar es cuál de ellos se aplica mejor a la comunicación que se desea tener con una computadora o bien si, dependiendo de la situación, se aplica alguno de ellos en particular.   

El diccionario define los tres términos anteriores de la siguiente manera:

Dialecto: Variante regional de un idioma.  

Idioma: Lengua de un país o región. Modo particular de hablar de un grupo de personas.    

Lenguaje: Conjunto de sonidos articulados con que el hombre manifiesta lo que siente o piensa. Manera de expresarse. Conjunto de señales que dan a entender una cosa.    

Un idioma es, tradicionalmente, un medio de comunicación tanto verbal como escrito, con reglas respecto a la construcción de los elementos de ese idioma (las frases u oraciones) La forma fundamental de expresión de un idioma es verbal, hablado, y es ahí donde están sus orígenes. Dado que la forma fundamental de comunicarse con una computadora no es verbal (al menos todavía), en general la gente que trabaja con computadoras no utiliza el término “idioma” cuando se refiere a la forma de comunicarte con ellas.    

Cuando hablamos de un dialecto tenemos como muy importante el aspecto verbal del mismo. No es común que los dialectos tengan manifestaciones escritas extensas, que es la forma más común de comunicarte con una computadora.      

El término “lenguaje” parece ser el más apropiado para describir la comunicación que podemos tener con una computadora. Los lenguajes son formas de comunicación y el término se usa muy frecuentemente para describir formas de comunicación que no son forzosamente verbales: se habla del lenguaje corporal, el lenguaje de los sordomudos a través de señas, el lenguaje del amor, el lenguaje de las flores, etc. Dado que la comunicación con una computadora no es verbal, podemos decir que nos comunicamos con ella utilizando un “lenguaje” particular (aunque algunos de esos lenguajes, por lo limitado de su vocabulario y la pérdida de su significado fuera de su contexto local, más bien puedan ser catalogados como dialectos, extendiendo el término dialecto a manifestaciones no verbales).    

Si deseamos entender qué queremos decir con un “lenguaje” para comunicarnos con la computadora, primero debemos definir qué queremos decir con “comunicación”. En realidad, más que comunicarnos con la computadora, lo que deseamos es que haga una o más tareas para nosotros y nos haga saber el resultado de las mismas. En pocas palabras, queremos que nos “obedezca” cuando le pedimos que haga algo. Por ello los componentes de un lenguaje para comunicación con una computadora, en lugar de recibir el nombre de “frases” u “oraciones”, reciben el nombre de “instrucciones”: instrucciones a ser seguidas.

La computadora, al igual que los seres humanos y los animales, vienen con un vocabulario “mínimo” con cierto significado primitivo. Por ejemplo, en los seres vivos la capacidad de llorar, gemir, reír, los gestos de placer, están presentes prácticamente desde él nacimiento. La computadora viene también con un vocabulario limitado muy primitivo que es capaz de realizar y entender. Ese vocabulario consiste de instrucciones que vienen alambradas y que toda computadora es capaz de hacer: comparar cantidades, sumar números, copiar un número de un lugar a otro dentro de la computadora, etc. Cada una de estas instrucciones, además de indicar el tipo de acción (suma, copia, compara…) debe indicar también “con qué”: los operandos de la instrucción u operación. A este vocabulario primitivo es a lo que se le llama “lenguaje de máquina” y si bien es, en efecto, muy limitado, en base a él se puede construir cualquier tipo de tarea que la máquina sea capaz de realizar. Es más, si una tarea no se puede expresar en términos de estas operaciones elementales, entonces la computadora no puede realizarla.    

Como el lenguaje de máquina de cada computadora depende de cómo esté alambrada y construida, el lenguaje de máquina cambia de computadora a computadora dependiendo de cuál sea su estructura y construcción.      

Además de su lenguaje de máquina, la computadora cuenta con un conjunto (que cada vez se construye más grande) de “cajitas” o “celdas” en las cuales colocar información para usarla como operandos de sus operaciones e instrucciones. A catas celdas se les llama “palabras de memoria” (porqué le sirven para recordar información) y pueden ser de distintos tamaños. El tamaño de las palabras generalmente se da en bytes. Las microcomputadoras empezaron teniendo palabras de un byte mientras que las computadoras grandes tenían entre cuatro y ocho bytes. Al igual que con un closet, mientras más espacio hay y más grandes son los cajones, podemos guardar en él objetos más grandes (que en el caso de la información esto querría decir con más cantidad de información).  

 
Las computadoras han posibilitado una mayor rapidez en los procesos aritméticos eliminando casi por completo los márgenes de error.

Un nivel de comunicación con la computadora sería, entonces, el de darle una lista de operaciones elementales para que las realice una a una. Como a un bebé, le colocamos todo lo que necesita (en términos de información como números representados por bits prendidos o apagados) en posiciones definidas de memoria. Estas posiciones están “acomodadas” una después de la otra, numeradas y cada una de ellas es capaz de contener a un objeto de información (al número que le corresponde a cada palabra o celda en ese “acomodo” se le conoce como la “dirección” de la palabra). En la lista de operaciones o instrucciones le indicamos la dirección de sus operandos y la dirección donde queremos que nos deje el resultado de la operación. Si esta lista está bien hecha, al final vamos a tener un “resultado” colocado donde lo pedimos.   

 
El lenguaje de los niños.

Cuando elaboramos una lista de operaciones que queremos realice la computadora, decimos que estamos “programando” a la computadora, pues sabemos de antemano cuáles son las operaciones que la computadora va a realizar y en qué orden. En el caso que acabamos de describir decimos que estamos programando en lenguaje de máquina, o bien en una variante muy cercana que se llama “lenguaje de ensamblador”.     

El lenguaje de ensamblador es el primer paso en la sofisticación de la comunicación con la computadora. Dado que el lenguaje primitivo de la máquina son patrones de bits prendidos y apagados (ceros y unos, binario), programar en este tipo de lenguaje requiere del programador un conocimiento profundo de la computadora particular. Si a pesar de eso comete una pequeña equivocación al hacer el programa (un cero en lugar de un uno) cambia el significado de lo que se quiere que la computadora haga. Es deseable que el programa se realice utilizando un vocabulario que permita detectar más fácilmente errores. Se ideó un sistema realmente sencillo. Se define un vocabulario donde para cada operación que es capaz de realizar la computadora se le pone un “nombre” en un “lenguaje” más accesible en el sentido que acabamos de mencionar. Por ejemplo, si el patrón “00011101” significa en lenguaje de máquina que la acción a realizar es una suma, se le permite al programador escribir “SUM”. De uña forma similar se “codifican” todas y cada una de las operaciones con que cuenta la computadora y se obtiene con ello un nuevo lenguaje.    

Con este nuevo lenguaje el programador hace su progresos (su lista de instrucciones) y alguien debe traducir esa lista a una lista equivalente pero en binario. Como esta traducción es automática (a cada término le corresponde uno y sólo un patrón de bits y a cada patrón de bits le corresponde a lo más una operación) se puede construir también un programa que haga esa traducción. A este tipo de lenguajes y programas que traducen una instrucción es “nemónica” (que ayuda a recordar) por una instrucción en lenguaje de máquina, se le conoce como “ensamblador”. A pesar de que, en efecto, es más fácil programar en ensamblador que en lenguaje de máquina, el programador debe conocer profundamente la máquina con la que está tratando.   

El siguiente nivel de comunicación, conforme las computadoras fueron “creciendo” (siendo más accesibles) es el de poder hablarle en términos más relacionados con el problema particular que queremos resolver y no con lo que es la constitución primitiva de la computadora. Además, el hacer programas que no puedan ser ejecutados más que por un solo tipo de máquina, resulta muy frustrante. Por lo tanto, buscamos:  

— Un mejor nivel de comunicación.
— La posibilidad de comunicarnos de la misma manera con más de una máquina.    

Entonces empiezan a diseñarse nuevos lenguajes que ya no forzosamente son una traducción directa del lenguaje de máquina de una computadora particular, sino que más bien tienden a tratar de expresar problemas. Por supuesto que estos lenguajes tienen que ser limitados en el sentido de que los programas escritos en ellas deben poderse traducir automáticamente a algún lenguaje de máquina. Surgen lenguajes como FORTRAN, COBOL, LISP, Pascal, Snobol, Ada, ProLog, etc. Todos ellos son definidos de tal manera que están orientados a expresar problemas y pueden ser traducidos automáticamente, con mayar o menor cantidad de trabajo, a lenguaje de máquina. Los traductores de estos lenguajes son, a su vez, programas que están escritos en determinado lenguaje que, en algún momento, se tradujo a un programa en lenguaje de máquina (si no, no lo puede ejecutar la máquina).      

A los lenguajes que están más apegados al lenguaje de máquina, como los ensambladores, se les conoce como lenguajes de “bajo nivel” pues tienen un bajo nivel en cuanto a la cantidad de información que conlleva cada una de sus instrucciones. Los lenguajes orientados a expresar problemas se conocen bajo el término de “lenguajes de alto nivel”, pues cada enunciado (o instrucción) de un lenguaje de éstos se traduce a muchas instrucciones en lenguaje de máquina, conllevan un alto nivel de cantidad de información.

 
El lenguaje de las flores.

 

El primer nivel de comunicación que requerimos tener con una computadora es la comunicación con su sistema operativo. También para ello se diseñan lenguajes más o menos adecuados que permiten transmitirle a la máquina lo que queremos que haga. Algunos de estos lenguajes son de nivel de ensamblador (como el Jab Control Language de las computadoras IBM 360) y otras son de alto nivel (como el Work Flow Language de Bourroughs). En las microcomputadoras existen varios lenguajes de este tipo, como MSDOS, CP/M, etc.   

Para ejecutar un programa escrito en un lenguaje en particular, a la computadora le es posible proceder de dos maneras distintas: puede, primero, traducir todo el programa a lenguaje de máquina, colocar el programa en lenguaje de máquina en la computadora y proceder a ejecutarlo. A esta modalidad se le conoce como de “Compilador”, al programa escrito en lenguaje de alto nivel se le conoce como programa fuente y al programa escrito en lenguaje de máquina como programa objeto: (Fig. 1).    

Hoy en día las computadoras producen su versión objeto en la memoria de la computadora y ahí mismo ejecutan, sin que haya para ello participación humana en los pasos intermedios, aunque en ocasiones para ahorrar tiempo posteriormente, copian el programa objeto a un diskette o cinta, de tal manera que en el futuro se pueda, directamente, ejecutar el programa sin necesidad de volver a traducirlo.    

La otra modalidad de funcionar con las traducciones es la que observamos en la mayoría de los lenguajes para sistema operativo y en algunos lenguajes como LISP y BASIC; el traductor toma una instrucción del programa fuente, la traduce y la ejecuta. Decimos entonces que tenemos la modalidad de “intérprete”. En estos casos nunca se produce la versión equivalente en lenguaje de máquina, sino que sólo se va produciendo la traducción de lo que se va necesitando. La ejecución de programas en lenguajes que trabajan como intérpretes es, en general, muy lenta, pues antes de ejecutar debe traducir cada una de las operaciones. En estas casos no existe versión objeto del programa, por lo que cada vez que se desee ejecutar, se deberá someter la versión fuente al traductor para que realice su ciclo traducción-ejecución.      

En toda la exposición respecto a lenguajes de alto nivel hemos asumido que los programas escritos en este tipo de lenguajes expresan en forma razonablemente clara el objetivo del programa: que el lenguaje permite programar “cómodamente”. Otro aspecto importante en los lenguajes de alto nivel ha sido su portabilidad: el mismo programa puede correr en máquinas distintas si es que se tiene el traductor en esa máquina. Por último, el poder hacer programas en el lenguaje dado ha estado presente a lo largo de toda la discusión. Si un “lenguaje” de programación no cumple, al menos, con estás tres características, tal vez lo que tenemos no es un lenguaje.     

Pudiera ser que estamos trabajando con un “paquete” cuya característica fundamental es que el tipo de operaciones que puede realizar es limitada y que los datos que nosotros tecleamos para que el paquete se ejecute no tienen sentido fuera del paquete. Tal es el caso, por ejemplo, de las hojas electrónicas y de algunos programas para graficación, en la medida que lo que hacemos es darle datos de una cierta forma para que los procese. Los paquetes son programas escritos con un propósito particular.    

Otros lenguajes son en su forma, poco claros y producen, en general, pocas instrucciones de máquina por cada instrucción de alto nivel. Yo llamaría a estas formas de comunicación “dialectos” y no lenguajes, pero ésta no es terminología en los medios de computadoras.

 
Los microcircuitos, esas piezas diminutas que permiten construir los “cerebros” electrónicos más sofisticados.
  articulos  

_____________________________________________________________

     
Elisa Viso G.
Facultad de Ciencias,
Universidad Nacional Autónoma de México.
     

_____________________________________________________________

     
como citar este artículo
     

 

 

de venta en copy
Número 136
número más reciente
 
136I

   
eventos Feriamineriaweb
  Presentación del número
doble 131-132 en la FIL
Minería

 


novedades2 LogoPlazaPrometeo
Ya puedes comprar los 
ejemplares más
recientes con tarjeta
en la Tienda en línea.
   

  Protada Antologia3
 
Está aquí: Inicio revistas revista ciencias 11 Lenguajes, Idiomas, Dialectos… ¿Cuál habla tu máquina?
Universidad Nacional Autónoma de México
Facultad de Ciencias
Departamento de Física, cubículos 320 y 321.
Ciudad Universitaria. México, D.F., C.P. 04510.
Télefono y Fax: +52 (01 55) 56 22 4935, 56 22 5316


Trabajo realizado con el apoyo de:
Programa UNAM-DGAPA-PAPIME número PE103509 y
UNAM-DGAPA-PAPIME número PE106212
 ISSN:0187-6376

Indice-RM

Responsable del sitio
Laura González Guerrero
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
 

Asesor técnico:
e-marketingservices.com
facebooktwitteryoutube

cclCreative Commons License
This work is licensed under a Creative Commons
Attribution-Noncommercial-Share Alike 3.0 United States License