# Lenguajes de programación

## Qué es un lenguaje de programación

El "cerebro" de un ordenador es la Unidad Central de Procesamiento (CPU). En general una CPU no puede almacenar más que unos pocos números y realizar operaciones matemáticas básicas con ellos. Además esos números se pueden recibir de o enviar a la memoria o a los distintos dispositivos de entrada y salida (teclado, monitor, disco duro, impresora, etc). Para cada una una de estas operaciones (obtener números de un sitio, hacer cálculos con esos valores, enviar el resultado a otro sitio) existe una instrucción diferente y cada CPU tiene su propio juego de instrucciones, más o menos amplio dependiendo de la complejidad de la CPU.

En la memoria del ordenador se puede guardar una secuencia de esas instrucciones, que el ordenador es capaz de seguir desde el principio hasta el final (aunque esas instrucciones no tienen por qué ejecutarse siempre en el mismo orden porque existen instrucciones para saltar de un punto a otro de la secuencia de instrucciones). Esas secuencias se llaman programas ejecutables.

Cualquier función que realice un ordenador, por sofisticada que parezca, en realidad no es más que una larga secuencia de instrucciones elementales. Para los humanos resulta muy complicado escribir directamente los programas ejecutables porque cualquier tarea requiere muchísimos pasos, que el ordenador ejecuta de forma instantánea, pero para que los ordenadores funcionen es necesario disponer de programas ejecutables.

Los lenguajes de programación se han creado para facilitar la elaboración de programas ejecutables. Un lenguaje de programación es un lenguaje artificial diseñado para dictar instrucciones a un ordenador, pero tienen la ventaja de que no es necesario desmenuzar las tareas tanto como lo requiere la CPU si no que permiten definir tareas de forma más abstracta. Por ejemplo, un lenguaje de programación puede tener una instrucción para calcular raíces cuadradas, aunque haya CPUs que no tengan la capacidad de calcular raíces cuadradas.

Existen muchos lenguajes de programación diferentes, pero en general, un programador que quiere conseguir que el ordenador realice determinadas operaciones, tiene que seguir estos pasos:

- El programador escribe una secuencia de instrucciones siguiendo las reglas de un lenguaje de programación. Esa secuencia de instrucciones se guarda en uno o varios archivos de texto. A estos archivos se les llama código fuente del programa.
- Mediante un programa especial (llamado compilador o intérprete) capaz de realizar esa tarea el ordenador convierte los archivos de texto en archivos ejecutables, es decir, traduce la secuencia de instrucciones escritas por el programador en instrucciones. A estos archivos ejecutables se les llama programas ejecutables.
- El programador o cualquier otro usuario le puede pedir al ordenador que ejecute el programa ejecutable.

En el ejemplo citado de las ráices cuadradas, el compilador o intérprete tendría que ser capaz de convertir la instrucción de raíz cuadrada que hubiera escrito el programador en una serie de sumas, restas, multiplicaciones o divisiones que acaben dando el resultado deseado.

En Informática, normalmente se utiliza el término programa para referirse a las dos cosas:

- al fichero de texto escrito por un programador en algún lenguaje de programación
- al fichero ejecutable que ejecuta el ordenador para producir un resultado.

Eso puede causar alguna confusión, pero se espera que el lector/oyente entienda por el contexto de cuál de los dos conceptos se está hablando.

Las ventajas de usar lenguajes de programación son numerosas:

- los lenguajes de programación son infinitamente más comprensibles para los humanos que las secuencias de instrucciones.
- un mismo código fuente se puede acabar ejecutando en ordenadores con diferentes juegos de instrucciones, usando compiladores o intérpretes que sean capaces de realizar la traducción.
- mejorando los compiladores o intérpretes, un mismo código fuente se puede acabar convirtiendo en programas ejecutables más rápidos.

Los ordenadores siguen al pie de la letra las instrucciones de los programas ejecutables. Por tanto, los programas deben tener en cuenta todos los posibles resultados de todas las instrucciones e incluir las instrucciones a seguir en cada caso, de manera que el ordenador no se quede atascado en algún punto del programa. En el ejemplo citado de las raíces cuadradas, el programa tiene que tener en cuenta que no se pueden calcular las raíces cuadradas de números negativos (sin recurrir a los números complejos) y no tiene que pedirle al ordenador que lo haga porque seguramente se producirá un error y el programa se interrumpirá.

Volver al principio de la página

## Tipos de lenguajes de programación

Existen muchísmos lenguajes de programación y formas de clasificarlos, puesto que la historia de la informática es también la historia de los lenguajes de programación.

En los años 50, en los inicios de la informática, los lenguajes empleados eran los lenguajes máquina, que van intímamente asociados a cada CPU, puesto que sus instrucciones son las mismas que las de la CPU. En esos años aparecieron los lenguajes ensamblador, que utilizan palabras para referirse a las instrucciones, aunque siguen asociados a cada CPU.

En los años 60 se desarrollaron la mayoría de tipos de lenguajes que se usan hoy en día:

- Los lenguajes imperativos, en los que el programador escribe paso a paso las tareas a realizar. Entre ellos, están
  - los lenguajes modulares, que permiten definir bloques de instrucciones y reutilizarlos para construir programas más complejos.
  - los lenguajes procedurales, que permiten definir procedimientos (rutinas, subrutinas, funciones, etc) y reutilizarlos.
  - los lenguajes orientados a objetos, en los que no se permite que cualquier porción del programa acceda a cualquier dato, sino que se agrupan en clases todos los procedimientos que se pueden aplicar a un tipo de datos
- Los lenguajes declarativos, en los que el aprogramador no escribe los pasos a realizar, sino los pasos permitidos en cada situación y es el ordenador el que busca la secuencia adecuada. Entre ellos están:
  - los lenguajes funcionales, que utilizan como elemento básico las funciones y la recursividad
  - los lenguajes lógicos, que expresan las relaciones en términos lógicos y utilizan reglas de inferencia lógica para conseguir el resultad

Existen lenguajes puros que siguen a rajatabla los principios de uno de estos tipos, pero la mayoría de lenguajes permiten mezclar tipos de programación diferentes.

No se puede afirmar la superioridad intrínseca de un tipo de lenguaje sobre otro, puesto que existen problemas que se abordan mejor con un tipo de lenguaje que otro.

Por ejemplo, en los años 90 y 00, con el aumento de potencia de los microprocesadores, parecía que los lenguajes imperativos habían ganado la partida. Pero en los últimos años la potencia de las CPU no crece demasiado y en su lugar lo que se multiplica es el número de núcleos en cada CPU y en esa situación en la que lo más importante es poder "paralelizar" los programas (que se puedan ejecutar los programas en varios núcleos a la vez), los lenguajes declarativos llevan ventaja, por lo que está aumentando el interés por esos lenguajes.

Volver al principio de la página

## Lenguajes compilados e interpretados

El programa de ordenador que es capaz de convertir el programa fuente escrito por el programador en el programa ejecutable que ejecuta el ordenador puede realizar esa tarea de dos formas distintas:

- si es un compilador, la tarea de conversión se realiza una sola vez, es decir, el compilador crea un fichero ejecutable, que es independiente del programa fuente. De esta manera, el usuario no necesita el programa fuente, sino únicamente el programa ejecutable.
- si es un intérprete, la tarea de conversión se realiza cada vez que se quiere ejecutar el programa, es decir el intérprete lee una instrucción del programa fuente, la convierte en código ejecutable, la ejecuta y pasa a la siguiente. En este caso, el usuario necesita tener el programa fuente para poder ejecutarlo.

En principio, cualquier lenguaje de programación puede ser compilado o interpretado, aunque por tradición hay lenguajes que suelen utilizar compiladores y otros que suelen utilizar intérpretes.

Se solía decir que para un mismo programa fuente, la compilación produce programas ejecutables más rápidos que los programas interpretados, pero la tendencia es a que esas diferencias se reduzcan.

Mi opinión personal es que las preferencias por compiladores o intérpretes pueden deberse a motivaciones no técnicas. Por ejemplo, el programador de software comercial preferirá el uso de compiladores para poder comercializar el programa ejecutable sin necesidad de hacer público el programa fuente, mientras que el programador de software libre no tiene problemas con los intérpretes.

Volver al principio de la página

Esta obra está bajo una licencia de Creative Commons Reconocimiento-CompartirIgual 3.0 España.