Tema 12. Programación asistida por IA

Currículo: esta unidad cubre parte de los saberes básicos del Bloque E – IA en programación (PRYC.2.E.1) correspondiente a 2º Bachillerato. Además, se evalúan los criterios que puedes encontrar al final de esta página.

Tabla de contenidos

Nos encontramos en un momento especialmente interesante en la historia de la programación: por primera vez, no solo damos instrucciones a una máquina, sino que colaboramos con otra inteligencia para crear software. La llamada programación asistida por inteligencia artificial está transformando por completo la forma en la que se desarrolla código. Ya no se trata únicamente de escribir líneas de código desde cero, sino de saber plantear problemas, guiar a la IA y validar soluciones. Esto supone un cambio profundo en el rol del programador, que pasa de ser un ejecutor técnico a convertirse en un diseñador de soluciones digitales más eficientes, rápidas y, en muchos casos, sorprendentes.

El objetivo de este tema es que seas capaz de acelerar el desarrollo de software sin perder calidad, entendiendo cuándo la IA es una aliada y cuándo es necesario cuestionar sus resultados.

12.1. Introducción a la programación asistida por IA

En todo nuestro recorrido sobre distintos paradigmas de programación a lo largo del año, hemos aprendido que programar consiste en escribir instrucciones claras para que el ordenador haga exactamente lo que le indicamos. Sin embargo, con la llegada de la inteligencia artificial, esto empieza a tambalearse. Ahora, además de escribir código, también dialogamos con sistemas capaces de generar ese código por nosotros.

12.1.1. Qué significa programar con IA

Cuando hablamos de programar con IA, no nos referimos simplemente a usar una herramienta que autocompleta código. Nos referimos a trabajar con sistemas capaces de entender instrucciones en lenguaje natural y transformarlas en soluciones funcionales.

Por ejemplo, en lugar de escribir manualmente una función en JavaScript para validar un formulario, puedes describir lo que necesitas:

?> Quiero validar con JavaScript que un email tenga formato correcto y que la contraseña tenga al menos 8 caracteres.

Y la IA genera una primera versión del código:

<!DOCTYPE html>
<html lang="es">
<head>
  <meta charset="UTF-8">
  <title>Validación de formulario</title>
</head>
<body>

  <form id="formulario">
    <label>Email:</label><br>
    <input type="text" id="email"><br><br>

    <label>Contraseña:</label><br>
    <input type="password" id="password"><br><br>

    <button type="submit">Enviar</button>
  </form>

  <p id="mensaje"></p>

  <script>
    const formulario = document.getElementById("formulario");
    const mensaje = document.getElementById("mensaje");

    formulario.addEventListener("submit", function(event) {
      event.preventDefault(); // evita que el formulario se envíe

      const email = document.getElementById("email").value;
      const password = document.getElementById("password").value;

      // Expresión regular para validar email
      const regexEmail = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;

      if (!regexEmail.test(email)) {
        mensaje.textContent = "El email no tiene un formato válido";
        mensaje.style.color = "red";
        return;
      }

      if (password.length < 8) {
        mensaje.textContent = "La contraseña debe tener al menos 8 caracteres";
        mensaje.style.color = "red";
        return;
      }

      mensaje.textContent = "Formulario válido ✅";
      mensaje.style.color = "green";
    });
  </script>

</body>
</html>

Esto cambia la naturaleza del trabajo: ya no es tan importante memorizar sintaxis como saber expresar correctamente un problema.

Es similar a cuando utilizas un buscador en internet: no gana quien más sabe, sino quien mejor sabe buscar.

Aquí ocurre lo mismo, pero aplicado al desarrollo de software. La precisión al describir lo que quieres se convierte en una habilidad fundamental.

12.1.2. De programador a arquitecto de soluciones

Este cambio implica también una evolución en tu papel como programador. Antes, gran parte del tiempo se dedicaba a escribir código línea a línea. Ahora, una parte importante del trabajo consiste en decidir qué se quiere construir, cómo se estructura y cómo se valida. Es decir, pasamos de centrarnos en el “cómo escribirlo” a centrarnos en el “qué construir y por qué”.

Podemos compararlo con el mundo de la construcción. Un albañil coloca ladrillos, pero un arquitecto diseña el edificio completo. La IA puede ayudarte a “colocar ladrillos” muy rápido (escribir código), pero alguien debe tomar decisiones: qué tecnología usar, cómo organizar el proyecto, cómo garantizar que todo funcione correctamente.

Ese alguien eres tú.

Un mismo problema puede plantearse de muchas formas, pero no todas tienen el mismo valor cuando trabajamos con IA. La diferencia clave está en si el prompt se limita a pedir código sin contexto o si realmente define una solución estructurada.

Prompt poco útil

“Haz un formulario en JavaScript con validación de email y contraseña.”

❌ Este planteamiento es impreciso. No define el contexto, ni el comportamiento esperado, ni cómo debe integrarse en una aplicación real. La IA puede generar algo funcional, pero probablemente genérico, poco adaptado y difícil de reutilizar.

Este tipo de prompt refleja el enfoque tradicional, centrado únicamente en escribir código, sin pensar en el problema completo.

Prompt útil

“Quiero una pequeña aplicación web con HTML, CSS y JavaScript que incluya un formulario de login. El formulario debe tener campos de email y contraseña. El email debe validarse con una expresión regular y la contraseña debe requerir al menos 8 caracteres. Si hay errores, deben mostrarse mensajes claros al usuario sin recargar la página. El código debe estar organizado y comentado para poder reutilizarlo en otros proyectos.”

✅ Aquí ya estamos actuando como arquitectos de soluciones, definiendo claramente qué queremos construir y cómo debe comportarse.


12.2. Herramientas de IA para programar

Después de entender el cambio de mentalidad que implica la programación asistida por IA, es necesario conocer con qué herramientas trabajamos realmente.

Existen entornos y aplicaciones que permiten generar código, detectar errores o incluso construir proyectos completos en cuestión de minutos. Sin embargo, no todas las herramientas hacen lo mismo ni tienen el mismo nivel de autonomía, por lo que es importante que comprendas qué tipo de ayuda ofrece cada una y en qué situaciones resulta más adecuada.

12.2.1. Asistentes de código en tiempo real

Este tipo de herramientas se pueden integrar o no directamente en el editor de código y te ayudan mientras programas. Funcionan como un “copiloto” que sugiere líneas o bloques de código en función de lo que estás escribiendo.

Por ejemplo, si empiezas una función en JavaScript, la IA puede completarla automáticamente basándose en patrones comunes.

Su utilidad principal es acelerar tareas repetitivas.

Imagina que tienes que recorrer un array, validar datos o crear estructuras HTML: en lugar de escribir todo desde cero, la herramienta anticipa lo que quieres hacer.

Estas son algunas de las herramientas centradas en autocompletado inteligente y generación de código mientras programas, con mayor adopción por parte de la comunidad:

12.2.2. Generadores de aplicaciones completas

Estas herramientas permiten generar aplicaciones completas a partir de una descripción en lenguaje natural.

Por ejemplo, puedes pedir: “crea una web con un sistema de registro de usuarios y base de datos”, y la IA genera tanto el frontend como el backend.

Este tipo de soluciones es especialmente útil para prototipado rápido. Permite validar ideas sin invertir demasiado tiempo en desarrollo manual.

Veamos ejemplos de herramientas orientadas a construir aplicaciones completas a partir de descripciones, con mayor nivel de autonomía:

12.2.3. IA integrada en entornos de desarrollo

Los entornos de desarrollo modernos (IDE) están incorporando asistentes de IA que van más allá de sugerir código. Permiten explicar funciones, detectar errores, refactorizar código o incluso generar documentación automáticamente.

Por ejemplo, puedes seleccionar una función en Java y pedir que te explique qué hace, o solicitar que la optimice.

Esto convierte al entorno de desarrollo en una herramienta mucho más potente, ya que no solo escribes código, sino que también lo analizas y mejoras en tiempo real.

A continuación se listan herramientas populares que convierten el IDE en un entorno inteligente capaz de analizar, modificar y generar código con contexto completo del proyecto:

12.3. Prompt engineering aplicado a programación

Una de las habilidades más importantes que se deben dominar en la programación actual es: saber comunicarse con la IA de forma precisa. Aunque pueda parecer que basta con “pedir algo”, la realidad es que la calidad del resultado depende directamente de cómo formulamos nuestras instrucciones. Esto es lo que se conoce como prompt engineering, y se ha convertido en una competencia clave para cualquier programador moderno.

✏️ Cuando utilizas una IA para generar código, no estás simplemente haciendo una pregunta, sino definiendo un problema técnico. Cuanto mejor estructurado esté ese problema, mejores serán las soluciones que obtendrás. Por tanto, aquí no se trata de escribir más código, sino de pensar mejor antes de pedirlo.

12.3.1. Cómo pedir código correctamente

Vamos a utilizar un ejemplo para guiar la manera de proceder.

Supongamos que queremos analizar datos de uso de una plataforma, algo muy habitual hoy en día.

Partimos, como antes, de un prompt poco útil:

-> Haz una consulta SQL para ver usuarios

Este planteamiento es prácticamente inútil en un contexto real. No define qué quieres ver exactamente, ni cómo están estructurados los datos, ni qué información es relevante. La IA podría devolverte cualquier cosa, pero difícilmente algo que resuelva un problema concreto.

Ahora vamos a construir el prompt correctamente, paso a paso:

  • Objetivo: quieres identificar a los usuarios más activos.
  • Contexto: trabajas con una base de datos SQL con tablas de usuarios y actividad.
  • Restricciones: solo quieres usuarios con más de cierto número de acciones y ordenar resultados.
  • Formato: necesitas una consulta SQL clara y optimizada.

El prompt completo sería:

-> Quiero una consulta SQL que, a partir de una base de datos con una tabla usuarios(id, nombre) y otra tabla acciones(id, usuario_id, tipo, fecha), devuelva los 10 usuarios más activos en el último mes. La consulta debe contar el número de acciones por usuario, filtrar solo aquellos con más de 50 acciones y ordenar los resultados de mayor a menor actividad. Devuélveme solo la consulta SQL.

Ahora la diferencia es enorme. Has definido el problema con precisión: qué datos existen, qué quieres calcular, qué condiciones deben cumplirse y cómo debe presentarse el resultado.

Si lo analizas, aquí ya no estás “pidiendo código”, sino planteando una consulta analítica concreta, como haría un desarrollador en una empresa que necesita tomar decisiones basadas en datos.

Insistimos, la clave no está en escribir mejor SQL, sino en pensar mejor el problema antes de pedir la solución.

12.3.2. Estrategia para mejorar resultados

Un error habitual es pensar que el primer resultado que devuelve la IA es el definitivo. En realidad, el proceso suele ser iterativo: se empieza con una primera versión y se va mejorando progresivamente. Podemos trabajar de la siguiente forma:

1️⃣ Obtener una solución inicial
Partimos de un prompt sencillo, típico cuando aún no se domina esta técnica:

-> Haz una API en PHP para tareas.

La IA probablemente generará algo básico, pero con problemas habituales.

2️⃣ Analizar el resultado y detectar problemas
Tras revisar lo generado, detectamos carencias importantes:

  • No se especifica qué operaciones debe soportar (crear, listar, borrar…).
  • No se define la estructura de los datos.
  • No hay control de errores.
  • No se indica cómo se accede a la API (GET, POST, etc.).

Se trata de analizar la solución e identificar qué falta.

3️⃣ Refinar el prompt para mejorar aspectos concretos
Ahora añadimos más contexto y requisitos:

-> Quiero una API REST en PHP que permita gestionar tareas. Debe tener endpoints para crear una tarea y obtener la lista de tareas. Cada tarea debe tener id, título y estado (pendiente o completada). Usa JSON para enviar y recibir datos.”

La mejora es evidente, pero aún falta nivel profesional:

  • No se define validación.
  • No se especifica base de datos.
  • No se gestionan errores.
  • No se detallan métodos HTTP.

4️⃣ Repetir el proceso hasta alcanzar la calidad deseada
Refinamos el prompt con mayor precisión:

-> Quiero una API REST en PHP sin frameworks que permita gestionar tareas usando una base de datos MySQL. Debe incluir los siguientes endpoints:

GET /tareas → devuelve todas las tareas
POST /tareas → crea una nueva tarea con título obligatorio
PUT /tareas/{id} → actualiza el estado de una tarea
DELETE /tareas/{id} → elimina una tarea

Las tareas deben tener id, título y estado (pendiente/completada). La API debe trabajar con JSON, validar que el título no esté vacío y devolver mensajes de error claros en caso de fallo. El código debe estar organizado en archivos separados (conexión, lógica y rutas) y comentado.

ℹ️ Resultado del proceso
La evolución es muy significativa:

  • Pasamos de “pedir algo” a definir una API completa.
  • Especificamos estructura, comportamiento y validaciones.
  • Anticipamos errores reales.
  • Exigimos organización del código.

Aquí es donde se ve el verdadero valor del refinamiento: no estás mejorando el código directamente, estás mejorando la definición del problema. Y eso es exactamente lo que diferencia a alguien que usa la IA de forma superficial de alguien que realmente la aprovecha como herramienta profesional.

Este proceso es exactamente el mismo que seguimos cuando programamos sin IA: probar, detectar fallos y mejorar. La diferencia es que ahora el ciclo es mucho más rápido, lo que permite iterar en minutos lo que antes podía llevar horas.

12.4. De programar a orquestar

El mundo de la programación en general, y de la IA en particular, evoluciona tan rápido que lo que acabas de leer más arriba YA ESTÁ OBLSOLETO.

En la actualidad ya no se trata solo de generar funciones o archivos de código, sino de coordinar sistemas de IA que trabajan de forma autónoma. El programador deja de centrarse en escribir instrucciones paso a paso y pasa a definir tareas, supervisar resultados y organizar procesos. Es un cambio similar al que ocurre cuando un equipo humano pasa de trabajar individualmente a hacerlo coordinado bajo una dirección técnica.

Herramientas como Cursor IDE, Claude Sonnet (y su entorno de desarrollo Claude Code) o GitHub Copilot están empujando este cambio: ya no solo sugieren código, sino que entienden proyectos completos, ejecutan tareas complejas y colaboran como si fueran un miembro más del equipo.

12.4.1. Qué significa orquestar en programación

Cuando hablamos de orquestar, nos referimos a coordinar distintos procesos automatizados para alcanzar un objetivo. En lugar de escribir todo el código manualmente, defines:

  • Qué quieres construir.
  • Qué tareas hay que realizar.
  • En qué orden deben ejecutarse.
  • Cómo se valida el resultado.

Por ejemplo, en lugar de programar una API paso a paso, puedes plantear:

-> Necesito un backend que gestione usuarios, con autenticación, base de datos y endpoints REST.

A partir de ahí, la IA puede: generar la estructura del proyecto, crear los archivos necesarios, implementar funcionalidades, sugerir mejoras o detectar errores.

Tu papel pasa a ser el de quien supervisa, corrige y decide.

¿Quién realiza cada uno de esos procesos? Buena, pregunta.

Todos esos procesos podrían ser realizados por una única IA, pero en la actualidad todo está tan especializado que de cada tarea se encarga un agente 👇.

12.4.2. Agentes

Los agentes son sistemas de IA capaces de ejecutar tareas de forma autónoma dentro de un contexto. No solo generan código, sino que pueden:

  • Leer varios archivos del proyecto.
  • Modificar código existente.
  • Ejecutar comandos.
  • Iterar sobre sus propios resultados.

Por ejemplo, con herramientas como Cursor o Claude Code puedes trabajar así:

  1. Defines una tarea: “añade autenticación con JWT a este proyecto”.
  2. El agente analiza el código existente.
  3. Implementa cambios en varios archivos.
  4. Comprueba posibles errores.
  5. Te muestra el resultado para validación.

Eso es sólo una parte de lo que es capaz de hacer un agente. Si además, tienes un sistema multiagente, con un agente especializado en cada tarea, terminas siendo un orquestador de agentes, no un programador.

Esto se parece mucho a trabajar con un equipo de desarrollo al que le asignas tareas, pero con una velocidad muy superior.

Te dejo todos los conceptos relacionados en esta imagen » Orquestar agentes de IA.

A veces, necesitamos que a lo largo del proceso de desarrollo de software nuestro ecosistema de agentes se conecten con herramientas externas para consumir algún servicio, consultar algún dato, comprobar alguna cuestión o cualquier otra necesidad. ¿Te imaginas que un compañero te ha mandado un email sugiriendo alguna nueva funcionalidad de tu programa? Puedes darle permisos a una IA para que lea tu correo, entienda lo que pide tu compañero y sobre la marcha modifique el programa para incorporar la nueva funcionalidad.

Bienvenid@ a los MCP.

12.4.3. MCP

El siguiente paso es permitir que la IA no solo genere código, sino que interactúe con el mundo real del desarrollo. Aquí entra el concepto de MCP (Model Context Protocol), que permite conectar la IA con herramientas externas como: bases de datos, repositorios de código, APIs, sistemas de archivos, …

Esto significa que la IA puede, entre otras muchas cosas:

  • Leer directamente una base de datos para generar consultas SQL adaptadas.
  • Analizar un repositorio completo en GitHub.
  • Ejecutar pruebas reales sobre el código.
  • Acceder a cualquiera de tus aplicaciones.

En lugar de trabajar con ejemplos aislados, la IA trabaja con tu proyecto real, lo que multiplica su utilidad.

Por ejemplo, podrías tener un sistema multiagente que cada vez que te llega un correo tomara el nombre del remitente y su dirección de correo electrónico, buscara en las redes sociales a esa persona y te creara un PDF con todos sus datos, fotos y biografía, y te lo enviara por WhatsApp a tu móvil.

No, no se me ha ido la cabeza, eso ya existe.

Uno de los más usados por sus capacidades y gratuidad es OpenClaw:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *