En computación se suele hablar de niveles y generaciones de los lenguajes de programación. Respecto al nivel, se clasifican en lenguajes de bajo y alto nivel. Los lenguajes de bajo nivel, son aquellos que se asemejan al lenguaje empleado por la computadora, mientras que los lenguajes de alto nivel, son aquellos que se asemejan al lenguaje humano.
external image T13Dib01.gif
Niveles de los lenguajes de programación

Los lenguajes de alto nivel son resultado de una evolución, desde los lenguajes de bajo nivel. La computadora sólo es capaz de comprender su lenguaje máquina. Pero para las personas no es fácil entender y manejar este código máquina de combinaciones binarias. Las investigaciones dieron un primer paso que llevó a la evolución desde las hileras de números binarios del código máquina, a un lenguaje ensamblador, que las representaba como una serie de comandos más entendibles. Los lenguajes de nivel superior están orientados más hacia lo que se quiere realizar, que en la manera como se ejecutarán los comandos.
Niveles de los lenguajes de programación:
1.- Lenguajes de bajo nivel:
A nivel de circuitos, los microprocesadores sólo son capaces de procesar señales electrónicas binarias. Estas instrucciones binarias que se envían al microprocesador, se componen de series de unos y ceros, espaciadas en el tiempo de una forma determinada. Esta secuencia de señales se denomina código máquina. El código representa normalmente datos y números, así como instrucciones para manipularlos. Para hacer más fácil el manejo del código máquina, se dio a cada instrucción un mnemónico, como por ejemplo STORE (Almacenar), ADD (Adicionar) o JUMP (Saltar). Tal abstracción da como resultado el ensamblador, que es un lenguaje de muy bajo nivel basado en mnemónicos y que es específico para cada microprocesador.

De esta forma, son llamados lenguajes de bajo nivel, a aquellos constituidos por instrucciones en lenguaje máquina o próximos a él. Tales lenguajes permiten crear programas muy rápidos y eficientes, pero en contrapartida, estos lenguajes suelen ser difíciles de aprender, programar y depurar. Un hecho importante es, que los programas escritos en un bajo nivel, son prácticamente específicos para cada procesador, lo que implica, que si se quiere ejecutar el programa en otra máquina de arquitectura diferente, es necesario volver a escribir el programa desde el principio.

2.- Lenguajes de alto nivel:
Al pensar en una computadora, normalmente se concibe como una máquina que realiza tareas de procesamiento de texto y cálculos. Esta es una percepción bastante sintética y esquemática de entender la computadora. Existe un alto nivel de abstracción entre lo que se pide a la computadora y lo que realmente comprende. De un modo paralelo se presenta una relación compleja entre los lenguajes de alto nivel y el código máquina. Un programa escrito en un lenguaje de alto nivel, debe ser compilado o interpretado para traducir su código, en otro de bajo nivel (lenguaje máquina). Como ejemplo de lenguajes de alto nivel se tienen Pascal, BASIC, FORTRAN, COBOL, Java, C y C++.

En los lenguajes de alto nivel las instrucciones son independientes de la máquina, son más fáciles de aprender porque están formados por elementos de lenguajes naturales (del inglés). En BASIC, comandos como "IF CONTADOR = 10 THEN STOP" son usados para ordenar a la computadora, que pare si CONTADOR es igual a 10. Pero aunque las computadoras parecieran comprender el lenguaje natural, lo hacen de una manera bastante rígida y sistemática, lo cual podría parecer un poco frustrante e inspira la búsqueda de lenguajes más cercanos aún al natural.

Compiladores e Intérpretes:
Se ha señalado que la computadora sólo puede ejecutar instrucciones en código de máquina, por lo cual, todos los programas escritos en cualquiera de los lenguajes de programación deben ser convertidos o traducidos. Este proceso es llevado a cabo por unos programas especiales, los “compiladores” y los “interpretes”. Para darse una idea de cómo funcionan, es útil comparar su actuación con la de un profesional humano encargado de traducir. Un compilador equivale a que el traductor humano, partiendo de un texto, prepare otro texto nuevo e independiente, traducido a la otra lengua. En contraste, un intérprete equivale a que tal profesional traduzca de forma hablada, cada grupo de palabras o instrucción, a medida que la oye, sin dejarlas por escrito.
La traducción del código fuente, escrito en lenguaje ensamblador, a código máquina (o código objeto), no representa un proceso complicado y se lleva a cabo mediante un compilador. De manera similar, la traducción de código fuente de lenguajes de alto nivel puede ser realizada por un compilador, o también mediante un intérprete. Con base en el código fuente suministrado, el compilador crea una lista de instrucciones de código máquina:


external image T13Dib02.gif
Proceso de compilación

El código objeto. Este código objeto obtenido, es un programa rápido y ya listo para funcionar, pero está expuesto a poseer errores que pueden provocar fallas en la computadora. En el proceso de compilación pueden resultar varios archivos de código objeto, los cuales deben enlazarse para obtener un archivo ejecutable. Esto se logra mediante un programa llamado enlazador.
Por otra parte, los intérpretes recorren línea a línea el código fuente en el momento de su ejecución. Esto los hace más lentos, debido a la necesidad de traducir el programa mientras se ejecuta, pero a cambio, son más flexibles como entornos de programación y depuración. Es natural que los lenguajes de programación utilicen sólo uno de estos métodos para producir el código fuente, sin embargo muchos también disponen de versiones interpretadas y compiladas. En cuanto a las generaciones de lenguaje, se tienen cinco diferentes, considerando que cada generación sucesiva se establece con lenguajes más poderosos y fáciles de usar que los de la generación precedente. Los lenguajes calificados como de alto nivel, comienzan a partir de la tercera generación.