viernes, 16 de febrero de 2018

LAS IDEAS QUE MUEVEN EL MUNDO DE LA PROGRAMACIÓN

Cuando nos ponemos a pensar cuál es la fuerza que mueve el mundo, es fácil llegar a la conclusión de que las ideas tienen mucha culpa de lo que ocurre. Ideas de supremacía, intelectualidad, igualdad, riqueza, belleza y muchas más han supuesto la aparición de guerras, pasiones e historias de todo tipo que han conmocionado al ser humano.

El mundo de la programación no es ajeno a este fenómeno y las ideas principales que lo han movido han conducido nuestra tecnología al estado actual. Desde el primer momento la programación de ordenadores estuvo dirigida a que la máquina ejecutase instrucciones según un algoritmo previamente diseñado para solucionar el problema. Es lo que se conoce como paradigma imperativo. Es el más utilizado y el más antiguo. Un buen ejemplo de esta práctica es el código máquina, un lenguaje de bajo nivel, cercano al microprocesador, donde el programa es un conjunto de instrucciones básicas del circuito electrónico que se ejecutan en un orden preestablecido.

En este tiempo, los programas se ejecutaban mayoritariamente mediante un intérprete, es decir, instrucción a instrucción el código fuente del programa se traducía al código máquina que los microprocesadores entendían.

File:Programming paradigms.svg

Con los primeros lenguajes de alto nivel en los años 60, empezaron a aparecer ciertos problemas en la secuencia de programación, es decir, el orden de ejecución se hizo muy complejo, principalmente por saltos inciertos en el orden de ejecución. Esto, unido a la mayor complejidad de los programas, hizo que los desarrolladores empezasen a pensar en "ordenar el patio". Y de repente, surgió un lenguaje llamado Algol, con estructuras de programación basadas en subrutinas y orden preciso de ejecución. Esto facilitó las tareas de revisión de código ("debugging" o depuración), así como la reutilización de partes fundamentales del mismo. Había nacido la programación estructurada, que ha permanecido hasta hoy. Los programadores se habían desecho del tedioso "código spaguetti", término utilizado para hablar de los programas cuyo orden de ejecución daba vueltas y se enredaba como un plato de espaguettis. Mientras tanto, el Algol permitió el desarrollo de lenguajes fundamentales como el Pascal, Fortran y C.

Junto con la programación estructurada se empieza a extender el uso de compiladores, programas que traducían todo el código fuente del programa original en instrucciones de código máquina de una sola vez, para que la ejecución fuera más rápida en el microprocesador.

En los años 80, Bjarne Stroustrup decidió elevar el épico lenguaje  C a un nivel máximo y desarrolló C++. Una de las grandes aportaciones de Bjarne fue la idea de los objetos, un código que representaba realidades que tenían propiedades, realizaban acciones y reaccionaban al entorno. Un objeto es un código que permite heredar propiedades y métodos de otros objetos padre, que encapsula el código y que permite distintas formas para las acciones que puede realizar el objeto (polimorfismo). Esta idea fundamental, que sostiene los lenguajes modernos, es la programación orientada a objetos (POO).




Tiempo después de crearse la programación orientada a objetos, surgió la necesidad de una mayor interacción con el usuario. Esto dio lugar a un tipo de programación orientada a recoger en tiempo real lo que ocurría, los eventos. Un evento es "algo que ocurre". Puede ser un click de ratón, una apertura de una ventana o un cambio de algún texto en pantalla. Cuando estos eventos ocurren, un analizador de eventos los "captura" e informa a los objetos de que algo ha ocurrido. Los objetos se adaptan en función a su programación interna. Este paradigma se denomina programación dirigida por eventos y actualmente, es el segundo paradigma fundamental, junto con POO.

En 1995 una pequeña compañía, Sun Microsistems con James Gosling al frente, desarrolló el primer lenguaje para cualquier sistema operativo, el famosísimo JAVA. Esto suponía que cualquier código podía ser ejecutado en cualquier tipo de computadora (Apple, Windows, Unix, Linux...). Aquello fue una idea revolucionaria, pues hasta ese momento los programas de una plataforma no corrían en las de otros. Antes había que especificar para qué sistema operativo se escribía cada programa. Desde ese momento, los programas servirían para cualquier plataforma y un único código fuente sería necesario. Había nacido el paradigma de programación multiplataforma, la tercera pata de los lenguajes modernos.



En este entorno surge la idea de la máquina virtual Java (JVM). El código fuente del programa se compila a un estado intermedio, conocido como bytecode, y después una máquina virtual realiza la ejecución paso a paso del bytecode dependiendo de la plataforma donde se desarrolle. Otras máquinas virtuales vendrán a continuación como Dalvik y ART para dar servicio a Android, el sistema operativo de los teléfonos homónimos.

Por si vuestra cabeza todavía no ha explotado, debo recordaros que todavía nos queda el paradigma de la programación multihilos o multitarea. Si bien es una idea tiene más que ver con la ejecución de varios procesos en el hardware, conviene no olvidar que ya en 1995 el sistema operativo Windows 95 permitía realizar varios procesos mediante un astuto sistema de compartición de tiempos en el núcleo del procesador. Sería 5 años más tarde cuando Intel y AMD desarrollarían sus primeros procesadores multinúcleo, que permitirían realizar varios procesos al mismo tiempo de forma real y no mediante software, como el descrito en Windows 95.

En la programación multihilos, se desarrollan hilos o procesos paralelos para ejecutarse al mismo tiempo que permiten controlar y realizar distintas acciones. Lenguajes como C++ y Java llevan implementada esta idea en su interior y gozan de una riqueza inmensa a la hora de resolver distintos problemas de manera flexible.

Existen muchas más ideas, o paradigmas, que han hecho avanzar el mundo de la programación pero estas serían las principales. Si echas en falta alguna más, o quieres aclaraciones sobre las mostradas, no dejes de enviarnos tus comentarios. Recuerda que esto sólo es el principio de una gran aventura para construir el futuro.