Un programador se encuentra trabajando en una computadora vintage en una sala futurista. A la izquierda, una serie de máquinas retro iluminadas con tonos cálidos muestran texto y luces parpadeantes. En contraste, a la derecha, un entorno digital abstracto con líneas de datos y patrones lumínicos en tonos azulados y naranjas representa la transición hacia la tecnología moderna y la inteligencia artificial.

El programar se va a acabar

Es duro, pero, me temo que así será. La programación, tal y como la conocemos, está atravesando un cambio que, a medio/largo plazo, podría llevarla a su desaparición. Insisto, tal y como la conocemos hoy… Porque, a lo largo de la historia, hemos visto cómo grandes hitos han cambiado radicalmente la forma en que trabajamos con las máquinas. Y siempre se supone que estos cambios son para mejor. ¿No? Bueno, cuando los sistemas evolucionan, suelen hacerlo para mejorar, aunque no siempre sea fácil aceptar lo que atrás se nos queda.

¿El gran culpable de este nuevo giro? El tema del momento, del que no se deja de hablar en todas partes: la Inteligencia Artificial. Si eres programador, probablemente ya te habrás dado cuenta. Y si no, sigue leyendo, que te lo explico. Pero primero, viajemos un poco en el tiempo y repasemos algunos de los hitos más importantes que han marcado la historia de la programación.

Orígenes de la programación

Al principio, cuando aparecieron las primeras computadoras todo era mecánico, más «manual», obviamente no existían los ordenadores domésticos que hoy en día todos conocemos. Al principio se utilizaban en casos muy específicos y eran operados por especialistas, los mismos que los «programaban». La «Máquina Analítica» de Charles Babbage, a mediados de 1800, es la que se considera la primera máquina programable. Antes de esta, Babbage hizo su primer intento con la «Máquina Diferencial», un dispositivo mecánico diseñado para cálculos matemáticos «avanzados». Aunque nunca se construyó completamente, representó un salto conceptual en la historia de la computación. Esta máquina se programaba utilizando tarjetas perforadas inspiradas en los telares mecánicos de Jacquard que permitían introducir instrucciones y datos en las máquinas de forma secuencial.

Antes de que Charles Babbage diseñara la Máquina Analítica, Alan Turing ya había planteado un concepto revolucionario: la máquina de Turing. Este modelo matemático, aunque teórico, definió lo que significaba «computar» y sentó las bases de la informática moderna. Su trabajo fue crucial para entender los límites y posibilidades de las máquinas, y sigue siendo una referencia clave en la teoría de la computación.

Cada uno de estos tipos de tarjetas tenía un lector dedicado, lo que permitía que la máquina interpretara programas completos. Babbage concibió un lenguaje de programación similar a los lenguajes ensambladores modernos, que permitía realizar operaciones complejas como bucles e instrucciones condicionales, haciendo que el sistema fuera equivalente a una máquina de Turing. Fue durante esta época que Ada Lovelace, hija del famoso poeta Lord Byron, colaboró con Babbage y dejó un legado fundamental en la historia de la programación.

Ada no solo documentó el funcionamiento de la máquina, sino que escribió el primer programa conocido de la historia, diseñando un algoritmo para que la máquina calculara los números de Bernoulli. Su visión iba más allá de los simples cálculos, Lovelace fue la primera en comprender que la máquina podía manipular símbolos según reglas lógicas, lo que significaba que no estaba limitada a cálculos matemáticos, sino que podía abordar cualquier tipo de problema que pudiera expresarse mediante algoritmos.

La programación digital

Con el desarrollo de la electrónica, las válvulas de vacío reemplazaron los componentes mecánicos, dando lugar a los primeros ordenadores digitales. Esto permitió un salto enorme en velocidad y fiabilidad, las tarjetas perforadas comenzaron a ser sustituidas por sistemas más avanzados que permitían interactuar de forma más directa con los ordenadores. Uno de los grandes avances fue la introducción del lenguaje máquina, que permitía escribir instrucciones directamente en código binario (ceros y unos) que los ordenadores podían interpretar. Cada combinación de bits representaba una operación específica, como sumar dos números, cargar datos en memoria o mover información entre registros. Aunque esto eliminó la necesidad de tarjetas físicas, la programación seguía siendo extremadamente compleja y propensa a errores.

John von Neumann revolucionó el diseño de los ordenadores al proponer la arquitectura de programas almacenados, lo que permitió que las instrucciones y los datos compartieran la misma memoria, haciendo posible el software como lo conocemos hoy. También es destacable la figura de Grace Hopper en esta época, desarrolló el primer compilador, una herramienta que traduce código escrito en lenguajes más simples a instrucciones ejecutables. Lo que permitió un control más sencillo de las máquinas y abrió el camino para los lenguajes de alto nivel.

Los programadores podían escribir instrucciones precisas para optimizar el rendimiento, algo crucial dado lo limitado de los recursos. Aunque poderoso, el lenguaje máquina era difícil de manejar, lo que llevó a la creación del lenguaje ensamblador, que traducía instrucciones más humanas al lenguaje binario. El lenguaje ensamblador fue una respuesta directa a las limitaciones de las tarjetas perforadas y al arduo proceso de escribir en lenguaje máquina (código binario). Aunque seguía siendo un lenguaje de bajo nivel, permitió que los programadores escribieran programas con comandos simbólicos como ADD (sumar), LOAD (cargar en memoria) o STORE (almacenar en memoria), en lugar de largas cadenas de ceros y unos.

Todo esto simplificó enormemente la programación, ya que permitió modificar y depurar programas de forma mucho más rápida y efectiva. Además, se podía programar directamente en la consola del ordenador o mediante cintas magnéticas, lo que marcó el inicio del abandono de las tarjetas perforadas. Tanto las tarjetas perforadas como el lenguaje máquina y luego ensamblador supusieron el fin de la programación completamente manual y sentaron las bases para el desarrollo de lenguajes más abstractos, como los lenguajes de alto nivel que vendrían después. ¿Podía la programación ser más comprensible para los humanos sin sacrificar el control sobre la máquina?

Los lenguajes de alto nivel

La respuesta llegó en los años 1950 con la aparición de los primeros lenguajes de alto nivel. Este tipo de lenguajes representaron un salto drástico en la forma de programar, al abstraer los detalles técnicos y permitir que los programadores se centraran en resolver problemas en lugar de lidiar con las complejidades del hardware. Un lenguaje de alto nivel es un tipo de lenguaje de programación que se caracteriza por su sintaxis más cercana al lenguaje humano y por estar diseñado para ser comprensible y lógico para los programadores.

A diferencia de los lenguajes de «bajo nivel», como el ensamblador o el lenguaje máquina, que requieren instrucciones específicas para interactuar directamente con el hardware, los lenguajes de alto nivel abstraen esos detalles y ofrecen comandos más intuitivos y generales. Por ejemplo, en lugar de escribir varias líneas para mover datos entre registros, un programador puede simplemente usar una instrucción como PRINT para mostrar un resultado en pantalla.

Fortran, COBOL y LISP fueron los pioneros, entre otros. Lenguajes en extinción a día de hoy, a nadie se le ocurriría elegir uno de éstos para construir algo en la actualidad, en su momento fueron los motores de la programación pero, en un mundo tan flexible como el de la programación, no tardaron mucho en aparecer nuevos lenguajes que facilitaban aun más las cosas. Y es que, al fin y al cabo, de eso se trata, de facilitar la gestión y mantenimiento de los sistemas informáticos, hacer más con menos esfuerzo.

Además, el trabajo de Donald Knuth, con su monumental obra The Art of Computer Programming, fue fundamental para formalizar y optimizar el diseño de algoritmos. Este trabajo sentó las bases de la programación eficiente y sigue siendo una referencia imprescindible en la informática moderna. Posteriormente, Dennis Ritchie diseñó el lenguaje C, una herramienta fundamental que influyó en lenguajes modernos como Python, Java y C++. Su contribución no solo marcó un antes y un después en la programación, sino que también fue clave para el desarrollo de Unix, un sistema operativo que cambió la historia de la informática.

Evolución del hardware y los lenguajes

Los primeros ordenadores eran enormes, ocupando salas completas, consumían cantidades masivas de electricidad y usaban válvulas de vacío que fallaban con frecuencia. A medida que los transistores y circuitos integrados reemplazaron a las válvulas, los ordenadores se hicieron más compactos y confiables, permitiendo un uso más extendido. La mejora del hardware permitió que la programación evolucionara rápidamente hacia lenguajes más «complejos» y herramientas que optimizaban el desarrollo. Así como Fortran y COBOL marcaron un salto en su tiempo, el desarrollo de lenguajes posteriores como C, Pascal, y más tarde Python y Java, seguiría transformando el panorama de la programación.

Margaret Hamilton, quien lideró el desarrollo del software de vuelo del programa Apollo, propuso un enfoque meticuloso y una visión modernizada que dieron origen al término «Ingeniería de Software», estableciendo estándares que aseguraron el éxito de misiones críticas y demostraron la importancia de una programación confiable. Más tarde, James Gosling creó Java, un lenguaje diseñado para la portabilidad y la flexibilidad. Su lema «Escribir una vez, ejecutar en cualquier sitio» revolucionó el desarrollo de software a nivel empresarial, consolidando a Java como una herramienta clave en aplicaciones web y móviles.

Y así llegamos hasta el día de hoy, en el que la programación no sólo trata de lenguajes: el protagonismo ha pasado en gran medida a las herramientas y frameworks, que han revolucionado la manera en que se construye software. Los frameworks son entornos preconfigurados que proporcionan herramientas, bibliotecas y estructuras para facilitar la creación de software. A diferencia de programar «desde cero», los frameworks permiten a los desarrolladores centrarse en la lógica del negocio, delegando tareas repetitivas y complejas, como la gestión de bases de datos, el manejo de interfaces gráficas o la configuración de servidores, al framework. Ayudan a intentar evitar «reinventar la rueda» reutilizando componentes que son de uso habitual en el proceso de desarrollo de software y los hay de todo tipo, para backend, frontend, móvil, web, etc.

Gracias a ellos los programadores podemos centrarnos en resolver problemas más grandes y complejos. En lugar de implementar algoritmos de encriptación, un framework como Django los incluye por defecto. En lugar de gestionar la renderización manual de una página, React lo hace automáticamente a través de componentes. La programación ha evolucionado para convertirse en una tarea cada vez más colaborativa y abstracta, donde el enfoque no está tanto en escribir cada línea de código, sino en ensamblar soluciones utilizando las herramientas disponibles.

La resurrección del No-Code

Otro enfoque diferente, éste plantea que, cualquier persona, sin conocimientos técnicos, pueda construir aplicaciones mediante interfaces visuales intuitivas. Aunque vivimos actualmente un boom de herramientas No-Code, la realidad es que esta idea no es nueva. En los años 2000, herramientas como Adobe Dreamweaver ya ofrecían una aproximación similar. Permitía a los usuarios crear páginas web arrastrando y soltando elementos visuales en una interfaz gráfica, mientras generaba automáticamente el código HTML y CSS en segundo plano. Aunque no era tan avanzado como las herramientas actuales y el código generado solía añadir lo que llamamos «basura», código innecesario, ineficiente, que no aporta nada, marcó un primer intento de acercar el desarrollo web a personas sin conocimientos de programación.

En este contexto, es interesante destacar el impacto indirecto del trabajo de Tim Berners-Lee, creador de la World Wide Web. Al definir protocolos como HTTP y HTML, Berners-Lee no solo sentó las bases para la creación de internet tal como lo conocemos, sino que también estandarizó lenguajes fundamentales en el desarrollo web. El boom actual del No-Code se debe a que las herramientas de hoy son mucho más completas, capaces de manejar integraciones avanzadas y con interfaces diseñadas para usuarios sin conocimientos previos, permitiendo a los desarrolladores enfocarse en tareas más complejas.

La IA, el boom ¿final?

Mientras que el No-Code está pensado para complementar la programación tradicional y no para reemplazarla, democratizan el desarrollo y permiten a más personas crear soluciones básicas, los desarrolladores profesionales siguen siendo necesarios para abordar tareas más complejas, diseñar sistemas escalables o personalizar soluciones a medida, la IA viene a proponer un enfoque similar aunque evolucionado con respecto al anterior.

Llegamos al tan manido tema, el que todo lo está revolucionando, la Inteligencia Artificial. Un término, que suena casi como magia para muchos, abarca múltiples tecnologías y están impulsadas por algoritmos matemáticos avanzados basados en la probabilidad, y su funcionamiento es más fascinante (y sencillo de lo que parece) de lo que podría pensarse. Son algoritmos que predicen cuál debería ser la siguiente palabra en un texto basándose en el contexto proporcionado. Para lograr esto, se entrenan con enormes cantidades de datos provenientes de libros, artículos, sitios web y muchas otras fuentes. Durante este proceso de entrenamiento masivo, los modelos no adquieren «conocimiento» en el sentido humano, pero sí detectan patrones estadísticos sobre cómo se utiliza el lenguaje, desde estructuras gramaticales hasta relaciones semánticas entre palabras y los contextos en los que ciertas combinaciones son más probables.

Cuando un modelo genera texto, no está «pensando» ni «entendiendo», sino que calcula probabilidades para determinar qué palabra es la más adecuada en función del texto previo. Por ejemplo, si se introduce «El sol sale por el…», el modelo seleccionará «Este» porque es lo que su análisis estadístico indica como más probable. Sin embargo, lo que hace realmente revolucionarios a estos modelos es que, gracias a su escala y complejidad, han desarrollado capacidades que van mucho más allá de la predicción de palabras, permitiéndoles resolver problemas, programar, traducir idiomas y mucho más. Además, mediante un proceso conocido como ajuste fino, estos modelos pueden especializarse en tareas específicas, como Codex, que se entrenó para entender y generar código de manera precisa.

En este punto, es imposible no destacar el papel fundamental que ha jugado Python, un lenguaje creado por Guido van Rossum, en el auge de la IA. Diseñado para ser claro, legible y accesible, Python se convirtió en el estándar para la implementación de algoritmos de aprendizaje automático y modelos de inteligencia artificial. Su sintaxis intuitiva y su vasta colección de bibliotecas lo han consolidado como un pilar esencial en esta revolución tecnológica. Aunque no es el único lenguaje utilizado, su diseño ha permitido que incluso quienes no tienen experiencia previa puedan acercarse al mundo de la IA.

Estamos viendo los primeros pasos de un nuevo paradigma, aunque por ahora, siguen siendo necesarios programadores expertos para llevar a la práctica las sugerencias indicadas por estos algoritmos, ya se empieza a vislumbrar el futuro de la programación y es que la tendencia es, por más que nos pese a los que disfrutamos de esto, a su desaparición. El día 30 de noviembre hacen dos años desde que se presentó por primera vez ChatGPT, el algoritmo del lenguaje más conocido aunque no el único, y ya está revolucionando el mundo, también el de la programación, a estas alturas, ya Google genera con Inteligencia Artificial el 25% del nuevo código que produce, una cuarta parte, en dos años…

Con la llegada de herramientas como GitHub Copilot, Bolt, V0 y Cursor, capaces de generar código fuente funcional a partir de expresiones humanas naturales, la creación de software ha alcanzado un nuevo nivel de simplificación, y todo indica que esta tendencia continuará. Ahora mismo, estas herramientas, tienen límites, no son capaces de alcanzar todas las partes que intervienen en el desarrollo y puesta en producción de un software. Saben y pueden ayudarnos a programar funciones puntuales que luego los programadores juntamos y ajustamos para completar toda esa parte del desarrollo de software que no es escribir código. Es trivial para una IA de este tipo crear una clase cualquiera con los parámetros que le indiquemos pero será incapaz de integrar el sistema de autenticación en tu proyecto, por ahora. Los algoritmos de IA actuales dependen en gran medida del volumen y la calidad de los datos con los que han sido entrenados, cuánta mayor cantidad de información posea mayor su conocimiento al respecto. Aunque ya se está explorando cómo dotarlos de la capacidad de aprender de manera dinámica y autónoma, esta es una posibilidad que aún pertenece al futuro.

Estas herramientas aún están en sus primeras etapas de desarrollo, y lo que hemos visto hasta ahora es solo una fracción de su verdadero potencial. No pasará mucho tiempo antes de que estas tecnologías permitan construir software completo sin necesidad de escribir una sola línea de código fuente. Eso nos lleva, querido compañero, a una realidad ineludible: la programación tal y como la conocemos está destinada a transformarse. En lugar de centrarnos en el código, deberemos enfocar nuestros esfuerzos en los aspectos más abstractos del proceso, en la «parte de negocio», diseñando estrategias y soluciones sin preocuparnos por la creación de las herramientas en sí.

Este cambio tiene tanto aspectos positivos como negativos. Para quienes disfrutamos programando, el código podría convertirse en un pasatiempo, un desafío personal o una actividad que hacemos por puro placer. Por otro lado, quienes prefieren trabajar en el diseño y la gestión de productos podrán dedicar su energía a sacar adelante proyectos exitosos sin el peso del desarrollo técnico. Al final, dependerá del gusto, enfoque y necesidades de cada uno.

Lo que está claro es que estamos viviendo un cambio radical de lo que significa «programar». Está ocurriendo a una velocidad vertiginosa y, aunque pueda parecer abrumador, lo único que podemos hacer es prepararnos para abrazarlo, porque, queramos o no, nos guste o no, es inevitable.

Desde las primeras tarjetas perforadas, pasando por lenguajes de alto nivel, frameworks y herramientas No-Code, hasta la reciente irrupción de la inteligencia artificial, como decíamos antes, la evolución siempre ha tenido un objetivo claro: simplificar y optimizar los procesos, facilitar el trabajo, pero si es cierto que nunca antes habíamos estado tan cerca de un paradigma en el que programar como lo hemos conocido hasta ahora, pudiera convertirse en una habilidad del pasado.

¿Es el fin de la programación tal como lo conocemos? Es muy probable, pero como ha ocurrido con cada cambio en la historia de la tecnología, esto no significa que dejemos de ser relevantes, simplemente significa que nuestras habilidades deben adaptarse, que debemos aprender a trabajar con estas nuevas herramientas y subirnos al tren de la evolución, se trata de otra oportunidad más para crecer y explorar nuevas formas de crear. Al final, lo que realmente importa no es si escribimos código o no, sino si seguimos resolviendo problemas, creando valor y transformando el mundo con lo que hacemos. Y en eso, querido compañero, siempre habrá lugar para los apasionados como nosotros, porque la esencia de la programación no está en las líneas de código, sino en las ideas que convertimos en realidad.

¡El futuro no espera!

Leave a Comment