La Inteligencia Artificial, cada vez que logra un nuevo éxito, nos muestra nuestros prejuicios acerca de lo que llamamos ser inteligente. Ha salido ahora un programa que aprende, que ha obtenido la capacidad de escribir su propio código. Creado por los investigares de Microsoft y la Universidad de Cambridge, el sistema DeepCoder puede resolver retos básicos del tipo que se ponen en las competencias de programación. Este tipo de enfoque podría hacer que mucha gente viese lo fácil que puede ser construir programas sin conocer siquiera cómo escribir código.
«De pronto todas las personas podrían ser más productivas», dice Armando Solar-Lezama en el MIT (Massachusetts Institute of Technology), que no está involucrado en este trabajo. «Podrían construir sistemas que sería imposible construir antes. En última instancia, este enfoque permitiría a los que no saben escribir código a simplemente describir una idea para un programa y hacer que el software lo escribiese por él», dice Marc Brockschmidt, uno de los creadores de DeepCoder, en Microsoft Research, con sede en el Reino Unido.
Esta idea tiene muchos años. En 1981 salió para la Apple II un programa llamado The Last One, hecho por la compañía D.J. El sistema tomaba ciertas entradas que el usuario daba y generaba un programa ejecutable en el lenguaje BASIC. Esto era muy simplista en su momento y el software hace muchos años que se volvió obsoleto, pero claramente se buscaba hacer lo que ahora han logrado los investigadores de Microsoft y la Universidad de Cambridge.
DeepCoder usa una técnica llamada «síntesis de programa», que crea nuevos programas colocando juntas líneas de código que vienen de software existente, como un programador podría hacer. Dada una lista de entradas y salidas para cada fragmento de código, DeepCoder aprendió qué pedazos del código se necesitan para lograr el resultado final en promedio.
Una ventaja de permitir que la Inteligencia Artificial haga esto es que nos permite buscar más opciones que las que muchas veces los programadores usan, de manera que un programa podría construirse de maneras que los seres humanos quizás no hubiesen imaginado. Lo que es más, DeepCoder usa aprendizaje de máquina para analizar las bases de datos de código fuente y ordenar los fragmentos de acuerdo a lo que es más útil probablemente.
Todo esto hace que el sistema sea más rápido que cualquiera de los programas anteriores que buscaban algo similar. DeepCoder crea programas funcionales en fracciones de segundo, mientras que los anteriores prototipos podían tomar minutos para intentar diferentes combinaciones de líneas de código antes de poder pegarlas y tener un sistema que hiciese la tarea encomendada. Y como DeepCoder aprende de cómo ciertas combinaciones de pedazos de código pueden unirse, mejora cada vez que trata de resolver un nuevo problema.
Esta tecnología podría tener muchas aplicaciones. En el 2015 los investigadores del MIT crearon un programa que corregía automáticamente los errores (bugs) reemplazando líneas equivocadas de código con línea de código funcionales de otros programas. Brocksmichdt dice que las versiones futuras podrían hacer mucho más fácil construir programas y rutinas tomadas de diferentes fuentes como sitios web, o bien, categorizar las fotos de Facebook por ejemplo, sin tener a un programador humano que levantara un dedo para hacer esta tarea.
«El potencial para la automatización de este tipo de tecnología podría realmente significar una reducción enorme en la cantidad de esfuerzo que se toma para desarrollar código», indica Solar-Lezama.
Desde luego que de inmediato se piensa que este tipo de sistemas dejarán sin trabajo a los programadores, pero esto no necesariamente es cierto. Con la síntesis de programas se podrán automatizar algunas de las partes más tediosas de los programas, por lo que los programadores podrán usar su tiempo a hacer trabajo más sofisticado.
Por el momento DeepCoder solamente es capaz de resolver retos que involucran unas cinco líneas de código, pero en el lenguaje de programación correcto, un par de líneas es lo que se necesita muchas veces para generar código complejo. «Genera una gran pieza de código de un solo golpe es algo duro y potencialmente fuera de la realidad», dice Solar-Lezana. «Pero realmente grandes piezas de software se construyen juntando muchas pequeñas piezas de código», concluye.
Referencias: New Scientist