1. Contenidos
1.1 ¿Qué es opencode?
opencode es una herramienta de inteligencia artificial orientada a la programación que se utiliza desde la terminal. A diferencia de un chatbot tradicional, puede trabajar sobre los archivos de un proyecto, analizar el código, proponer cambios y ayudar en tareas habituales de desarrollo.
En esta unidad no utilizaremos opencode para que programe por nosotros, sino para aprender a trabajar con un agente de IA de forma controlada. El objetivo es que el alumno sea capaz de pedir ayuda, revisar los cambios, probar el resultado y justificar las decisiones tomadas.
Idea clave: opencode puede actuar como asistente de programación, pero el responsable final del código sigue siendo el programador.
La práctica se realizará sobre un proyecto Java sencillo. El proyecto debe ser lo suficientemente pequeño para poder revisarlo completo, pero lo bastante realista para incluir análisis, generación, corrección, refactorización y pruebas.
1.2 Antes de empezar: preparación del entorno
Antes de utilizar opencode conviene preparar el entorno de trabajo. Un agente de IA puede modificar archivos, por lo que es importante trabajar de forma ordenada.
Requisitos recomendados:
- Tener Java instalado y funcionando.
- Tener Git instalado.
- Tener un proyecto Java sencillo en una carpeta propia.
- Comprobar que el proyecto compila antes de pedir cambios.
- No incluir claves, contraseñas ni datos personales en el proyecto.
Comprobaciones iniciales:
java --version
git --version
Si el proyecto ya está en una carpeta, podemos entrar en ella desde la terminal:
cd ruta/del/proyecto
Buena práctica: Antes de usar un agente, guarda una copia del proyecto o trabaja con Git. Así podrás revisar o revertir cambios si algo sale mal.
1.3 Proyecto de práctica
Para esta sesión utilizaremos una aplicación Java sencilla llamada GestorTareas. La aplicación tendrá una lista de tareas representada de forma básica y algunas operaciones sencillas.
El objetivo no es construir una aplicación completa, sino practicar el flujo de trabajo con opencode. Trabajaremos con un proyecto pequeño para que cada cambio pueda revisarse fácilmente.
Estructura inicial propuesta:
gestor-tareas/
├── src/
│ └── GestorTareas.java
└── README.md
Código inicial:
public class GestorTareas {
public static void main(String[] args) {
String tarea1 = "Revisar apuntes de Java";
String tarea2 = "Hacer ejercicios de bucles";
String tarea3 = "Subir práctica al aula virtual";
Boolean tarea1Completada = true;
Boolean tarea2Completada = false;
Boolean tarea3Completada = false;
System.out.println("Listado de tareas:");
System.out.println("1. " + tarea1 + " - " + tarea1Completada);
System.out.println("2. " + tarea2 + " - " + tarea2Completada);
System.out.println("3. " + tarea3 + " - " + tarea3Completada);
}
}
Limitación intencionada: El código inicial es simple y mejorable. Esto nos permite practicar explicación, revisión, refactorización y mejora con ayuda de IA.
1.4 Inicializar el repositorio Git
Antes de permitir que una herramienta modifique archivos, debemos poder comprobar qué ha cambiado. Para eso utilizaremos Git.
Comandos iniciales:
git init
git status
git add .
git commit -m "Crea versión inicial del gestor de tareas"
Después del commit inicial, el proyecto queda guardado en un punto conocido. Si opencode realiza cambios incorrectos, podremos compararlos con la versión anterior.
Comando para revisar cambios:
git diff
Regla de seguridad: No aceptes un cambio de un agente sin revisar antes el diff.
1.5 Primer uso: pedir análisis sin cambios
El primer contacto con opencode debe ser de solo lectura. Antes de modificar archivos, es conveniente pedirle que analice el proyecto y explique qué ha encontrado.
Prompt recomendado:
Analiza este proyecto Java.
No modifiques ningún archivo todavía.
Quiero que expliques:
1. Qué archivos contiene el proyecto.
2. Qué hace la clase principal.
3. Qué limitaciones tiene el código actual.
4. Qué mejoras sencillas podrían hacerse con nivel de primer curso.
Este prompt permite comprobar si el agente entiende correctamente el proyecto. Si la explicación contiene errores, no deberíamos pedirle todavía que modifique el código.
Pregunta de control: ¿La explicación del agente coincide con lo que tú ves en el código?
1.6 Pedir una mejora concreta
Una vez analizado el proyecto, podemos pedir una mejora pequeña y concreta. En esta práctica, pediremos extraer la impresión de una tarea a un método.
Prompt recomendado:
Modifica el proyecto para extraer la impresión de una tarea a un método.
Restricciones:
- Modifica solo GestorTareas.java.
- Mantén un nivel de Java de primer curso.
- No uses arrays ni colecciones todavía.
- Usa tipos wrapper cuando corresponda.
- Haz el cambio mínimo necesario.
- Después del cambio, explica exactamente qué has modificado.
Posible resultado esperado:
public class GestorTareas {
public static void mostrarTarea(Integer numero, String descripcion, Boolean completada) {
System.out.println(numero + ". " + descripcion + " - " + completada);
}
public static void main(String[] args) {
String tarea1 = "Revisar apuntes de Java";
String tarea2 = "Hacer ejercicios de bucles";
String tarea3 = "Subir práctica al aula virtual";
Boolean tarea1Completada = true;
Boolean tarea2Completada = false;
Boolean tarea3Completada = false;
System.out.println("Listado de tareas:");
mostrarTarea(1, tarea1, tarea1Completada);
mostrarTarea(2, tarea2, tarea2Completada);
mostrarTarea(3, tarea3, tarea3Completada);
}
}
Comprobación: El programa debe mostrar la misma información que antes. La estructura interna ha mejorado, pero el comportamiento externo debe mantenerse.
1.7 Revisar el diff después del cambio
Después de que opencode modifique el proyecto, debemos revisar qué ha cambiado. El objetivo es detectar si el agente ha hecho solo lo pedido o si ha añadido cambios innecesarios.
Comando:
git diff
Ejemplo simplificado de diff:
+ public static void mostrarTarea(Integer numero, String descripcion, Boolean completada) {
+ System.out.println(numero + ". " + descripcion + " - " + completada);
+ }
- System.out.println("1. " + tarea1 + " - " + tarea1Completada);
- System.out.println("2. " + tarea2 + " - " + tarea2Completada);
- System.out.println("3. " + tarea3 + " - " + tarea3Completada);
+ mostrarTarea(1, tarea1, tarea1Completada);
+ mostrarTarea(2, tarea2, tarea2Completada);
+ mostrarTarea(3, tarea3, tarea3Completada);
En este caso, el cambio es razonable: se añade un método y se sustituyen tres líneas repetidas por tres llamadas al método.
Pregunta de revisión: ¿El agente ha modificado solo lo necesario para cumplir el objetivo?
1.8 Ejecutar y probar el programa
Una vez revisado el diff, hay que ejecutar el programa. La revisión visual no sustituye a la prueba real.
Compilar y ejecutar desde terminal:
javac src/GestorTareas.java
java -cp src GestorTareas
Salida esperada:
Listado de tareas:
1. Revisar apuntes de Java - true
2. Hacer ejercicios de bucles - false
3. Subir práctica al aula virtual - false
Si el programa no compila o la salida ha cambiado sin motivo, debemos volver a revisar el cambio o pedir al agente que explique el error.
Prompt para corregir después de probar:
He probado el programa después del cambio y aparece este error:
[pegar aquí el error completo]
No hagas cambios todavía.
Explícame la causa probable y propón el cambio mínimo necesario.
Importante: El mensaje de error completo es una de las mejores pistas para depurar correctamente.
1.9 Añadir una nueva funcionalidad
Después de practicar con una refactorización sencilla, podemos pedir una funcionalidad nueva. Por ejemplo, mostrar el número total de tareas y cuántas están completadas.
Prompt recomendado:
Añade al programa un resumen final con:
- Número total de tareas.
- Número de tareas completadas.
- Número de tareas pendientes.
Restricciones:
- Modifica solo GestorTareas.java.
- No uses arrays ni colecciones.
- Mantén el código comprensible para primer curso.
- Crea métodos pequeños si ayuda a mejorar la claridad.
- Explica cómo probar el cambio.
Posible salida final:
Listado de tareas:
1. Revisar apuntes de Java - true
2. Hacer ejercicios de bucles - false
3. Subir práctica al aula virtual - false
Resumen:
Total de tareas: 3
Completadas: 1
Pendientes: 2
Control de alcance: Si el agente intenta convertir el programa en una aplicación mucho más compleja, hay que detenerlo y volver a pedir un cambio más pequeño.
1.10 Pedir casos de prueba a opencode
Además de modificar código, podemos pedir a opencode que proponga casos de prueba. En programas sencillos, las pruebas pueden ser manuales.
Prompt recomendado:
Propón casos de prueba manuales para este programa.
Quiero una tabla con:
- Caso de prueba.
- Datos utilizados.
- Salida esperada.
- Qué se comprueba.
No modifiques el código.
Ejemplo de tabla esperada:
| Caso | Datos | Salida esperada | Qué comprueba |
| Todas pendientes | 3 tareas con completada = false | Total 3, completadas 0, pendientes 3 | Cuenta correctamente las pendientes. |
| Todas completadas | 3 tareas con completada = true | Total 3, completadas 3, pendientes 0 | Cuenta correctamente las completadas. |
| Mezcla de estados | 1 completada y 2 pendientes | Total 3, completadas 1, pendientes 2 | Calcula bien el resumen mixto. |
Idea clave: Las pruebas no deben limitarse al caso que ya funciona. Hay que buscar también situaciones límite o distintas combinaciones de datos.
1.11 Documentar el trabajo realizado
En una práctica con IA es importante documentar no solo el resultado final, sino también el proceso seguido. Esto permite demostrar que el alumno ha comprendido el trabajo y no se ha limitado a aceptar respuestas automáticas.
La documentación mínima debería incluir:
- Objetivo de la práctica.
- Estado inicial del proyecto.
- Prompts utilizados.
- Resumen de las respuestas importantes de opencode.
- Cambios aceptados.
- Cambios rechazados, si los hubo.
- Pruebas realizadas.
- Reflexión personal sobre el uso de IA.
Ejemplo de fragmento para README.md:
## Uso de IA
He utilizado opencode para analizar el proyecto, proponer una refactorización
y generar casos de prueba manuales.
Cambios aceptados:
- Extracción del método mostrarTarea.
- Añadido de resumen final de tareas.
Comprobaciones realizadas:
- Revisión del diff con git diff.
- Compilación con javac.
- Ejecución del programa con distintos estados de tareas.
Evaluación: Documentar los prompts y decisiones ayuda a diferenciar un uso responsable de IA de una simple copia de código.
1.12 Flujo completo recomendado
El siguiente flujo resume cómo trabajar con opencode de forma segura y formativa:
- Preparar un proyecto pequeño y comprensible.
- Comprobar que el proyecto inicial funciona.
- Inicializar Git y crear un commit inicial.
- Pedir a opencode un análisis sin cambios.
- Pedir un cambio pequeño y concreto.
- Revisar el diff.
- Compilar y ejecutar el proyecto.
- Probar casos normales y casos límite.
- Aceptar, ajustar o rechazar el cambio.
- Hacer un commit con un mensaje claro.
- Documentar prompts, cambios y pruebas.
Comandos finales recomendados:
git status
git diff
javac src/GestorTareas.java
java -cp src GestorTareas
git add .
git commit -m "Refactoriza gestor de tareas y añade resumen"
Conclusión: La práctica no consiste en que opencode genere código perfecto, sino en aprender a dirigir, revisar y validar el trabajo de un agente de IA.