En este artículo voy a aportar unas buenas prácticas, en forma de reglas de oro, que propone Addy Osmani en su libro 'Beyond Vibe Coding: From Coder to AI-Era Developer'.
Un breve recordatorio: qué es el 'vibe coding'
Antes, y a modo de muy breve recordatorio, decir que el término 'vibe coding' denomina, de una forma que hay que reconocer que algo confusa, el uso de la inteligencia artificial para la generación de código software.
Aunque, como digo el término no es académico ni de límites claros, personalmente tiendo a asimilarlo al caso en que la IA hace gran parte del trabajo, que genera todo o gran parte del código fuente, mientras que para otras situaciones en que es una ayuda pero más atomizada, generando secciones relativamente limitadas de código o ayudando en depuración de errores concretos y cosas así, podríamos adoptar el término de ingeniería de software asistida por IA que propone el propio Osmani.
En cualquier caso, creo que no vale la pena en este caso 'ponerse estupendos' con las definiciones. Hablamos de generación de código (e incluso de intervención en todo el ciclo de vida de la ingeniería software) basado en inteligencia artificial y, en concreto, en grandes modelos de lenguaje.
Para más detalles, invito al lector a visitar mi post anterior 'Conociendo el vibe coding', incluyendo la referencia bibliográfica al libro de Osmani, o a las aportaciones de Andrej Karpathy, creador del término 'vibe coding'
Las doce reglas de oro del 'vibe coding'
Bueno, y sin más dilación éstas son las doce reglas de oro que propone Osmani en su libro, a las que me tomo la libertad de añadir algunos comentarios propios:
- Sé claro y específico en lo que quieres: Se trata de proporcionarle instrucciones muy claras a la IA sobre la aplicación, función o lo que sea que se le está solicitando. Esto, en realidad, es la fusión de dos buenas prácticas: la de la especificación de requisitos clara, propia de la ingeniería de software tradicional (sobre todo en el modelo en cascada) y la de proporcionar instrucciones claras y precisas propio del 'prompt engineering'
- Valida siempre la salida de la IA frente a tu intención: Osmani utiliza el término intención ('intent') para indicar aquello que realmente queremos, aquello que esperamos del software que vamos a crear. Y lo que propone, en el fondo, es algo que también se realiza en ingeniería de software tradicional bajo el término 'validación', y que significa asegurarse de que el software satisface los requisitos del negocio. En este caso, lo que creo que es más relevante es la llamada de atención a 'no fiarse' sin más de lo que genera de IA, sino realizar una validación activa y por humanos del resultado.
- Trata a la IA como a un desarrollador junior: Básicamente, significa, de nuevo, no fiarse directamente del código generado por la IA. Con la metáfora del desarrollador junior, se traslada la idea de supervisar las tareas. Es decir, delegar tareas de desarrollo pero revisar el resultado.
- Usa la IA para expandir tus capacidades no para sustituir tu pensamiento: Una juiciosa llamada de atención a no renunciar a la propia capacidad de resolución de problemas y de toma de decisiones. Aparte de lo que para la persona supone, el propio estado del arte de la generación automática de código requiere actualmente que el humano asuma muchas de las decisiones o planteamientos más complejos.
- Coordina por anticipado con el equipo antes de generar código: Se trata de un lógico establecimiento de ciertas reglas de juego comunes, tanto de estilo como de operación. Pero, además, hay que tener en cuenta que la IA puede decidir modificar módulos (eventualmente desarrollados por otra persona o por otra persona ayudada por IA), por lo que es necesario coordinar y poner reglas.
- Trata el uso de la IA como una parte normal de la conversación del desarrollo: De igual forma que los equipos de desarrollo hablan de herramientas, hallazgos y buenas prácticas, lo que propone Osmani es algo tan lógico y natural como que en esas conversaciones se incluyan experiencias, éxitos, fallos etc encontrados en el trabajo con la IA.
- Separa los cambios en Git mediante 'commits' diferentes: Se trata de gestionar de forma separada, en lo que a control de versiones se refiere, el código generado por humanos del generado de la IA: Es una regla de orden práctico para facilitar revisiones, vueltas atrás, etc
- Asegura que todo el código pasa por una revisión de código: La revisión de código ('code review') es una buena práctica tradicional en ingeniería software. Se trata de que el software generado, no sólo se prueba en funcionamiento, sino que el propio código fuente es inspeccionado y revisado, en general por otro desarrollador o por un arquitecto de soluciones. Personalmente aseguraría que esta práctica está bastante en desuso y, sin embargo, Osmani la propone como una regla de oro. Por un lado, propone usarla para que una persona revise el código generado por la IA, lo cual puede estar perfectamente alineada con esa metáfora del desarrollador 'junior' que mencionábamos antes. Pero además, propone también revisar el código generado por humanos. Es decir, es una apuesta general y en toda regla por la revisión de código.
- No hagas 'merge' de código que no entiendes: Para aquellos no familiarizados con el trabajo en software, indicar que 'hacer un merge' significa fusionar en una sola instancia dos versiones del código fuente del mismo módulo para lo cual de alguna forma hay que decidir (automáticamente o por una persona) qué parte sobrevive de cada versión en el resultado unificado. Cuando Osmani propone esta regla, lo que propone en el fondo es no fiarse sin más de un código generado por la IA, sino primero entenderlo como haría el desarrollador con el código generado por él mismo, y sólo entonces incorporarlo al repositorio común de código y eventualmente mezclarlo o fusionarlo con otro código.
- Prioriza los comentarios y documentación: De nuevo, se trata de rescatar, y aplicar al caso del código generado por IA, una buena práctica de la ingeniería de software tradicional. Una práctica que consiste en insertar comentarios y generar documentación que ayude a entender a un tercero (o al propio desarrollador pasado un tiempo) el código fuente. Eso es fundamental sobre todo de cara al mantenimiento y evolución.
- Comparte y reutiliza los prompts efectivos: una vez más, la adaptación de una buena práctica del mundo del software que consiste en generar módulos reutilizables, aunque en este caso aplicada a los prompts. En este caso, también, se trata de una buena práctica de ingeniería de instrucciones. Si un prompt (una instrucción) ha demostrado que ha generado buenos resultados, un código que funciona y hace lo que tiene que hacer, es bueno reutilizarlo y compartirlo con el resto del equipo.
- Reflexiona regularmente e itera: Propone una revisión periódica de todo la mecánica y 'workflow' de desarrollo como una forma de mejora. Se trata un poco de la adaptación de la filosofía de la calidad total o de las llamadas 'retrospectivas' usadas en enfoques agile como Scrum.
No es oro todo lo que reluce
En cierto modo, en estas reglas de oro que propone Osmani, observamos muchas dosis de revisión, intervención humana y aplicación de buenas prácticas de ingeniería de software tradicional.
¿Por qué?
Pues porque aunque no sabemos a dónde puede llegar el 'vibe coding', en la actualidad, y pese a los extraordinarios avances y aportaciones, y pese a lo que ya aporta en el proceso de desarrollo de software, todavía no te puedes fiar, en muchos sentidos, del código generado por la IA, y es preciso revisar, probar y mejorar el proceso.
En algún post futuro, comentaré algunas de estas limitaciones actuales.
Conclusiones
El 'vibe coding' permite, de forma muy sencilla, obtener código generado por inteligencia artificial. Sin embargo, en este momento no es mágico, y de cara a una creación de sofware efectiva y de calidad, es preciso aplicar ciertas pautas metodológicas y ciertas buenas prácticas procedentes muchas de ellas de la propia ingeniería de software tradicional o de la ingeniería de instrucciones ('prompt engineering')
No hay comentarios:
Publicar un comentario