La programación de máquinas, desarrollar software sin escribir una línea de código

Justin Gottschlich cree que se puede crear una sociedad donde todos puedan desarrollar software, pero ha dicho que las máquinas manejarán la parte de programación. Esto lo ha definido como la programación de máquinas, que permitirá que cualquiera pueda expresar su creatividad y desarrollar software propio sin escribir una sola línea de código.

El líder del equipo de Investigación de Programación de Máquinas (MPR de Intel), adscrito al Laboratorio de Investigación de Sistemas y Software, justamente ha comentado que el grupo de investigación recién formado se centra en esa promesa pionera de la programación de máquinas.

Dijo que se trata de una fusión de Aprendizaje Automático (Machine Learning, ML), métodos formales, lenguajes de programación, compiladores y sistemas informáticos.

Y es que el MPR de Intel utiliza formas de Aprendizaje Automático y otros métodos automáticos para desarrollar software capaz de crear su propio software, lo que se llama programación de máquinas; su objetivo fundamentalmente es automatizar el desarrollo y mantenimiento de software.

“Cuando se realice por completo, la programación de la máquina permitirá a todos expresar su creatividad y desarrollar su propio software sin escribir una sola línea de código”.

Gottschlich también ha señalado que el software está integrado en casi todo lo que hacen las personas en el panorama tecnológico actual, ya que controla muchos aspectos de los dispositivos móviles como computadoras portátiles, tabletas, teléfonos. Además, el software conecta a la gente a Internet e impulsa las redes sociales.

Otra particularidad del software es que virtualiza los centros de datos y hace que los hogares sean más inteligentes, pero su desarrollo y mantenimiento es un proceso lento y propenso a errores.

Escasez de programadores

Un problema central para Intel y otras compañías tecnológicas líderes, según Justin, es que se están quedando sin desarrolladores senior y eso representa una escasez que limita la cantidad de programación en todas las industrias.

De hecho, ha referido que code.org calcula que existen 500 mil vacantes de programación disponibles solo en los Estados Unidos, en comparación con una cosecha anual de 50 mil graduados en Ciencias de la Computación (CS).

En toda la Unión Europea al parecer se puede encontrar una escasez similar, ya que en el mercado de trabajos de programación, en el mejor de los casos, solo el 10% de las personas que ocupan esos trabajos tiene la capacitación en Informática para convertirse en desarrolladores avanzados de alto nivel.

“Con el hardware heterogéneo de hoy en día: CPU, GPU, FPGA, ASIC, chips neuromórficos y, pronto, cuánticos, será difícil, tal vez imposible, encontrar desarrolladores que puedan programar de manera correcta, eficiente y segura en todo ese hardware”.

Ante este panorama, ha insistido en que la programación de máquinas es una fusión de diferentes campos porque utiliza técnicas de programación automática, desde métodos precisos hasta probabilísticos. Dijo que también usa y aprende de todo lo que se ha construido en hardware y software hasta la fecha.

De acuerdo a Justin, los investigadores han incursionado en la programación de máquinas desde la década de 1950, sin embargo, ha indicado que hoy es diferente, pues se encuentran en un punto de inflexión con nuevos algoritmos de ML, hardware nuevo y mejorado, así como datos de programación ricos y densos.

“Estos son los tres ingredientes esenciales que creemos que permiten la programación de máquinas”.

Inclusive, un ejemplo ha sido la investigación reciente del algoritmo genético (GA) del equipo de Justin, que ilustra cómo la función de aptitud física de un algoritmo genético, una complicada heurística de ML desarrollada por programadores expertos, puede automatizarse. Él ha dicho que este trabajo probablemente no hubiera sido posible hace solo unos años.

A pesar de esto, tampoco ha podido negar que casi todo el software a gran escala actual (sistemas operativos, navegadores, plataformas de redes sociales) incluye errores de precisión, rendimiento o seguridad.

“Nuestro último artículo de NeurIPS ’19 proporciona evidencia temprana de que ciertos tipos de errores que históricamente han evadido, incluso, la detección de programadores expertos, pueden detectarse automáticamente con la programación de la máquina, lo que requiere cero intervención humana. El siguiente paso es corregirlos automáticamente”.

Eliminando líneas de código, no trabajos

El líder del equipo MPR de Intel ha señalado un ejemplo bien conocido de los beneficios de la programación de máquinas: Google Translate, un servicio que traduce automáticamente entre idiomas y que ha sido creado por ingenieros que codificaron manualmente alrededor de 500 mil líneas utilizando técnicas clásicas de programación.

Google, con el advenimiento de la programación de máquinas, reescribió su código usando parcialmente la programación diferenciable (una pequeña porción del pastel de programación de máquinas en general).

Esa reescritura ha disminuido la base del código de 500 mil a 500 líneas, una reducción de 1.000x. “No solo el tamaño del código se redujo en mil veces, la precisión del sistema realmente mejoró, es increíble”.

Ante esto, también ha dejado claro que la programación de la máquina no eliminará trabajos, sino que los creará, posiblemente en millones. Ha afirmado que los aspectos más serviles de la programación serán automatizados, cual es el objetivo.

“Nuestra visión del cielo azul es tan larga como para que puedas expresar tus ideas (como lo llamamos, intención) de alguna manera que la máquina pueda reconocer, ya sea lenguaje natural, diagramas visuales o gestos; la programación de la máquina crea un camino para que usted cree su propio software”.

Justin ha agregado que confiarán (en gran medida) en una comunidad de programadores y científicos para comenzar a construir estos sistemas avanzados de programación de máquinas, sobre todo en aquellos que pueden trabajar en plataformas, ML y técnicas formales, hardware heterogéneo y muchos lenguajes de programación: “los tres pilares de la programación de máquinas”.