Encontrar errores en el código resulta una labor cada vez más complicada para los humanos, por lo que algunos expertos pretenden que las máquinas se programen solas. Un nuevo sistema utiliza aprendizaje automático para ofrecer formas de escribir código más eficientes y proporcionando correcciones
Programar nunca ha sido fácil. Los primeros programadores escribían los programas a mano, garabateando símbolos en hojas de cuadrícula antes de convertirlos en grandes pilas de tarjetas perforadas que podían ser procesadas por el ordenador. Si había una marca fuera de lugar, todo tenía que rehacerse.
Hoy en día, los programadores utilizan una serie de herramientas potentes que automatizan gran parte del trabajo, desde detectar errores mientras escriben a probar el código antes de implementarlo. Pero en otros sentidos, poco ha cambiado. Un error insignificante aún puede bloquear una pieza completa de software. Y a medida que los sistemas se vuelven cada vez más complejos, encontrar estos errores resulta cada vez más difícil. "A veces los equipos de programadores pueden tardar días en corregir un solo error", asegura el director del grupo de investigación de programación de máquinas de Intel, Justin Gottschlich.
Es por eso que algunas personas creen que se debería intentar que las máquinas se programen solas. La generación automatizada de código ha sido un tema de investigación candente durante varios años. Microsoft está incorporando la generación de código básico en sus herramientas de desarrollo de software utilizadas ampliamente, Facebook ha creado un sistema llamado Aroma que autocompleta pequeños programas, y DeepMind ha desarrollado una red neuronal que puede generar versiones más eficientes de algoritmos simples que las creadas por humanos. Incluso el modelo de lenguaje GPT-3 de OpenAI puede producir piezas sencillas de código, como diseños de páginas web, a partir de indicaciones en lenguaje natural.
Gottschlich y sus colegas lo han denominado machine programming (programación de máquina). Trabajando con su equipo en Intel, MIT y el Instituto Tecnológico de Georgia en Atlanta (EE. UU.), ha desarrollado un sistema llamado Machine Inferred Code Similarity (MISM) que puede extraer el significado de una pieza de código (lo que el código le dice al ordenador que debe hacer), de la misma manera que los sistemas de procesamiento de lenguaje natural (PLN) pueden leer un párrafo escrito en inglés.
MISIM puede sugerir otras formas de escribir el código, ofreciendo correcciones y maneras de llevarlo a cabo más rápido o más eficiente. La capacidad de la herramienta para comprender lo que intenta realizar un programa le permite identificar otros programas que realizan tareas similares. En teoría, este enfoque podría ser utilizado por máquinas para escribir su propio software basándose en un modelo de programas preexistentes con mínima supervisión humana o información de entrada.
MISIM funciona comparando fragmentos de código con millones de otros programas que ya ha visto, tomados de una gran cantidad de registros online. Primero, traduce el código de un modo que captura lo que hace, pero ignora cómo está escrito, porque dos programas escritos de maneras muy diferentes a veces hacen lo mismo. MISIM después usa una red neuronal para encontrar otro código que tenga un significado similar. En una publicación en preprint, Gottschlich y sus colegas afirman que MISIM es 40 veces más preciso que los sistemas anteriores que intentan realizar esa tarea, incluido Aroma.
MISIM es un fascinante paso adelante según el CTO de la compañía suiza DeepCode, Veselin Raychev, cuyas herramientas para detectar errores, que figuran entre las más avanzadas, utilizan redes neuronales entrenadas con millones de programas para sugerir mejoras a los programadores mientras escriben.
Pero el aprendizaje automático aún no es bueno en predecir si algo es un error, opina Raychev. Esto se debe a que resulta difícil enseñar a una red neuronal qué es o no es un error, a menos que un humano lo haya etiquetado como tal.
Se están realizando muchas investigaciones interesantes con redes neuronales profundas sobre la corrección de errores, "pero prácticamente no han llegado todavía a conseguirlo por un margen muy grande, y les falta bastante". En general, las herramientas de detección de errores de inteligencia artificial (IA) producen muchos falsos positivos, añade.
MISIM lo evita usando el aprendizaje automático para detectar similitudes entre programas en lugar de identificar directamente errores. Al comparar un nuevo programa con un software existente que se sabe qué es correcto, puede alertar al programador sobre las importantes diferencias que podrían ser errores.
Intel planea usar esta herramienta como un sistema de recomendación de código para los desarrolladores internos, sugiriendo alternativas más rápidas o más eficientes de escribir código. Pero como MISIM no está vinculado a la sintaxis de un programa específico, hay mucho más que podría hacer. Por ejemplo, se podría usar para traducir el código escrito en un lenguaje antiguo como COBOL a un lenguaje más moderno como Python. Esto es importante porque muchas instituciones, incluido el Gobierno de EE. UU., todavía dependen del software escrito en lenguajes que pocos programadores saben mantener o actualizar.
Finalmente, Gottschlich cree que esta idea también podría aplicarse al lenguaje natural. En combinación con PLN, la capacidad de trabajar con el significado del código de forma separada a su representación textual podría algún día permitir que las personas escriban software solo describiendo lo que quieren hacer en palabras, explica.
"Desarrollar pequeñas aplicaciones para el teléfono o cosas por el estilo que nos ayudarán en la vida diaria creo que no están muy lejos", concluye Gottschlich. "Me gustaría ver a 8.000 millones de personas programar software de la forma más natural para cada una".