
El código generado por IA siempre es código heredado
El mantenimiento y evolución del software son más eficientes cuando el código es reciente y su creador original está involucrado. De hecho, la probabilidad de mejoras profundas disminuye drásticamente cuando el código es antiguo o fue escrito por otros. Este podría ser el caso del código generado por IA.
Comencemos desde el principio: hay cuatro actitudes típicas según la antigüedad y autoría del código:
- Código propio nuevo: Se considera viable y prioritario refactorizar. La mayoría de los programadores estarán dispuestos a cambiarlo.
- Código nuevo ajeno: Se asume un contexto temporal para su diseño; la refactorización es posible pero no prioritaria.
- Código antiguo propio: Se reconoce que podría mejorarse, pero solo se prioriza si es necesario.
- Código antiguo ajeno: Se cuestiona su diseño; solo se revisa si causa problemas activos.
Esta inercia es eficiente, evita el desperdicio de mejorar código antiguo funcional cuyo contexto y riesgos de cambio se comprenden menos, especialmente ya no está el creador original. Como reza el dicho, “si no está roto, no lo arregles”.
Pero, ¿qué pasa cuando el código debe cambiarse?
Para los programadores esta historia es tan vieja como la industria del software misma. Ya hemos visto muchos métodos que solucionan algunos de estos problemas como, por ejemplo, una documentación detallada. Sin embargo, los requerimiento cambiantes y los componentes en constante evolución (blanco móvil), hacen que las metodologías de desarrollo adhieran a los principios del Manifiesto Ágil y prioricen el código por encima de la documentación.
Y aquí es donde entra en escena la generación de código por IA.
- El código de IA nace envejecido: Carece del beneficio del código nuevo y no tiene un programador humano que lo tenga en mente para hacer el mantenimiento. Es código heredado desde el día uno.
- La IA no tiene estado (stateless): Aunque puede inferir razonamientos, no accede al contexto mental puntual del desarrollador humano. Cada iteración es como si otra persona lo reescribiera desde cero, sin memoria del proceso de creación previo.
Cabe destacar que este planteo fue abordado hace mucho tiempo por un ensayo clásico de Peter Naur de 1985 denominado "Programming as Theory Building". El argumento de Naur es que el software complejo comparte constructos cognitivos que viven en la mente de sus desarrolladores. En este sentido, el código fuente y su documentación serían representaciones degradadas (lossy) de las abstracciones mentales complejas.
En rigor, el código heredado sería el código del que aún se conservan los artefactos (código fuente y documentación), pero se ha perdido la teoría, porque los creadores originales han abandonado el equipo. Es decir, se han perdido los razonamientos que dieron lugar al código en primer lugar. De hecho, Naur ofrece algunos ejemplos ilustrativos de esto en su ensayo.
Por esta razón, algunos desarrolladores sospechan que quizás los LLM cuenten con algo similar a una teoría implícita del código. Algo así como buenas prácticas configuradas como patrones que resultan tanto en un código como en sus fundamentos de base.
En cualquier caso, aunque este fuera en caso, cabe preguntarse si un programador ajeno al código puede comprender dichos constructos mentales subyacentes solo con ver el código. Es decir, ¿puede un programador comprender el razonamiento y la sabiduría detrás de un código generado por IA?
Por ahora no tenemos evidencias para sustentar esta hipótesis.
Mientras tanto los ingenieros expertos en IA mitigan esta problemática con prompts elaborados, grandes ventanas de contexto y código bien documentado.
A no desesperar. Desde una mirada prospectiva este problema podría volverse irrelevante a largo plazo. La razón fundamental es la tendencia hacia software expresado en menos líneas de código, donde funcionalidades complejas dependen directamente de indicaciones procesadas por modelos de IA más inteligentes. El código generado actualmente sería solo un puente hacia ese paradigma.
Fuentes consultadas
AI code is legacy code from day one
Naur's "Programming as Theory Building" and LLMs replacing human programmers
Traducciones facilitadas por Deepl
Imágenes producidas por Reve AI y por Leonardo AI