Iniciación básica a la programación II

Os imagináis trabajar en un laboratorio informático, vestido con una bata blanca, y que para obtener el resultado de un algoritmo lo tuvierais que describir por medio de perforaciones en una tarjeta, dicha tarjeta enviarla por mensajero a un edificio de otro barrio o ciudad, y que te devolviera la respuesta (fuera el resultado o la descripción de errores) por medio de otras tarjetas que tuvieras que traducir para saber qué había pasado?

O, cuando Grace Hopper en 1951, que construyo el primer compilador que permitía olvidarnos del código binario o el lenguaje máquina del que hablé en el artículo anterior, encontraros con FORTRAN, que en su primera implementación solo tenía TRES comandos: DO, FOR y GOTO.


Clasificación


Si obviamos el problema irresoluto de definir qué es un lenguaje de programación y cuando no lo es, la clasificación de los lenguajes de programación podría realizarse desde varios puntos de vista.

La división inicial es su cercanía al hardware, habiendo una concordancia entre la dificultad y coste de mantenimiento contra la complejidad de los algoritmos.

  • Lenguaje Máquina. Son aquellos lenguajes que están más cerca de la unidad de cómputo. Y que utilizan el lenguaje binario. Comúnmente se escribe en notación hexadecimal y se describe los comandos físicos que soporta el procesador y las posiciones de memoria en donde se lee o se escribe. Es extremadamente dificultoso de programar a este nivel y prácticamente se ha desechado actualmente.

  • Bajo nivel. Si ponemos una capa por encima del lenguaje máquina, entramos en el lenguaje en ensamblador. En donde las diferentes instrucciones físicas del procesador se pueden introducir por medio de cadenas alfanuméricas, que serán traducidas a código binario antes del momento de su ejecución. Se obtiene un resultado excelente, pero sigue siendo muy engorroso y costoso desarrollar a este nivel. Y solamente la necesidad de prestaciones límite en tamaño y velocidad puede hacer rentable el desarrollo en este tipo de lenguaje.

Eso sí, trabajando en ensamblador es como se conoce realmente como trabaja un sistema informático. Vamos que se le vén las tripas.

  • Alto nivel. Si ponemos una o varias capas por encima del ensamblador, nos encontramos con un lenguaje de alto nivel. Un lenguaje en donde escribimos según el paradigma o la sintaxis de un interprete o compilador. Y que nos permite niveles de abstracción, es decir olvidarnos de la base física de la computación y centrarnos en la lógica del desarrollo.

A partir de este punto tenemos otra clasificación de acuerdo al paradigma de programación: imperativo, declarativo, estructurado, funcional, orientado a objetos u orientado a aspectos, que están aún muy lejos del contenido de esta serie de iniciación básica.

Lo importante es seguir recalcando que toda la complejidad en la abstracción de los lenguajes, desde su inicio, están asociados a la búsqueda de poder expresar lo que queremos que hagan los ordenadores de la forma más natural posible.

Ya que, a pesar de lo que piense la inmensa mayoría de los usuarios, los ordenadores son absolutamente “tontos, y solamente hacen lo que se les determina que hagan, de forma binaria.

Composición básica


En cualquier caso, sea lenguaje máquina o nuestro lenguaje de alto nivel preferido, todos los lenguajes tienen un tronco común que debemos de conocer y entender en su profundidad para que sean las bases sobre el que sustentar el conocimiento necesario para desarrollar aplicaciones informáticas.

Variables
Al realizar cualquier algoritmo, necesitamos un repositorio en la memoria, según la arquitectura de Von Neumann, en donde poder guardar los valores iniciales, finales y los estados de un proceso.

Por ello todos los lenguajes permiten definir un nombre simbolico a un unidad de información que puede cambiar durante la ejecución del programa. Y esto se le llama variable.

Por ejemplo, en el ejemplo de un programa sencillo realizado en javascript en una página web, WriteCodeOnline, en donde podéis probar vuestros primero pinitos.

saludo = “Hola Mundo”;
alert(saludo);

Aquí estoy utilizando la variable llamada saludo en donde almaceno la cadena de caracteres “Hola Mundo”.

El alert que utilizo a continuación es un objeto de javascript que hace que salga una ventanita mostrando el contenido de la variable saludo, y que lo tengo que utilizar para poder ver el contenido de la variable.

Condicionales
Toda la algorítmica de un desarrollo de software está basada en las decisiones que se deben tomar de acuerdo al valor de las variables. Incluso en la máquina de Turing se debe acceder a una tabla de acciones que es dependiente del valor que se lee. Por ello en todo lenguaje debe haber alguna forma de comparar entre dos valores y con el resultado realizar una acción u otra.

Si seguimos con el ejemplo anterior, podría modificar mi código para que, dependiendo del contenido de saludo, muestre un mensaje o muestre otro.


saludo = ‘Hola Mundo’;
if (saludo == ‘Hola Mundo’)
{ alert(saludo);
}

Si lanzamos el código, nos volverá a salir la ventana con el saludo, pero si cambio el valor de la variable saludo, verás como no se visualiza nada. Esto es debido a la construcción if, que pregunta si el contenido de la variable saludo es la que se está esperando y entonces realiza la acción que hemos programado. Si no lo es, obvia el contenido dentro de la construcción y continúa con la siguiente linea.

Este condicional rápidamente evolucionó hacia el moderno if then else, switch, select case, etc. Todo tipo de condicionales que permiten construir un árbol de decisiones para nuestra lógica.

Veamos un último ejemplo añadiendo la sentencia else a nuestro condicional,


saludo = ‘Hola Mundo’;
if (saludo == ‘Hola Mundo’)
{ alert(saludo);
}
else
{ alert(‘No te he entendido’);
}

Bucles
Por último, otra pieza fundamental de todo software que se construye son los bucles. Es decir, aquello que nos permite repetir una y otra vez unas mismas líneas de código.

Para que se me entienda mejor veamos un ejemplo. Imagínate que contar los primeros 5 números. Si no hubiera una estructura que me permitiera hacer un bucle, debería de escribir algo tan engorroso como esto,


numero = 0;
alert(numero);
numero = 1;
alert(numero);
numero = 2;
alert(numero);
numero = 3;
alert(numero);
numero = 4;
alert(numero);

En cambio gracias aun FOR, el código queda mucho más simple y sencillo de entender. Lo que se hace en este iterador es darle un valor inicial a una variable, comprobar si cumple un condicional (en este caso que la variable numero tenga un valor menor o igual que 5), y cada vez que se realice un bucle incremente en uno el valor del contenido de la variable número.

numero = 0;
for (numero = 0; numero < = 5; numero = numero + 1)
{ alert(numero);
}

Conclusión


Como has visto, en este capítulo de la serie de iniciación básica hemos revisado la forma más simple de categorizar los lenguajes de programación de acuerdo a su cercanía al hardware.

Y te he presentado los tres pilares básicos de todo programa de software. Y partiendo de estas simples reglas (realmente todo basado en unos y ceros) se ha construido la compleja Sociedad de la Información y la Revolución Informática en la que vivimos.

Web de prácticas | WriteCodeOnline
Más Información| Historia y evolución de los lenguajes de programación, Historia de los lenguajes de programación
Imagen de portada | Ada Lovelace en la Wikipedia
En GenbetaDev | Iniciación básica a la programación, Diez lenguajes experimentales que podrían impactar en un futuro

Portada de Genbeta