Si las cosas evolucionan como están viniendo es muy probable que la labor principal de los programadores, la codificación, pase a ser realizadas por máquinas. Pero Dios no cierra una puerta sin abrir una ventana y aparece todo el trabajo de crear, adaptar, utilizar y analizar las inteligencias artificiales por lo que aquellos programadores con inquietud y voluntad podrán pasarse a este campo. Y por otra parte los ingenieros de software van a seguir diseñando el software y serán los que creen el código que mueva los sistemas futuros mediante especificaciones.
Para los que no estén familiarizados con a evolución de la informática este no es ni de lejos el primer caso donde la tecnología dio un giro copernicano por la introducción de nuevas formas de trabajo más sofisticadas y automatizadas que prometían acabar con el oficio de operador de sistemas informáticos. Simplificando y resumiendo:
La introducción de las primeras calculadoras electrónicas acabaron con las calculadoras manuales y mecánicas pero abrieron la revolución de la informática.
La introducción de los primeros lenguajes de programación acabaron con los operadores de estos sistemas pero dieron lugar a los programadores que trabajaban con tarjetas perforadas y sintaxis rudimentarias
La introducción de los lenguajes de alto nivel y la unificación de las plataformas bajo el paraguas de los sistemas Unix y el C dieron paso a la informática interactiva que no requería ser un experto para programar, compilar y ejecutar código.
La aparición de los micro ordenadores y los PCs acercaron la informática a las masas acompañados con el desarrollo de lenguajes de alto nivel hacían que programar fuera mucho más asequible.
La revolución de internet acercó toda la información para ser técnico informático de forma prácticamente gratuita a la humanidad conectada.
Ahora la inteligencia artificial está automatizando y simplificando la tarea del desarrollo de software hasta el punto donde los modelos son capaces de crear proyectos de software completos y funcionales a partir de un simple prompt.
No solamente la IA no eliminará puestos de ingenieros informáticos si no que la labor se ha vuelto más exigente y necesaria ya que estos han de comprender todas y cada una de las evoluciones tecnológicas desde la electrónica digital hasta los grandes modelos de lenguaje para poder tomar decisiones técnicas y fundamentadas.
Es común ya la idea de que la inteligencia artificial es una tecnología
disruptiva que va a cambiar la manera de la que muchos vivimos y trabajamos,
este post trata sobre la spec programming o programación por
especificaciones una tecnología desarrollada por la gente de
Microsoft y Github
que va a poner, muy probablemente, patas arriba el mundo de la programación.
La formas de programación de ordenadores han evolucionado mucho con el paso del
tiempo, esta evolución siempre ha sido parecida, se desarrolla un tipo de
sistema nuevo y mejor, la tecnología se vuelve más compleja y se desarrolla una
capa de abstracción que automatiza la forma de trabajo anterior para dar lugar
a un nuevo paradigma. Pasó cuando se pasó del código máquina al
ensamblador, del ensamblador a los lenguajes de programación modernos y
ahora toca sustituir los lenguajes de programación por el lenguaje
humano.
También han evolucionado las metodologías con las que se organizaba el trabajo
de desarrollo de software, cuando se empezaron a desarrollar los primeros
programas complejos que requerían de grupos de trabajo coordinados se implantó
el waterfall, esto duró hasta que en la era de internet la tecnología
aceleró su desarrollo y se impuso la programación ágil, ahora con la
irrupción de las máquinas pensantes parece ser que aparece un nuevo paradigma
la programación por especificaciones.
Una cuestión muy interesante es que esta nueva forma de programar la
posibilidad de integrar el desarrollo de software como una parte más de los
proyectos de otras disciplinas de ingeniería al posibilitar la especificación
de todos los detalles relevantes al desarrollo de forma extensiva y textual.
Metodología
La clave para que la IA cree un programa está en generar un contexto muy
rico para que a la hora de generar el código se deje el menor espacio posible
para la imaginación del modelo.
El trabajo de desarrollo lo lleva a cabo un agente de inteligencia artificial
que corra uno o más modelos guiados por un supervisor, normalmente un ingeniero
de software. Lo ideal es utilizar un modelo de lenguaje especializado en
escritura como ChatGPT5 o afín y luego la parte de desarrollo que la lleve
acabo una IA de programación como Claude.
Configuración del Entorno
A día de hoy la herramienta corre con todos los agentes más conocidos del mercado
siendo recomendable aquellos que permitan usar otros modelos aparte de los propios
como son Github Copilot, Cursor, Windsurf... por lo que hay que tenerlos
configurados para trabajar con los modelos de lenguaje elegidos.
A continuación invocamos el comando de configuración que nos inicia un asistente
donde se nos solicita el agente a utilizar y sobre que entorno trabajar, Unix o
Windows. Con estos datos crea la carpeta plantilla con todos los scripts y
parámetros para poder trabajar.
Desarrollo
Con el entorno configurado iniciamos el agente especificado asignamos el modelo
que más convenga y empezamos:
- Redacción de la constitución. Donde se especifican los principios
básicos de la arquitectura, si se hacen tests y si estos van antes o después
y otras cuestiones afines sin entrar en detalles de implementación. Como
suelen ser todas muy parecidas se puede dejar a la IA y luego hacer
modificaciones. (Comando
/constitution)
- Redacción de las especificaciones. Este es el trabajo inicial del
operador donde se le indica lo que se quiere y porqué se quiere en un
documento que puede ser completado por la IA. En esta parte no se incluye
detalles técnicos si no arquitectónicos. (Comando
/spec)
- Clarifciación. En este paso se analizan las especificaciones y se
eliminan los riesgos que pudieran ser perjudiciales en el plan.
(Comando
/clarify)
- Redacción del plan. Aquí ya se entra en materia tecnológica indicando
lenguajes, librerías, reglas específicas y demás. También la IA puede ser de
ayuda generando una plantilla inicial a partir de las ideas propuestas por
los operadores. (Comando
/plan)
- Generación de las tareas. A partir de las especificaciones y de acuerdo
al contexto proporcionado por la gente de Github y los operadores se genera
el documento de tareas. Que ha de indicar de forma muy pormenorizada como
se implementa todas y cada una de las partes. (Comando
/tasks)
- Análisis del proyecto. Es de buen proceder invocar un análisis previo para
encontrar incongruencias que pudieran afectar al generador de código.
(Comando
/analyze)
- Implementación. El agente escogido para llevar a cabo la implementación
de las tareas lleva a cabo su trabajo dando al final un producto prácticamente
terminado en teoría.(Comando
/implement)
El resultado puede ser variable en calidad, mis experiencias con esta técnica me
dicen que no es oro todo lo que reluce pero es sin duda un paso importante frente
al vive-coding, donde la creatividad y las alucinaciones del algoritmo pesan
mucho en el desarrollo lo que redundaba en unas pequeñas mejoras frente al
desarrollo hecho por programadores.
Conclusiones
Esta es una tecnología que viene para quedarse, hay mucho espacio para la
mejora pero sin duda es una herramienta que hay que conocer si te toca
desarrollar software ocasionalmente y sin duda dominarla en caso de que te
dedique profesionalmente a ello.
Ventajas
- Se puede generar código para cualquier plataforma.
- Se implementa a gran velocidad desde el punto de vista del proyecto
- Permite programación iterativa
- Permite integrar la informática en el cuerpo de otros proyectos de
ingeniería.
Inconvenientes
- Requiere conocimientos de ingeniería de software
- Cuesta dinero
- Es lento desde el punto de vista humano
- Impacto negativo en la demanda de programadores