Lenguajes de programación

Miércoles, 10 de diciembre de 2025

Mi primer contacto con uno de ellos fue a mediados de los años 80: el Basic 1.0 incorporado en el Amstrad CPC-464. Venía con un buen manual lleno de ejemplos y el aprendizaje era relativamente sencillo.

Con Basic en esa máquina que tenía solo 64k de memoria RAM hice cosas interesantes, como una aplicación de dibujo, una pequeña base de datos y también hackear juegos mediante cargadores para conseguir vidas infinitas o inmunidad. Estos últimos programas venían en revistas de videojuegos y eran bastante tediosos de escribir pues modificabas la memoria prácticamente byte a byte con la famosa instrucción POKE, si bien disponían de rutinas para que en caso de fallo al menos te dijera en cual línea estaba, pues algunos cargadores podían tener más de 100 líneas de números en hexadecimal separados por comas.

Había una instrucción llamada GOTO, que servía para saltar arbitrariamente a otra línea de código, y como se abusara de ella, el código se podía complicar bastante. Este lenguaje fue odiado por ello.

Lo "cool" de esta máquina, al igual que la mayor parte de los ordenadores de 8-bit, como el Spectrum, era guardar tus propios programas en cintas de casette. El Amstrad CPC-464 incorporaba en el mismo teclado una unidad de escritura y lectura de cinta guardando y leyendo audio en forma de pitidos. Para ocupar menos espacio en la cinta podías grabar a doble velocidad, con el riesgo posterior de tener errores de lectura y perder el programa.

En los 90 con MSDOS y GWBasic se podían hacer cosas más serias, pero nunca lo utilicé. En esa época estudié Pascal de Borland, un lenguaje muy popular, pero no lo utilicé apenas.

En el instituto aprendí Cobol, y si bien es bastante árido, que quedó claro uno de los fundamentos de la programación: estructura de la información. Cobol es para aplicaciones serias de gestión de datos: programación estructurada con tipado fuerte, creación y uso de ficheros secuenciales, directos e indexados, menús interactivos de texto y enlace entre distintas aplicaciones. Todavía conservo el proyecto del curso que consiste en una serie de aplicaciones para gestionar un instituto, asignaturas, clases, notas, impresión de listados y notas, etc. Pero Cobol no me gustó nada.

También aprendí Ensamblador en el instituto y es el lenguaje más árido que he visto junto con la programación en shellcode en el ámbito de la seguridad y el hacking y los POKEs del Amstrad. Ensamblador es el lenguaje más cercano al microprocesador, utilizas unos pocos registros, unos pocos operadores y valores hexadecimales fundamentalmente. Si necesitabas operar con números decimales tenías que hacerte tu propia rutina de conversión/deconversión de un tipo a otro. Ahora, no hay lenguaje más rápido en ejecución, pues operabas directamente en los registros del microprocesador, que es la memoria más rápida que existe. Tuve la ocasión de conocer a un programador profesional de drivers en ensamblador para una aplicación corporativa y es fascinante. Si querías capturar un flujo de datos que llegaba de otra máquina por un cable conectado al puerto serie o COM, tenías que aprender el protocolo de comunicación de esa máquina remota y programarlo, saber cual era la dirección de memoria de ese puerto y conectar con él para después llevar los datos a otra dirección de memoria, por ejemplo al disco duro y guardarlos en algún fichero o utilizar otro driver para guardarlo en una base de datos, todo con 4 instrucciones y valores hexadecimales. Ensamblador es lenguaje máquina y junto con C, son fundamentales para saber cómo funciona realmente una computadora.

Entre los 90 y los 2miles empecé a interesarme en los lenguajes tipo script para automatizar tareas y configuraciones en MSDOS, Windows y Linux. En Windows teníamos la línea de comandos, wscript y vbscript que venían muy bien para extraer información de administración y gestión de Windows, manipular ficheros y automatizar tareas, pero la sintáxis era bastante poco intuitiva. La programación de la línea de comandos del MSDOS (y todavía en Windows) se realiza mediante comandos del sistema operativo en batch en ficheros con extensión .bat, y aunque hay bastantes comandos, son más difíciles de utilizar y controlar errores que en otros sistemas como Linux.

Justo cuando se publicaron las primeras versiones de Python me puse con él y tenía muy buena pinta, muy visual, pero todavía no tenía soporte completo de unicode (disponer de caracteres en cualquier idioma) para el terminal, cosa que Perl sí tenía y me decanté por éste otro.

El descubrimiento de Perl y su cantidad ingente de librerías fue como llegar a un parque de atracciones descomunal con el calco superdiversión: podías hacer cualquier cosa en cualquier sistema: scripting, automatización, conexión remota con cualquier protocolo o host, programación web, sistemas, integraciones y a la mejor velocidad que te pueda dar el sistema. Perl es como un C sencillo. Todavía me acuerdo de un fichero de texto que recibimos de unos 50GB para pasarlo a una bbdd en SQLServer; cuando uno de los programadores intentó abrirlo con Visual Basic, la petada fue antológica. Hice un pequeño script de Perl para leer línea a línea el fichero y escribir cada registro en una tabla del SQLServer y se lo comió en segundos. Desde entonces lo tengo claro, donde no llegan los demás o llegan tarde, llega Perl el primero.

Uno de los aspectos que más me impresionaron de Perl fue el uso de expresiones regulares. Con ellas tienes un control sobre el dato que no puedes tener de otra forma, como validar una dirección de email, encontrar patrones complejos, interpretar logs, vamos: validar cualquier estructura de información tenga el formato que sea.

Perl fue el primer lenguaje de Internet en alcanzar popularidad, creado por y para programadores de Internet, y no hay distribución de Linux que no la utilice para gestionar diversas partes del sistema operativo. En las primeras webs interactivas con el usuario, Perl ganó a todos los demás lenguajes de programación, hasta que llegó PHP. PHP ganó a Perl porque encapsuló en funciones muchas operaciones que eran siempre igual: validar y filtrar datos, lectura y escritura de información, iteración más sencilla en estructuras de listas, gestión de cookies y sesiones web, etc. y todo de serie, sin tener que instalar y mantener librerías externas.

La versión actual de Perl es la 5 y algo. Hace bastantes años, su creador Larry Wall quiso que la versión 6 de Perl fuera tan tan casi perfecta, que escribió el modelo, se pusieron a ello, crearon Perl 6 y cuando la mayoría de la gente que programaba en Perl 5 lo probaron, se dieron cuenta de que era otro lenguaje muy distinto, con una entidad propia que se alejaba sustancialmente de la filosofía original de Perl. Después de mucho debate durante años, al final Perl 6 se convirtió en un lenguaje denominado Raku, Perl 6 dejó de existir y parece que Perl 5 dará el salto a Perl 7. Yo he probado Perl 6, después Raku y he colaborado con la comunidad hasta hace unos años. Me ha parecido un lenguaje muy bien diseñado, académico y con unas funcionalidades concurrentes y gramaticales extremadamente poderosas. El manejo que hace de unicode es excepcional.

Hoy día tanto Perl como PHP se siguen utilizando de forma masiva, ya no en la línea principal, pero sí como los líderes que son en las entrañas de aplicaciones e integraciones rápidas y robustas.

Python es ideal para empezar con la programación y en su adolescencia fue adoptado por Google y la comunidad científica, y como los científicos también prefieren los lenguajes fáciles de utilizar crearon innumerables librerías muy útiles en Python, sobre todo para estadísticas y modelos extensos de lenguaje (LLM) utilizados en la IA. También tiene muchas librerías muy populares en el ámbito de la seguridad. Por eso Python es tan conocido.

Luego tenemos a los hermanos mayores: Java y C#, lenguajes orientados a objetos para aplicaciones grandes y webs donde hay que servir a muchos usuarios a la vez. Con Java he programado poco pero con C# y .NET he programado bastante para aplicaciones relacionadas con Directorio Activo y gestión de usuarios y servicios. Java también es el lenguaje en el que se programan las aplicaciones de Android y funciona en prácticamente cualquier dispositivo pues se creó con esa idea: programa una vez y ejecútalo en cualquier lugar.

En la parte de la web, concretamente en la parte del navegador, si bien existen mil librerías y frameworks de Javascript como VUE, React y Next.js, me quedo con HTML para la estructura general, CSS para dar formato y color y la librería Jquery de Javascript para controlar toda la parte de interacción con el usuario y también interaccionar con el servidor web de donde vienen los datos, todo bien cerca del dato y del usuario, fácil de depurar en caso de problemas.

Luego le tocó el turno a lenguajes funcionales: Clojure y Haskell. Orientados a concurrencia, proceso de datos masivos, muy profesionales para hacer cosas serias y tener las cosas muy claras.

Y por último C. De donde viene todo. Pero para ese le dedicaré un post entero.