¿Podrá un robot sustituir a un programador?

Robots programadores

¿Deben temer los programadores que un robot pueda llegar a hacer su trabajo? Lo peor quizá no sea que un robot haga el trabajo de una persona, sino el robot en sí.

Seguro que más de uno habéis visto alguna serie como Westworld o películas como Ex Machina, donde (seguramente con razón) los robots se acaban cargando a un ser humano, acabando así de un plumazo con la primera ley de la robótica.

En el campo que nos ocupa de la programación, para que un robot pueda reemplazar a un programador tendrá que demostrar inteligencia humana (y eso ya de por sí asusta un poco). Pero mientras eso ocurre, alguno de los hermanos pequeños de ese futuro robot (y que por ahora nos dan menos miedo) puede que nos ayude a hacer más fácil nuestro trabajo.

¿Qué es la automatización?

A día de hoy es fácil decir que la automatización reemplazará muchos trabajos en el futuro. Pero por ahora se trata de algo exclusivo de determinados sectores de la industria: fabricación de un producto, transformación de algunas materias primas, logística para la entrega con vehículos autodirigidos … En estos casos es fácil entender qué es la automatización. Tendremos a unos cuantos seres humanos a atender esas máquinas, o simplemente como objeto decorativo, pero son las máquinas las que harán la mayor parte del trabajo.

En el caso del desarrollo de software la cosa se complica. Tenemos un producto objetivo (punto B) representado por la aplicación que se ejecuta en un dispositivo (escritorio, móvil, dispositivo, lo que sea) … pero ¿cuál es el punto A?

Tenemos el código fuente. Un compilador lo procesa y lo transforma en código máquina, para que la propia máquina pueda entenderlo. Puede que no sea un robot con aspecto industrial, pero sin duda es una máquina que transforma un mensaje de A a B. A medida que nuestras lenguas se vuelven más abstractas y más expresivas, el papel de esta máquina se vuelve cada vez más importante. Añadamos algunos scripts, pruebas automatizadas, despliegue de botones y tendremos una enorme cantidad de trabajo que ya no está haciendo un humano.

El compilador no es lo que preocupa. De hecho, sería estupendo que fueran más inteligentes. El sueño es un futuro donde poder recibir mensajes de error coherentes.

Y no hablamos de ficción, ya existen proyectos que intentan dar este salto, como por ejemplo cTuning Compiler Collection (cTuning CC). Este proyecto consiste en una colección de varias herramientas que combinan múltiples técnicas y frameworks cuyo objetivo es crear sistemas adaptativos avanzados, utilizando técnicas empíricas y algoritmos muy complejos.

Dentro de este grupo, destaca MILEPOST GCC. Este proyecto es uno de los primeros intentos en crear un compilador que pueda adaptarse a cualquier arquitectura utilizando un proceso de compilación iterativo, optimizándolo para lograr un aprendizaje automático, apoyándose en un centro colaborativo, donde se registran todas y cada una de las situaciones aprendidas.

 

Milepost GCC

Entonces ¿podrá un robot sustituir a un programador? – Seguramente no es posible …

Una interpretación popular de la automatización es que no necesitaremos código fuente. Las máquinas podrán “programarse”. Suena un poco confuso, así que intentaremos entender lo que esto podría significar.

Considere a una persona sentada delante de su ordenador, deseando que la máquina haga algo por él o ella. Supongamos que esta persona habla con el ordenador ya que el reconocimiento de voz es una realidad, aunque no sea perfecta. ¿Qué le dice al ordenador?

¿Qué pasa si necesitamos hablar en comandos estructurados, como “carga este archivo”, “cambia este texto a este”, o “guarda el archivo en el directorio X?” Esto es sólo un lenguaje de programación. Puede ser bonito, pero no es algo novedoso. Es sólo otro compilador más. Aunque más “cool” respecto a los que conocemos.

Para ser innovadores deberíamos permitir que el usuario haga peticiones abstractas, como “actualizar la fecha en mis documentos de ventas” o “cruza los datos de mis saldos bancarios con los gastos y dime dónde hay discrepancias”. Es más, si el objetivo es producir aplicaciones reutilizables, necesitamos que esto sea aún más abstracto: “Crea un plugin que descargue extractos bancarios, lo compare con los gastos y me devuelva un informe estándar”.

Este es el punto crucial de la programación: partiendo de requisitos abstractos y a menudo confusos, crear algo que sea útil. Para ello, tenemos que navegar por la comprensión humana, así como a través de un mar de opciones técnicas. Escribir código consiste en recoger esas ideas y convertirlas en algo concreto y útil.

Y esto no es algo que la inteligencia artificial esté cerca de poder hacer. Incluso los programadores humanos a veces tienen que trabajar mucho para conseguirlo. Es un nivel de razonamiento mucho más allá del alcance de lo que consideramos la automatización.

Pero quizá sí que sea posible…

Existe un rol menos tangible en la automatización. Si habláramos de Derecho Legal, podría representarse en un agente de búsqueda de jurisprudencia. En medicina sería un motor de búsqueda que relaciona distintos síntomas. Estas herramientas reemplazan en parte el esfuerzo humano y también ayudan a tomar mejores decisiones. Estos son escenarios donde la automatización puede funcionar y destacar. Después de todo, el trabajo no es sólo el razonamiento abstracto que hacemos como programadores, sino que todavía hay un montón de codificación real adicional que hacer.

De hecho, este tipo de herramientas de ayuda a la toma de decisiones ya son una realidad. Y no nos referimos a las herramientas de business intelligence (que también serían válidas), sino al nuevo movimiento que poco a poco va ganando importancia: las herramientas cognitivas.

El mejor ejemplo de este tipo de herramientas es Watson, de IBM. Esta herramienta ha combinado técnicas de BI, Big Data, análisis predictivo, cognitivo y sintáctico. De momento solo responde a solicitudes en inglés, pero es capaz de procesar las peticiones en lenguaje formal (acotándolo al contexto, por supuesto) y entregar resultados predictivos de muy buena calidad.

Podemos encontrar numerosos casos reales del uso de este tipo de sistemas cognitivos. Por ejemplo, The Weather Company utiliza Watson para mejorar la toma de decisiones y previsiones meteorológicas. Otro ejemplo real, el uso de Watson en medicina, para mejorar las decisiones de los médicos respecto a tratamientos.

Pero una cosa es el análisis de datos y toma de decisiones y otra el análisis de código estático. Estas son herramientas que buscan en el código fuente de un programa y encuentran errores. Estas herramientas ya han demostrado que pueden ayudar a encontrar fugas de memoria y agujeros de seguridad. Y mejorará con el paso del tiempo.

Las herramientas de optimización también mejorarán. En lugar de trabajar en un nivel bajo, donde ya hacen un trabajo increíble, podrán crecer y apuntar más alto. Será muy interesante contar con herramientas que sugieran reescribir una función, porque ha identificado el algoritmo XYZ, lo ha comprendido y tiene una solución mejor.

También será interesante ver la próxima generación de herramientas de refactorización. Actualmente ya existen numerosas herramientas de este tipo, pero cuidado, no son Sistemas Inteligentes, son Sistemas Expertos. La diferencia es que el sistema experto realiza (de forma excelente) las tareas que se le han programado, ninguna más. El sistema inteligente, es aquel que además de realizar las tareas programadas, las entiende, propone nueva soluciones e incluso, las mejora. Identificar funciones lógicas similares y factorizar el código común es algo que posiblemente la IA podría llegar a hacer. Hay un montón de refactorización que actualmente un programador no hace ya que a menudo no vale la pena el esfuerzo. La misma automatización podría convertirse en mejores sistemas de control que entiendan el código, no sólo el texto línea a línea.

Mucho que ganar y poco que perder.

Una gran cantidad de programación ya está automatizada y cada vez lo estará más, es una realidad. Es cierto que cuanta más automatización, menos roles, pero estos avances servirán principalmente para mejorar la productividad. Dado el volumen de problemas que tienen la mayoría de los proyectos, un aumento significativo en la productividad no supondrá la desaparición de equipos humanos de trabajo. Sólo resultará en un software de mayor calidad.

Eliminar completamente a los programadores de la ecuación requerirá una inteligencia artificial de nivel humano. Y si alguna vez empezamos a ver robots con sensibilidad humana caminando a nuestro lado, os aseguro que nuestro primer pensamiento no será “Vaya, me van a quitar el curro …”

 

Artículo traducido y desarrollado por Adrián Hontoria y Jose Antonio Alonso.

Ver artículo original en inglés de Edaqa.