Si usted se dedica a programar computadoras, sin importar el lenguaje que usa, probablemente tenga que dar un número enorme de detalles a su código para que este funcione. Si por ejemplo, usa una variable que omitió declarar, probablemente el compilador le avise que usted no declaró la variable en cuestión. La pregunta que alguna vez todos nos hemos hecho es: ¿Si el compilador ya entendió que el error es que no declaré una variable, por qué no la declara por mí y listo?
Pues bien, Armando Solar-Lezama, profesor asociado en el Departamento de Ingeniería Eléctrica y Ciencias de la Computación del MIT, ha trabajado en un lenguaje de programación llamado Sketch, que permite a los programadores simplemente omitir algunos de los detalles en su código. Sketch entonces automáticamente llena los detalles que faltan. Sketch de alguna manera busca hacer más fácil la vida a los desarrolladores de software, pero aún falta más poder en el desarrollo del sistema. Mientras tanto, este trabajo puede servir como base a otros proyectos y herramientas que exploten la mecánica de la “síntesis de un programa”, es decir, de la generación automática de programas.
Otros proyectos, también del Laboratorio de IA del MIT han logrado crear por ejemplo, un sistema para calificar las tareas de programación de los alumnos, o bien, un sistema que convierte los diagramas hechos a mano a código así como un sistema que produce consultas SQL de código escrito en Java.
En la Conferencia sobre Verificación, Modelos e Interpretación Abstracta, Solar-Lezama y un grupo de sus estudiantes graduados: Rohit Singh, Rishabh Singh y Zhilei Xu, junto con Rebecca Krosnick, describieron una nueva elaboración de Sketch que, en muchos casos, permite manejar tareas de síntesis complejas mucho más eficientemente. Los investigadores probaron una nueva versión de Sketch en muchas aplicaciones, incluyendo el sistema automático para calificar programas. En la versión anterior el sistema podía incluso no resolver nada mientras que en esta versión las correcciones se hicieron en milisegundos.
Sketch trata la síntesis de un programa como un problema de búsqueda y de hecho, mucho de lo que se hace en IA es simplemente un problema que se resuelve en un espacio de búsqueda. La idea es evaluar muchas variaciones del mismo problema básico y hallar el que satisface los criterios especificados por el programador. Si el programa evaluado es muy complejo, el espacio de búsqueda puede crecer demasiado y entonces no poder hallar la solución. Los investigadores encontraron una manera de bajar la complejidad en el espacio de búsqueda para hallar una respuesta satisfactoria.
Solar-Lezama concede que aún pasará mucho tiempo antes de que Sketch se vuelva útil a los desarrollos comerciales de software. Sin embargo, para probar qué tan útil puede resultar Sketch, el investigador ha reclutado estudiantes del MIT con un solo semestre de experiencia en programación para así probar el sistema. En todos los casos, dice, los estudiantes usaron con éxito Sketch para producir código que funcione. En muchos casos, el código que faltaba tomó demasiado tiempo para sintetizarlo debido a la manera en que el estudiante había descrito el problema.
“Se requiere de un nivel de expertez y entendimiento sobre la tecnología que está detrás de esto para no echar todo a perder”, dice Solar-Lezama. “Hasta donde queremos, la idea ambiciosa de deshacernos de C y usar Sketch, requiere aún de trabajar mucho en el sistema”.
Referencias: