
Codificar con modelos de lenguajes grandes (LLM) es muy prometedor, pero igualmente expone algunas fallas de larga data en el software: código confuso, difícil de cambiar de forma segura y, a menudo, opaco sobre lo que efectivamente sucede bajo el capó. Los investigadores del Laboratorio de Ciencias de la Computación e Inteligencia Fabricado (CSAIL) del MIT están trazando un camino más “modular” a seguir.
Su nuevo enfoque divide los sistemas en “conceptos”, partes separadas de un sistema, cada una diseñada para hacer proporcionadamente un trabajo, y “sincronizaciones”, reglas explícitas que describen exactamente cómo encajan esas piezas. El resultado es un software más modular, transparente y más posible de entender. Un pequeño estilo específico de dominio (DSL) permite expresar sincronizaciones de forma simple, en una forma que los LLM pueden producir de forma confiable. En un estudio de caso del mundo efectivo, el equipo demostró cómo este método puede reunir características que de otro modo estarían dispersas en múltiples servicios.
El equipo, que incluye a Daniel Jackson, profesor de ingeniería eléctrica e informática (EECS) del MIT y director asociado de CSAIL, y Eagon Meng, estudiante de doctorado de EECS, afiliado de CSAIL y diseñador del nuevo DSL de sincronización, explora este enfoque en su artículo «Lo que ves es lo que hace: un patrón estructural para software inteligible«, que presentaron en la Conferencia Splash en Singapur en octubre. El desafío, explican, es que en la mayoría de los sistemas modernos, una sola característica nunca es completamente autónoma. Asociar un capullo «compartir» a una plataforma social como Instagram, por ejemplo, no reside en un solo servicio. Su funcionalidad se divide en código que maneja publicaciones, notificaciones, autenticación de usuarios y más. Todas estas piezas, a pesar de estar dispersas en el código, deben estar cuidadosamente alineadas, y cualquier cambio corre el aventura de mercadería secundarios no deseados en otros lugares.
Jackson pira a esto «fragmentación de funciones», un obstáculo central para la confiabilidad del software. «La forma en que construimos software hoy en día, la funcionalidad no está localizada. Quieres entender cómo funciona ‘compartir’, pero tienes que buscarlo en tres o cuatro lugares diferentes, y cuando lo encuentras, las conexiones están enterradas en código de bajo nivel», dice Jackson.
Los conceptos y las sincronizaciones están destinados a topar este problema. Un concepto agrupa una funcionalidad única y coherente, como compartir, dar me gusta o seguir, anejo con su estado y las acciones que puede realizar. Las sincronizaciones, por otro banda, describen a un nivel superior cómo interactúan esos conceptos. En superficie de escribir código de integración lioso de bajo nivel, los desarrolladores pueden usar un pequeño estilo específico de dominio para explicar estas conexiones directamente. En este DSL, las reglas son simples y claras: la bono de un concepto puede desencadenar otra, de modo que un cambio en un estado puede mantenerse sincronizado con otro.
«Piense en los conceptos como módulos que son completamente limpios e independientes. Las sincronizaciones actúan entonces como contratos: dicen exactamente cómo se supone que deben interactuar los conceptos. Eso es poderoso porque hace que el sistema sea más posible de entender para los humanos y más posible de producir correctamente para herramientas como los LLM», dice Jackson. «¿Por qué no podemos descubrir el código como un texto? Creemos que el software debe ser inteligible y escrito en términos de nuestra comprensión: nuestra esperanza es que los conceptos se correspondan con fenómenos familiares, y las sincronizaciones representen nuestra intuición sobre lo que sucede cuando se juntan», dice Meng.
Los beneficios van más allá de la claridad. Correcto a que las sincronizaciones son explícitas y declarativas, un LLM puede analizarlas, verificarlas y, por supuesto, generarlas. Esto abre la puerta a un avance de software más seguro y automatizado, donde los asistentes de IA pueden proponer nuevas funciones sin introducir mercadería secundarios ocultos.
En su estudio de caso, los investigadores asignaron funciones como dar me gusta, comentar y compartir a un solo concepto, como una construcción de microservicios, pero más modular. Sin este patrón, estas funciones se distribuían en muchos servicios, lo que dificultaba su posición y prueba. Utilizando el enfoque de conceptos y sincronizaciones, cada característica se volvió centralizada y inteligible, mientras que las sincronizaciones detallaban exactamente cómo interactuaban los conceptos.
El estudio igualmente mostró cómo las sincronizaciones pueden tener en cuenta preocupaciones comunes como el manejo de errores, el formato de respuesta o el almacenamiento persistente. En superficie de incorporar estos detalles en cada servicio, la sincronización puede manejarlos una vez, lo que garantiza la coherencia en todo el sistema.
Asimismo son posibles direcciones más avanzadas. Las sincronizaciones podrían coordinar sistemas distribuidos, surtir al mismo tiempo las réplicas en diferentes servidores o permitir que las bases de datos compartidas interactúen limpiamente. Debilitar la semántica de sincronización podría permitir una eventual coherencia y al mismo tiempo preservar la claridad a nivel arquitectónico.
Jackson ve potencial para un cambio cultural más amplio en el avance de software. Una idea es la creación de “catálogos de conceptos”, bibliotecas compartidas de conceptos proporcionadamente probados y de dominios específicos. Entonces, el avance de aplicaciones podría centrarse menos en unir código desde cero y más en clasificar los conceptos correctos y escribir las sincronizaciones entre ellos. «Los conceptos podrían convertirse en un nuevo tipo de estilo de programación de stop nivel, con sincronizaciones como programas escritos en ese estilo».
«Es una forma de hacer visibles las conexiones en el software», dice Jackson. «Hoy en día ocultamos esas conexiones en el código. Pero si puedes verlas explícitamente, puedes razonar sobre el software a un nivel mucho más stop. Aún tienes que disputar con la complejidad inherente de las características que interactúan. Pero ahora está a la pinta, no dispersa ni oscurecida».
«La creación de software para uso humano a partir de abstracciones de máquinas informáticas subyacentes ha cargado al mundo con software que con demasiada frecuencia es costoso, frustrante e incluso peligroso de entender y utilizar», dice el profesor asociado de la Universidad de Virginia Kevin Sullivan, que no participó en la investigación. «Los impactos (como en el cuidado de la lozanía) han sido devastadores. Meng y Jackson cambian el raya e insisten en construir software interactivo sobre abstracciones de la comprensión humana, a las que llaman ‘conceptos’. Combinan razonamiento matemática expresiva y estilo natural para especificar tales abstracciones con propósito, proporcionando una cojín para probar sus significados, componerlos en sistemas y refinarlos en programas aptos para el uso humano. Es una dirección nueva e importante en la teoría y la praxis del diseño de software que vale la pena observar”.
«Durante muchos primaveras ha quedado claro que necesitamos mejores formas de describir y especificar lo que queremos que haga el software», añade Thomas Ball, profesor honorario de la Universidad de Lancaster y profesorado afiliado de la Universidad de Washington, que siquiera participó en la investigación. «La capacidad de los LLM para producir código solo ha apéndice más azotaina al fuego de las especificaciones. El trabajo de Meng y Jackson en el diseño conceptual proporciona una forma prometedora de describir lo que queremos del software de forma modular. Sus conceptos y especificaciones son muy adecuados para combinarse con los LLM para alcanzar la intención del diseñador».
De cara al futuro, los investigadores esperan que su trabajo pueda influir en la forma en que tanto la industria como el mundo docente piensan sobre la construcción de software en la era de la IA. «Si queremos que el software sea más confiable, necesitamos formas de escribirlo que hagan que sus intenciones sean transparentes», dice Jackson. «Los conceptos y las sincronizaciones son un paso alrededor de ese objetivo».
Este trabajo fue financiado parcialmente por la Iniciativa de Aplicaciones de Enseñanza Instintivo (MLA) de CSAIL Alliances. En el momento de la financiación, la comité de la iniciativa estaba formada por British Telecom, Cisco y Ernst and Young.