La generación de código con LLM puede llevar a una pérdida de confianza
(jaysthoughts.com)- Recientemente, la generación de código basada en LLM se está usando cada vez más entre los desarrolladores
- El código generado automáticamente está aumentando la preocupación por la calidad y confiabilidad del código
- Los desarrolladores experimentan un aumento en la dificultad de mantenimiento de los proyectos debido a la falta de comprensión del código y a verificaciones insuficientes
- La expansión del uso de código no confiable afecta a todo el ecosistema de software
- Se enfatiza la necesidad de preparar medidas para asegurar la confiabilidad junto con el avance tecnológico
Resumen
Jay aborda en su blog el impacto que la reciente tecnología de generación de código basada en LLM (modelos de lenguaje de gran tamaño) está teniendo en el desarrollo de software. Aunque el avance de estas herramientas mejora la eficiencia del desarrollo, al mismo tiempo están surgiendo problemas de confiabilidad y calidad del código.
El auge de la generación de código con LLM
- En el entorno de desarrollo se están expandiendo rápidamente las herramientas de generación automática de código que utilizan LLM
- Ofrecen alta productividad en la implementación de funciones complejas o en tareas de codificación repetitivas
- Tienen la ventaja de permitir la creación rápida de prototipos y de reducir la carga de aprender nuevos lenguajes
Problemas de confiabilidad
- Se presentan casos en los que el código generado por LLM no siempre funciona como se pretende
- La intención interna y la lógica de diseño del código no quedan claras, lo que dificulta el proceso de comprensión y verificación
- Si el proceso de revisión y pruebas es insuficiente, existe la posibilidad de que aparezcan bugs o vulnerabilidades inesperadas
Mantenimiento de proyectos e impacto en el ecosistema
- Surgen problemas de falta de documentación y explicaciones insuficientes sobre el código generado automáticamente
- A los desarrolladores les cuesta entender cómo funciona el código, lo que incrementa la complejidad del mantenimiento
- Existe el riesgo de que se deteriore una cultura de desarrollo de software confiable
Conclusión y propuestas
- La tecnología de generación de código basada en LLM es innovadora, pero asegurar la confiabilidad es una tarea esencial
- Al adoptar código generado automáticamente, se enfatiza la necesidad de reforzar la verificación y realizar revisiones de código sistemáticas
- A largo plazo, es importante establecer estándares para proteger la confianza en el ecosistema informático
1 comentarios
Opiniones de Hacker News
Comparten un enlace de archive.is, funciona incluso en navegadores antiguos y JavaScript solo hace falta para evadir CloudSnare
Un amigo mío siempre decía: "la innovación ocurre a la velocidad de la confianza". Desde la aparición de GPT-3, esa frase no deja de darme vueltas en la cabeza. Verificar tiene un costo alto, y la confianza es una de las principales formas de bajar ese costo. Pero no sé cómo construir confianza con los LLM. Son increíblemente fluidos tanto para programar como para lenguaje natural, pero al mismo tiempo se desvían en direcciones que, si lo hiciera una persona, se verían como algo malintencionado
En el trabajo viví este tema de una forma inesperada. Un compañero y yo, bajo presión por resultados rápidos, fusionamos un gran refactor que yo había hecho, aunque todavía estaba como PR temporal. Después aparecieron bugs en código no probado. Mientras depurábamos, mi compañero me confesó que pensó que yo había programado eso con IA y que se frustró tratando de entender a posteriori un código que creía generado por IA. Pero ese código lo había escrito yo mismo con cuidado, a mano, y los bugs venían de pequeños errores durante un simple cambio de API. Más bien, esa experiencia nos permitió sacar de forma natural una tensión de confianza entre nosotros y hablarla de manera constructiva. Viéndolo ahora, fue una experiencia significativa de construcción de confianza, y siento que en otro entorno podría haberse enredado muchísimo más. Da la sensación de que siempre hay que andar con cuidado
No termino de entender la premisa. La confianza en que alguien escribe buen código viene de la experiencia real de que esa persona programó directamente y el resultado fue bueno. Si usa un LLM y igual entrega código sin bugs, confío; si usa un LLM y mete bugs, no confío. No veo en qué sería distinto de escribirlo solo con la cabeza
Ya vivimos en esa época. Veo demasiadas veces frases como "perdón por pasar por alto ese punto, tienes razón". Las veo 8 o 9 veces de cada 10. En cambio, también veo seguido gente que copia y pega sin sentido código generado por LLM y luego se enoja porque no cumple expectativas. De hecho eso me parece mejor. Prefiero algo claramente roto a algo que por fuera parece correcto
Las herramientas de abstracción anteriores reducían complejidad, pero al mismo tiempo daban por sentada la "corrección" de esa abstracción. Claro, no eran perfectas y tenían bugs, pero esos eran problemas de implementación, no fallas esenciales. Una vez corregidos, tendían a volverse más sólidos. En cambio, los LLM son motores de predicción probabilística que solo muestran una precisión aproximada durante cierto tiempo. Lo que el autor pasa por alto aquí es que sí se pueden construir sistemas deterministas confiables a partir de agentes probabilísticos imperfectos. Por ejemplo, no confías en una herramienta de garbage collection porque le tengas fe a su autor, sino porque la herramienta en sí ha sido suficientemente probada y se ha demostrado que hace lo que debe. En el futuro, parece probable que el desarrollo guiado por pruebas se vuelva más fuerte. No es confianza, es verificación
El rechazo a los LLM no sirve de nada. Hoy los LLM aumentan la productividad de los desarrolladores. Al menos son todavía más útiles para quienes tienen menos experiencia. Una herramienta que sube tanto la productividad no va a ser abandonada por más que alguien se oponga. Aunque aparezcan casos de daño —por ejemplo, grandes servicios caídos durante mucho tiempo por bugs graves—, si la productividad pesa más, la tecnología no se va a detener. La única salida realista es avanzar junto con la tecnología resolviendo o mitigando esas debilidades. En ese proceso, si una medida de mitigación afecta demasiado la productividad, la gente la va a rodear; terminarán imponiéndose complementos que convivan bien con la tecnología
Más que políticas como "prometo que el código aportado no viene de un LLM, es original y lo entiendo por completo" o exigir que casi todo sea manual, habría que enfocarse en el resultado. Está bien pedir que quien contribuye entienda bien los cambios. Pero políticas tipo "los juniors deben evitar o tienen prohibido usar herramientas LLM por cierto tiempo" no me convencen. Los LLM ayudan muchísimo con el caos del setup de onboarding. Además sirven para entender código y documentación, y también como herramientas útiles de búsqueda y resumen de texto
Nunca había escuchado el concepto de "AI Cliff" (cuando la precisión del LLM cae de golpe). Me da curiosidad si otras personas también lo han vivido
El autor del post dice que no va a resumir lo que escriben varias personas, pero en la práctica parece que sí lo hace. Aun así, me gustaría que en un PR se marcaran los archivos que incluyen código generado por IA. Los errores del código LLM y los del código humano son distintos, así que poder distinguirlos ahorraría tiempo en la revisión. Me pregunto si alguien ha vivido una política así en una organización grande o si ya existen herramientas automáticas para eso. Si las empresas están midiendo la proporción de código generado por LLM, quizá ya exista una herramienta así para métricas más detalladas