Escribir software implica atender de forma simultánea a decenas de preocupaciones que rara vez encajan en una sola línea de código: corrección, eficiencia, depuración, mantenibilidad, pruebas, registro, seguridad, extensibilidad, privacidad, gestión de dependencias, despliegue, observabilidad, persistencia, validación de entrada, tratamiento de errores, internacionalización y accesibilidad. Esa lista, sin incluir tareas como la estimación de plazos, ilustra la complejidad real del trabajo de programación.
La programación orientada a aspectos (AOP), impulsada por Gregor Kiczales y otros en Xerox Parc a mediados de los años noventa, propuso abordar cada preocupación por separado. La idea gustó a la comunidad, pero su mecanismo clásico, el modelo de puntos de unión, quedó asociado al patrón COME FROM, célebre como broma pero también difícil de depurar y mantener. Herramientas como AspectJ ofrecían tejido en tiempo de compilación, pero generaban código difícil de leer.
Los modelos de lenguaje grandes (LLM) permiten reimaginar la AOP: en lugar de un join point model frágil, cada preocupación se describe en un documento independiente y el LLM actúa como tejedor, generando código estático y legible. Los documentos pueden reutilizarse entre proyectos, por ejemplo, una guía de estilo corporativa para mantenibilidad. Frente al AOP clásico, el LLM recurre a su conocimiento general sobre qué significa abrir un archivo, en vez de emparejar nombres concretos de funciones, y admite incluso agentes separados que revisen el código desde el ángulo de cada preocupación.
