Los Lenguajes de Programación

Los lenguajes tienen por objetivo representar instrucciones de forma clara, concisa y específica, para que pueda ser comprendidos y ejecutado por una máquina.

Las computadoras sólo entienden de 0’s y 1’s. Sería imposible programar de manera eficiente y ágil en el lenguaje de las computadoras, para ello se inventaron los lenguajes de programación, que pueden ser comprendidos por los humanos.

Las instrucciones en estos lenguajes son traducidos al lenguaje máquina de las computadoras por un programa especial, que puede ser un compilador o un intérprete. ¿Qué es esto? Son formas de denominar a las dos diferentes formas de ejecutar un programa

¿Que qué es es ejecutar? Pues bien, un programa, por si solo, es solo un archivo más, pero un archivo especial, que contiene instrucciones para la computadora. A la acción de la computadora de realizar las actividades de estas instrucciones la llamamos ejecución.

Un compilador toma el código fuente de los programas (las instrucciones en el lenguaje de programación en forma de archivos de texto) y produce un archivo binario ejecutable (en lenguaje máquina, ceros y unos), que puede ser ejecutado directamente por la computadora (realizar las funciones que escribimos en el programa). Un intérprete es un programa que lee las instrucciones del código fuente (llamado script, como en “guión”), una por una, y las ejecuta directamente el mismo, es decir, no produce un archivo ejecutable, simplemente va ejecutando instrucción por instrucción.

Por lo tanto, existen lenguajes compilados e interpretados, según sea su manera de funcionar. ¡Un lenguaje es un programa también! Es como aprender otro idioma ¡Esa es la realidad que simulan! Cada lenguaje tiene una manera distinta de establecer estas instrucciones, pero son comunes a todos los lenguajes.

En resumen:

  • Las computadoras sólo entienden de ceros y unos.
  • Los lenguajes son para nosotros, no para ellas.
  • Hay programas especiales que transforman nuestro código en instrucciones para la computadora.
  • Los hay de dos tipos:
    • Compiladores
      • Producen un archivo ejecutable.
    • Intérpretes
      • Ejecutan directamente el código

 

Los Niveles de los Lenguajes de Programación

Como hemos establecido, las computadoras entienden sólo de 0’s y 1’s. A esto le llamamos un bit.

Al conjunto de 8 bits, le llamamos un byte. Estas son unidades de memoria, como cuando dices “¿De cuantos gigas es tu USB?”, son GigaBytes, es decir, miles de millones de bytes: 1 Gigabyte = 1 000 Megabytes = 1 000 000 Kilobytes = 1 000 000 000 Bytes.

Un byte puede almacenar por ejemplo, una letra, como la “A”. También sabemos que hay memoria RAM y memoria ROM. Pues bien, todo este rollo es para decirte que un programa en general lo que hace es mover memoria. Recordemos el principio de datos y de aplicaciones, las aplicaciones manipulan datos y los datos son manipulados por las aplicaciones.

Al día de hoy existen lenguajes realmente bellos, como Scala, Python o C#, en los que es un placer programar. Pero esto no siempre fue así. Como dije, un programa en esencia mueve memoria, pues bien, la primera implementación o nivel de un lenguaje es el lenguaje máquina, 0’s y 1’s.

Acordamos de que prácticamente es imposible que le hablemos “directamente” a la computadora, necesitamos un compilador o intérprete. Pues bien, la siguiente aproximación es el lenguaje ensamblador.

Este es un ejemplo de código ensamblador, tomado de la Wikipedia:

MOV AX, @data          ; carga en AX la dirección del segmento de datos
MOV DS, AX             ; mueve la dirección al registro de segmento por medio de AX

; ----------------------------------------------
; Imprime un string en pantalla
; ----------------------------------------------
MOV DX, offset Cadena1 ; mueve a DX la dirección del string a imprimir
MOV AH, 9 ; AH = código para indicar al MS DOS que imprima en la pantalla, 
INT 21h; llamada al MS DOS para ejecutar la función (en este caso especificada en AH)

; ---------------------------------------------
; Finaliza el programa
; ----------------------------------------------
INT 20h                ; llamada al MS DOS para finalizar el programa

En este lenguaje se programa para los procesadores, aquí ya es posible para el humano escribir programas, pero aun así es muy complejo.

Lo llamamos entonces de Nivel Bajo, donde el suelo es el lenguaje máquina y el cielo es nuestro lenguaje humano.

Como es aún muy difícil para un humano programar en ensamblador (o por lo menos toma mucho tiempo y las aplicaciones se quieren crear con menos esfuerzo) se crearon los lenguajes que utilizan los compiladores – que se crean en ensamblador – para traducir a lenguaje máquina, como C. En este lenguaje se programan los sistema operativos, por ejemplo (y muchas cosas más, desde calculadoras hasta juegos, claro está).

El lenguaje C es un ejemplo de lenguaje de Nivel Intermedio, pues puede ser utilizado para programar desde kernels hasta programas de oficina.

Este es un ejemplo de programa en C:
[c]
int power(); /* Podria haberse omitido (*) */

power()
int a, b;
{
int n;
for (n = 1; b > 0; –b)
n *= a;
return n;
}
[/c]

Pero aún se necesita de cierto esfuerzo considerable para programar aplicaciones estrictamente funcionales en C (las que usa uno en la vida diaria, como suite de oficina y cosas por el estilo)  y se quieren aún más rápidas y mantenibles (que cualquier otro programador las pueda modificar después de hechas), por lo que  se crearon lenguajes de Alto Nivel, como C++, capaces de implementar paradigmas de programación como Orientación a Objetos (un poco más adelante lo veremos).  El siguiente es un ejemplo:

#include 
#include 
using namespace std;

class person
{
public:
   string name;
   int age;
};

int main()
{
 person a, b;
 a.name = "Calvin";
 b.name = "Hobbes";
 a.age = 30;
 b.age = 20;
 cout << a.name << ": " << a.age << endl;
 cout << b.name << ": " << b.age << endl;
 return 0;
}

C++ es como su nombre lo indica, un C mejorado, es un lenguaje que facilita mucho las cosas, en comparación con C, claro está.

Pues llegamos al nivel alto, ¿Que fué lo ocurrió después? Después el problema fue la arquitectura, las plataformas, (Windows, Linux, Mac). Estas "marcas" utilizan diferentes sistemas operativos, diferentes configuraciones (acomodo de componentes, etc).

Por lo tanto, si queremos que un programa funcione tanto en Linux como en Windows como en Mac, tenemos que hacer tres programas diferentes. Debido a esto, se crearon las Máquinas Virtuales, como Java Virtual Machine.

En estas máquinas virtuales, se desarrolla una sola vez para todas las plataformas, es decir, un solo programa, para la máquina virtual, no para el sistema operativo, no para Window, ni para Linux, se programa utilizando el lenguaje, marco de trabajo (framework) y componentes de Java Virtual Machine.

Luego, se instala la JVM en cada equipo que se quiera que funcione el programa y podemos utilizar el mismo programa.

Es decir que una Máquina Virtual simula un sistema operativo para que la aplicación corra. Tal como en el ejemplo de la aplicación web, que era el explorador el que se comunicaba con el sistema operativo y no la aplicación, aquí es la máquina virtual la que se comunica con el sistema operativo y no la aplicación, esta se comunica con la máquina virtual. Es un intermediario.

Son los desarrolladores de la Java Virtual Machine los que se encargan de hacer un programa por plataforma, no el desarrollador de las aplicaciones.

¿Interesante verdad? ¿Que fue lo que siguió? Los Frameworks - marcos de trabajo -. Son colecciones de librerías que ayudan en el desarrollo de programas.

Una librería es un programa también, pero en vez de ser diseñado para correr (ejecutarse) esta diseñado para ser usado por otros programas.

Por ejemplo, podemos crear un programa para buscar archivos. Si lo hacemos una librería, muchos otros programas podrán utilizarla y realizar las mismas funciones, sin tener que programar la parte de buscar archivos. Genial! ¿No?

Pues bien, un framework es un montón de librerías, que resuelven un montón de problemas para que el programador se enfoque en funcionalidades específicas.

Java tiene su framework, así como el .Net framework, que es a su vez una máquina virtual, similar a Java (es que a Microsoft le dieron celos, pero esa es otra historia).

niveles-lenguajes-programacion
niveles-lenguajes-programacion

 

En Resumen

Como podemos ver, cada vez se crea una capa sobre otra, un programa que abstrae, emula o modela a otra para asemejarse más y más a la forma en que los humanos nos comunicamos, conforme a los principios básicos de la programación y acortar la brecha de comunicación entre humanos y máquinas, haciendo cada vez más sencilla la labor del programador en la codificación y permitiendo enfocarse más en lo realmente importante: La resolución del problema.

 

Related Posts

Lo que Tienes que Saber Antes de Aprender a Programar

¿Quieres aprender a programar desde cero? Lo primero que tienes que saber son fundamentos, y no solo de programación, sino de informática, adquirir una base sólida es fundamental para saber que es lo que estas haciendo y como hacerlo eficientemente. Te garantizo que invertir tiempo en comprender arquitectura de computadoras te facilitará toda tu carrera. […]

Read More

Los Tres Principales Sistemas Operativos: Cultura General

Necesitaremos conocimiento de sistemas operativos si vamos a ser programadores, pero no te preocupes, no vamos a comenzar programando kernels, vamos a repasar las plataformas más populares, por cultura general y por que necesitamos conocer en que vamos a programar, por supuesto. En computadoras de escritorio, hay tres grandes sistemas operativos: Microsoft Windows, Apple OS […]

Read More

Leave a Reply

Your email address will not be published. Required fields are marked *