1. Contenidos
1.1 La IA como asistente de programación
La inteligencia artificial puede ser una herramienta muy útil durante el desarrollo de aplicaciones. Puede ayudar a explicar código, proponer soluciones, localizar errores, mejorar la estructura de un programa, generar documentación o sugerir pruebas.
Sin embargo, la IA no debe utilizarse como una máquina de copiar y pegar. El programador sigue siendo responsable de entender el problema, revisar la solución, ejecutar el código y comprobar que el resultado es correcto.
Idea clave: Usar IA para programar no significa dejar de pensar. Significa disponer de un asistente que puede acelerar algunas tareas, pero que necesita supervisión humana.
En esta sesión trabajaremos con ejemplos sencillos en Java, pero las técnicas pueden aplicarse también a otros lenguajes como JavaScript, Python, SQL, HTML o CSS.
1.2 Explicar código existente
Una de las tareas más útiles de la IA es explicar código que no entendemos completamente. Esto puede ocurrir al revisar código de un compañero, estudiar un ejemplo de clase o recuperar un proyecto antiguo.
Para obtener una explicación útil, conviene pedir a la IA que identifique las partes importantes del programa:
- Qué datos de entrada utiliza.
- Qué variables intervienen.
- Qué proceso realiza.
- Qué salida produce.
- Qué ocurre paso a paso.
Ejemplo de prompt:
Explícame paso a paso este código Java.
Indica qué hace cada variable y cuál será la salida del programa.
public class EjemploSuma {
public static void main(String[] args) {
Integer suma = 0;
for (Integer i = 1; i <= 5; i = i + 1) {
suma = suma + i;
}
System.out.println("Resultado: " + suma);
}
}
La explicación esperada debería indicar que el programa acumula los números del 1 al 5 y muestra el resultado final, que es 15.
Uso recomendado: Cuando estudies código generado por IA, pide siempre una explicación. Si no entiendes la explicación, no aceptes todavía el código.
1.3 Generación de código
La IA puede generar código a partir de una descripción del problema. Esta capacidad puede ser útil para obtener una primera versión, ver una posible estructura o comparar diferentes soluciones.
Para generar código con mejores resultados, el prompt debe incluir el lenguaje, el nivel, las restricciones y el comportamiento esperado.
Ejemplo de prompt:
Crea un programa Java de primer curso llamado CalcularDescuento.
Requisitos:
- Usa datos fijos en el código, sin Scanner.
- Utiliza Double para los precios.
- Calcula el precio final de un producto con un 15% de descuento.
- Muestra el precio inicial, el descuento aplicado y el precio final.
- Añade comentarios solo donde sean necesarios.
Posible código generado:
public class CalcularDescuento {
public static void main(String[] args) {
Double precioInicial = 80.0;
Double porcentajeDescuento = 15.0;
Double descuento = precioInicial * porcentajeDescuento / 100;
Double precioFinal = precioInicial - descuento;
System.out.println("Precio inicial: " + precioInicial + " euros");
System.out.println("Descuento aplicado: " + descuento + " euros");
System.out.println("Precio final: " + precioFinal + " euros");
}
}
Este código puede servir como punto de partida, pero debe revisarse. Por ejemplo, habría que comprobar que los cálculos son correctos y que el formato de salida es adecuado.
Precaución: La IA puede generar código que compila pero no cumple exactamente el enunciado. Compilar no es lo mismo que funcionar correctamente.
1.4 Generación de funciones y métodos
En lugar de pedir programas completos, suele ser más útil pedir métodos pequeños y concretos. Esto permite revisar mejor el código y probar cada parte por separado.
Ejemplo de prompt:
Crea un método Java llamado esMayorDeEdad.
Requisitos:
- Recibe un parámetro Integer llamado edad.
- Devuelve Boolean.
- Devuelve true si la edad es mayor o igual que 18.
- Devuelve false en caso contrario.
- No uses Scanner.
- Añade un main sencillo para probar el método con tres edades.
Posible solución:
public class ValidarEdad {
public static Boolean esMayorDeEdad(Integer edad) {
return edad >= 18;
}
public static void main(String[] args) {
System.out.println(esMayorDeEdad(17));
System.out.println(esMayorDeEdad(18));
System.out.println(esMayorDeEdad(25));
}
}
Esta solución parece correcta para edades normales, pero todavía podríamos mejorarla si queremos controlar edades negativas o valores nulos.
Pregunta útil: ¿Qué casos no ha tenido en cuenta esta solución?
1.5 Depuración de errores con IA
Depurar consiste en localizar y corregir errores en un programa. La IA puede ayudar a interpretar mensajes de error, revisar fragmentos de código o proponer hipótesis sobre el origen del problema.
Para pedir ayuda con un error, debemos aportar información concreta:
- Qué esperábamos que hiciera el programa.
- Qué ha ocurrido realmente.
- El mensaje de error completo.
- El fragmento de código relacionado.
- Qué pruebas hemos realizado.
Prompt poco útil:
El programa falla. Arréglalo.
Prompt mejorado:
Estoy programando en Java. Este código debería mostrar los números del 1 al 5,
pero se queda ejecutándose indefinidamente.
Código:
Integer contador = 1;
while (contador <= 5) {
System.out.println(contador);
}
Explícame:
1. Por qué se produce el problema.
2. Qué tipo de error es.
3. Cómo corregirlo modificando lo mínimo posible.
El problema es que la variable contador no cambia dentro del bucle. La condición siempre sigue siendo verdadera y se produce un bucle infinito.
Código corregido:
Integer contador = 1;
while (contador <= 5) {
System.out.println(contador);
contador = contador + 1;
}
Buena práctica: Cuando la IA proponga una causa del error, compruébala ejecutando el código o haciendo una prueba pequeña.
1.6 Tipos de errores que puede ayudar a revisar
La IA puede ayudar a analizar distintos tipos de errores, pero no todos se detectan igual.
| Tipo de error | Descripción | Ejemplo | Cómo puede ayudar la IA |
| Error de compilación | El programa no llega a ejecutarse porque el código no es válido. | Falta un punto y coma. | Puede interpretar el mensaje del compilador. |
| Error de ejecución | El programa compila, pero falla mientras se ejecuta. | División entre cero. | Puede explicar la excepción y localizar la línea problemática. |
| Error lógico | El programa se ejecuta, pero el resultado es incorrecto. | Calcular mal un descuento. | Puede revisar el algoritmo, pero requiere pruebas del programador. |
| Error de diseño | La estructura del programa dificulta su mantenimiento. | Un método hace demasiadas cosas. | Puede proponer una organización más clara. |
Atención: Los errores lógicos son especialmente peligrosos porque el programa puede parecer correcto. Por eso son imprescindibles las pruebas.
1.7 Refactorización con IA
Refactorizar consiste en mejorar la estructura interna del código sin cambiar su comportamiento externo. Es decir, el programa debe seguir haciendo lo mismo, pero el código debe quedar más claro, organizado y fácil de mantener.
La IA puede ayudar a:
- Mejorar nombres de variables, métodos y clases.
- Eliminar código repetido.
- Dividir métodos largos.
- Separar responsabilidades.
- Simplificar condiciones.
Código inicial:
public class Pedido {
public static void main(String[] args) {
Double p = 100.0;
Double iva = 21.0;
Double r = p + p * iva / 100;
System.out.println(r);
}
}
Prompt de refactorización:
Refactoriza este código Java sin cambiar su comportamiento.
Objetivos:
- Mejorar los nombres de las variables.
- Extraer el cálculo a un método.
- Mantener un nivel de primer curso.
- Explicar los cambios realizados.
Posible código refactorizado:
public class Pedido {
public static Double calcularPrecioConIva(Double precioBase, Double porcentajeIva) {
return precioBase + precioBase * porcentajeIva / 100;
}
public static void main(String[] args) {
Double precioBase = 100.0;
Double porcentajeIva = 21.0;
Double precioFinal = calcularPrecioConIva(precioBase, porcentajeIva);
System.out.println(precioFinal);
}
}
Comprobación obligatoria: Antes y después de refactorizar, el programa debe producir el mismo resultado para los mismos datos de entrada.
1.8 Documentación de código con IA
La IA puede generar documentación para explicar cómo funciona una parte del programa. Esto puede incluir comentarios, documentación de métodos o un pequeño archivo README para un proyecto.
Una buena documentación no repite lo evidente. Debe explicar la intención del código, las decisiones importantes y las condiciones de uso.
Ejemplo de prompt:
Genera documentación breve para este método Java.
Condiciones:
- No expliques línea por línea lo evidente.
- Indica qué recibe, qué devuelve y cuándo debería usarse.
- Usa un lenguaje claro para alumnado de primer curso.
public static Double calcularPrecioConIva(Double precioBase, Double porcentajeIva) {
return precioBase + precioBase * porcentajeIva / 100;
}
Posible documentación:
/**
* Calcula el precio final de un producto aplicando un porcentaje de IVA.
*
* @param precioBase Precio del producto antes de aplicar el IVA.
* @param porcentajeIva Porcentaje de IVA que se desea aplicar.
* @return Precio final con el IVA incluido.
*/
public static Double calcularPrecioConIva(Double precioBase, Double porcentajeIva) {
return precioBase + precioBase * porcentajeIva / 100;
}
Precaución: Documentar no significa llenar el programa de comentarios. Un código con buenos nombres suele necesitar menos comentarios.
1.9 Generación de pruebas
Una prueba sirve para comprobar si una parte del programa funciona como esperamos. La IA puede ayudar a proponer casos de prueba, pero el programador debe decidir si son suficientes.
Al probar código conviene incluir:
- Casos normales: datos habituales.
- Casos límite: valores justo en la frontera.
- Casos erróneos: datos no válidos.
Ejemplo de método:
public static Boolean esMayorDeEdad(Integer edad) {
return edad >= 18;
}
Prompt para generar pruebas:
Propón casos de prueba para este método Java.
Clasifícalos como casos normales, límite y erróneos.
No escribas todavía código de pruebas, solo una tabla con entradas y resultado esperado.
public static Boolean esMayorDeEdad(Integer edad) {
return edad >= 18;
}
| Tipo de caso | Entrada | Resultado esperado | Motivo |
| Normal | 25 | true | Edad claramente mayor de edad. |
| Normal | 12 | false | Edad claramente menor de edad. |
| Límite | 18 | true | Valor exacto de mayoría de edad. |
| Límite | 17 | false | Valor inmediatamente inferior. |
| Erróneo | -1 | Debe tratarse como dato no válido | Una edad negativa no tiene sentido. |
Idea clave: La IA puede proponer pruebas, pero el programador debe comprobar si cubren realmente el enunciado y los casos importantes.
1.10 Verificación del código generado por IA
Todo código generado o modificado con ayuda de IA debe verificarse antes de aceptarse. La verificación es el proceso mediante el cual comprobamos que el programa cumple los requisitos.
Una revisión mínima debería incluir:
- Leer el código completo.
- Comprobar que se ajusta al nivel y a las restricciones del ejercicio.
- Ejecutarlo con datos normales.
- Ejecutarlo con casos límite.
- Ejecutarlo con datos incorrectos si el programa debe validarlos.
- Revisar que los nombres de variables y métodos son claros.
- Confirmar que puedes explicar la solución con tus palabras.
Checklist antes de entregar código asistido por IA:
| Pregunta | Sí/No |
| ¿He entendido todo el código? | |
| ¿El código cumple exactamente el enunciado? | |
| ¿He probado casos normales? | |
| ¿He probado casos límite? | |
| ¿He revisado posibles entradas incorrectas? | |
| ¿Los nombres de variables y métodos son claros? | |
| ¿Puedo justificar la solución oralmente? | |
Regla final: La IA puede participar en el proceso, pero la responsabilidad del código entregado es del programador.
1.11 Flujo de trabajo recomendado
Un uso profesional de la IA en programación debe seguir un flujo controlado. El siguiente proceso permite aprovechar la herramienta sin perder el control del proyecto:
- Comprender el problema: leer el enunciado y detectar entradas, procesos y salidas.
- Intentar una solución inicial: escribir una primera versión o al menos un diseño.
- Pedir ayuda concreta a la IA: explicar la duda o el bloqueo.
- Revisar la respuesta: comprobar si respeta las restricciones.
- Probar el código: ejecutar varios casos de prueba.
- Corregir y mejorar: ajustar la solución.
- Documentar decisiones: anotar qué se ha cambiado y por qué.
Buenas prácticas: En proyectos reales se recomienda trabajar con control de versiones, hacer cambios pequeños y revisar cada modificación antes de aceptarla.