
Introducción
Recientemente me aventuré a comenzar con el desarrollo de un proyecto propio, de esos que muchas veces quedan en el baúl de las ideas. Sin embargo, en esta ocasión, decidí embarcarme en el desarrollo de una infraestructura web algo sencilla pero con gran peso detrás. La idea no es nueva, de hecho lo tomé de un proyecto que se desarrolló hace algunos años, durante los últimos semestres de la carrera. Si bien el resultado final fue interesante, la inexperiencia y falta de conocimientos en muchas áreas hizo que el camino fuera tortuoso. Finalmente el proyecto llegó a manos del cliente, quien lo recibió y lo usó para su emprendimiento.
Hace algunas semanas, mientras escribía algún artículo para este mismo blog, me surgió la curiosidad de saber cuánto tiempo tomaría desarrollar el mismo proyecto desde cero. Me senté frente a la computadora y comencé a planificar lo que sería el desarrollo de la infraestructura web. No se trata sólo de tomar el proyecto y copiarlo, sino de analizar cómo desarrolla un proyecto el yo de hoy, contra aquel yo de hace algunos años. Qué cosas haría diferente, qué tecnologías usaría, qué patrones de diseño implementaría.
La diferencia más grande es que hoy día tenemos la dichosa Inteligencia Artificial, la cual nos puede ayudar en muchas tareas del desarrollo de software. Entonces, comencé a realizar todo tipo de preguntas sobre el proyecto, para ver qué sugerencias me daba la IA. Fue un proceso realmente interesante, ya que me di cuenta de muchas cosas que podría hacer diferente y mejor.
Tomé la experiencia profesional que tengo como desarrollador de software, las tendencias del mercado, los videos de Youtubers que hablan sobre IA y desarrollo de software, y por supuesto, la experiencia que tuve desarrollando el proyecto en el pasado. Me decidí por un stack tecnológico potente, y una metodología de desarrollo de la cual se está hablando mucho últimamente, y que además se lleva muy bien con la IA, incluso tengo un artículo hablando sobre ello, puedes verlo a continuación.
Directo al grano, unos días después, teniendo ya un avance considerable en el proyecto, me encontré pensando en lo siguiente: La IA es un multiplicador de velocidad, pero si no sabes qué estás multiplicando, solo estás acelerando el desastre. Si te estás preguntando por qué, veamos los problemas que te puede generar la IA en el desarrollo de software:
Desventajas del desarrollo con IA
1. Los Síntomas del “Código Zombi”
Por mucho que crees documentación dentro de tu directorio del proyecto, la IA no tiene la capacidad de entender el contexto completo de tu proyecto. Por lo tanto, es muy probable que generes código que no se integre correctamente con el resto del proyecto, o que requiera modificaciones significativas para funcionar correctamente. Entre los problemas de código zombi podemos encontrar los siguientes:
Inconsistencia visual:
Botones que se ven diferentes entre sí, estilos que no coinciden, tipografías que no coinciden, etc. Esto se debe a que la IA no tiene la capacidad de entender el contexto completo de tu proyecto. Google lo sabe, incluso ha publicado el design.md, chécalo en los enlaces que te dejaré abajo.
Código verboso:
En el mejor de los casos, la IA generará código que sea correcto, pero que no sea óptimo. En el peor de los casos, generará código que no sea correcto y que requiera modificaciones significativas para funcionar correctamente. Por lo tanto, es muy importante que tengas conocimientos de programación para poder detectar estos problemas y corregirlos. Además, un método que sin lugar a dudas se puede realizar en menos de diez líneas de código, la IA lo puede transformar en una función compleja de más de cien líneas de código, cuando en realidad es algo muy simple.
Dependencias fantasma:
Algunos modelos han mejorado bastante en muchos sentidos, pero eso no los hace infalibles, de hecho, me llegó a pasar en varias ocasiones que la IA intenta importar librerías que ni tienes instaladas. No solo eso, a veces trabaja sobre librerías desactualizadas, métodos deprecados, etc. Puede llegar a ser frustrante solventar estos problemas, sobre todo si no tienes conocimientos de programación.
2. La Anatomía del Frankenstein (El Problema Técnico)
Falta de contexto global
Como se mencionó anteriormente, la IA no siempre tiene el contexto completo del proyecto, ve el proyecto por el “ojal de una cerradura” (el prompt actual) y pierde la visión de la arquitectura completa. Esto no siempre es un problema, ya que muchas veces el prompt es suficiente para que la IA genere el código correcto. Sin embargo, para tareas donde el prompt deja muchos puntos ambiguos, las decisiones que tome la IA pueden ser cuestionables.
La deuda técnica instantánea
Tu proyecto puede nacer ya “muerto” si desde el principio se tienen deudas técnicas. Una deuda técnica no es más que “atajos” que se toman durante el desarrollo para avanzar más rápido, pero que en el futuro traerán problemas. Un ejemplo de deuda técnica es un método que en un principio es funcional, pero que no está optimizado o bien, no sigue estándares de codificación o buenas prácticas. Si desde que comienzas a tirar prompts, vas revisando los resultados, y al ver que “funciona” te pasas al siguiente desarrollo, sin revisar, depurar y optimizar lo anterior, entonces tu proyecto nacerá con deudas técnicas, las cuales pasarán a convertirse en una pesadilla cuando tu proyecto comience a crecer y necesites escalar. No es exageración, y no solo se trata de ver el código “bonito”, aquí entran cuestiones como el performance de tu aplicación, la seguridad, la escalabilidad, etc. Cosas que pueden vulnerar la integridad de tu aplicación y, por ende, la de tu cliente y/o usuarios.
Guía de supervivencia: cómo SÍ trabajar con IA
Para comenzar esta guía de supervivencia, es necesario aclarar que la IA no es un sustituto del programador, sino más bien un asistente o copiloto que puede ayudar en muchas tareas del desarrollo de software, siempre y cuando el programador tenga los conocimientos necesarios para guiarlo. El secreto está en saber qué pedirle, cómo pedírselo y cómo revisar los resultados.
Arquitectura primero, prompts después
Antes de siquiera pensar en pedirle a la IA que genere código, es fundamental tener una arquitectura clara y bien definida. Piensa en la arquitectura como el esqueleto de tu proyecto, si el esqueleto es débil, todo lo que construyas sobre él será débil. Allá afuera existen muchos estándares arquitectónicos del desarrollo de software, no te molestes en buscar “cuál es peor o mejor”, si existen es por algo, cada proyecto, cada necesidad, se adapta mejor a una arquitectura que a otra. Desarrollar no es sinónimo de programar, programar es aventar líneas de código (esto lo hace mucho la IA últimamente), desarrollar es analizar, planificar, diseñar, estructurar, depurar y optimizar. Básicamente, desarrollar es todo un proceso complejo, y la IA solo es una herramienta que puede ayudar en algunas tareas del desarrollo de software.
La regla del Scout:
Deja el código más limpio de como lo encontraste (o como la IA te lo entregó)
Esencialmente, esta regla consiste en dejar el código en mejores condiciones de como lo encontraste. Si ves una función que no está optimizada, optimízala. Si ves una función que no está documentada, documéntala. Si ves una función que no está probada, pruébala. En resumen, si ves código que se puede mejorar, mejóralo.
Revisiones iterativas
No confíes ciegamente en la IA. Siempre revisa el código que genera la IA antes de usarlo. A veces puedes ir al resultado y ver que lo que le pediste funciona, sí, pero bajo el capó se pueden esconder más problemas que soluciones. Un buen prompt te dejará un resultado bueno, pero aún así, siempre tendrás que revisarlo antes de proceder a aventarle otro prompt a tu agente.
Conclusión
Como pudiste ver, la IA tiene muchas ventajas y desventajas en el desarrollo de software. La clave está en saber cómo usarla a nuestro favor, y no dejar que ella nos use a nosotros. Recuerda, la IA es una herramienta, no un sustituto del programador. Espero que esta guía de supervivencia te haya sido de utilidad. En cuanto al proyecto que comencé, no, no lo voy a abandonar, todo lo contrario, el MCP desarrollado servirá como una base para el desarrollo completo, estructurado, bien planificado, documentado, probado y optimizado.
Enlaces de interés
Checa este recurso oficial de Google, donde hablan sobre el Design.MD, el estándar que puedes usar para especificar el diseño de tu proyecto.
Revísalo ahora, agradece después: Refactoring Guru
Lee más sobre las arquitecturas limpias de código en este interesantísimo artículo, créditos al autor: