La matriz condicional de imprecisiones para una red neuronal y un conjunto de prueba de 500 programas con una longitud de 3 líneas. Cada celda contiene la probabilidad promedio de un resultado falso positivo (en letra grande) y el número de programas de prueba de los cuales se deriva este valor (en letra pequeña, entre paréntesis). La saturación de color se correlaciona con la probabilidad de un falso positivoLos programadores pronto tendrán un buen ayudante: una red neuronal inteligente que puede realizar tareas de rutina. Además, con la ayuda de dicha red neuronal, las personas pueden crear programas sin siquiera saber la sintaxis de un idioma en particular y sin poder programar. Es necesario componer un algoritmo y establecer tareas, y la red neuronal escribirá código para resolverlas.
Como resultado, todo el trabajo será mucho más productivo: "La gente podrá crear sistemas que antes eran imposibles de crear", dijo un experto independiente
Armando Solar-Lezama del Instituto de Tecnología de Massachusetts, en un
comentario para
New Scientist .
Investigadores de Microsoft y la Universidad de Cambridge han desarrollado un sistema llamado
DeepCoder , que ahora resuelve correctamente problemas simples de las competencias de programación escolar. DeepCoder utiliza una técnica llamada Síntesis del Programa Inductivo, que muchos desarrolladores conocen. Toma líneas de código de otros programas y crea su propio programa único. Es importante tener en cuenta que DeepCoder, como otros sistemas de síntesis de software, utiliza un lenguaje de dominio específico (DSL) que está especializado para una aplicación específica. Se le puede llamar un "mini-lenguaje" o "lenguaje de programación truncado". Contiene solo nueve funciones de primer orden:
CABEZA, ÚLTIMO, TOMAR, BAJAR, ACCESO, MÍNIMO, MÁXIMO, REVERSO, CLASIFICAR, SUMA
y cinco funciones de orden superior:
MAPA, FILTRO, CONTAR, ZIPWITH, SCANL1
El alcance de un lenguaje específico de dominio es limitado en relación con los lenguajes de programación de propósito general.
La elección de las líneas para compilar el programa se lleva a cabo después del análisis de los valores de entrada y salida de cada fragmento de código. En el trabajo científico, puede estudiar nueve ejemplos de programas de 5 líneas escritos por la red neuronal DeepCoder. Por ejemplo, aquí hay una solución al problema de los dulces (a la izquierda) con una descripción de texto (a la derecha) y valores de entrada (en el centro):

Al buscar líneas de código adecuadas, DeepCoder supera al hombre: es capaz de indexar y analizar mucho más código fuente del que es capaz el hombre. El sistema de aprendizaje automático aprende a comprender cómo usar estos patrones, y de antemano forma la base. Además, la red neuronal conectará las líneas encontradas de una manera que nunca ocurre conectarlas a una persona viva. A través de prueba y error, la red neuronal está aprendiendo gradualmente a lograr su objetivo. Esta implementación de síntesis de software en el sistema DeepCoder se llama Síntesis de Programa Inductivo de Aprendizaje (LIPS).
Representación esquemática de un codificador de acoplamiento directo y un decodificador DeepCoderLa siguiente ilustración muestra cómo la red neuronal DeepCoder predice la probabilidad de que cada función aparezca en el código fuente.

Todas estas ventajas permiten que DeepCoder escriba programas mucho más rápido que sus predecesores. Ella escribe un programa de tres líneas en una fracción de segundo, mientras que los sistemas anteriores necesitaban varias veces o decenas de veces más tiempo para probar todas las opciones posibles. Por ejemplo, la tabla muestra la velocidad de generar programas a partir de tres líneas de código con varias tareas.

Los programas de cinco líneas de código se generan un orden de magnitud más lento. El gráfico de la derecha muestra la dependencia de la velocidad con la duración del programa.

A medida que aprende, el sistema comprende qué combinaciones de códigos funcionan y cuáles no. Ella está mejorando en la programación con cada nueva tarea.
La tecnología puede utilizarse potencialmente para refactorizar y buscar errores en los programas. Ella encontrará las líneas incorrectas y las reemplazará con las líneas correctas de otros programas. Los autores creen que con su ayuda es fácil crear programas de rutina al estilo del famoso
IFTTT , para automatizar las interacciones básicas entre los diferentes servicios web. Incluso un no programador puede hacer instrucciones simples como seleccionar fotos de Facebook y ordenarlas de acuerdo con criterios específicos. Tales programas simples se pueden crear en minutos sin conocimientos de programación.
Por supuesto, tales herramientas aún no pueden reemplazar a un programador real. Se consideran solo como una herramienta auxiliar. Los propios desarrolladores de DeepCoder serán muy útiles en el futuro: se aliviará de la carga de las operaciones de rutina y le permitirá concentrarse en tareas más complejas e importantes.
Actualmente, DeepCoder puede resolver problemas de programación, trabajando con aproximadamente cinco líneas de código. Por supuesto, en lenguajes de programación avanzados, cinco líneas de código le permiten escribir un programa muy útil, pero aún es bastante simple, cosas básicas. Los expertos creen que es imposible generar un programa complejo con una gran cantidad de código utilizando la síntesis de software. Por otro lado, con ayuda humana esto es posible. Después de todo, los programas grandes consisten en una gran cantidad de pequeños fragmentos.
Al menos en los próximos años, la mayoría de los programadores no enfrentan una pérdida de trabajo debido a la automatización de la codificación. Pero los métodos de aprendizaje automático están mejorando muy rápidamente. Es sorprendente cuánto se ha hecho en esta área últimamente.