Tim Menzies acaba de publicar en la revista IEEE Software el artículo Five Laws of SE for AI que reflexiona sobre el papel que la Ingeniería de Software tiene/puede jugar en el desarrollo y globalización de la Inteligencia Artificial (IA).

Este es un tema que nos interesa mucho en este blog, y creo que Tim consigue resumir en sus cinco leyes algunos de los grandes principios que gobernaran la futura evolución en este campo. Para los que no tengáis acceso al artículo completo, os resumo muy brevemente las cinco leyes de la Ingeniería de Software para la Inteligencia Artificial:

El software de IA no tiene mucho de IA

La mayor parte de los principios y prácticas de la Ingeniería de Software son directamente aplicables al desarrollo de aplicaciones de Inteligencia Artificial. La parte “inteligente” es sólo una pequeña parte del total del código de la aplicación. Estas aplicaciones necesitan gestión de acceso, configuración de servidores, limpieza y procesamiento  de los datos, visualizaciones,… tanto como cualquier otra.

En su artículo, Tim menciona que en Microsoft, los ingenieros de la división de IA sólo dedican alrededor de un 10% de su tiempo a trabajar en los componentes inteligentes propiamente dichos, el resto es trabajo de Ingeniero de Software “clásico”. Por ejemplo, nuestro plugin para vigilar la toxicidad de los comentarios utiliza una red neuronal para analizar los comentarios pero esta red está ya preentrenada y empaquetada con lo que al final el plugin simplemente llama la función de análisis de la red y reacciona al valor que ésta devuelve. Si en lugar de ser una red neuronal fuera una función aleatoria, el código de plugin sería exactamente el mismo (aunque óbviamente la calidad sería pésima 🙂 ).

Esto también implica que todo lo que estáis aprendiendo en vuestras carreras de informática seguirá teniendo mucho valor, aún en un mundo dominado por software inteligente.

La IA necesita Ingenieros Software

Todo el software (inteligente o no) necesita instalarse, configurarse, mantenerse, interactuar con otros componentes, testing, certificación, soporte de usuario, mejoras de usabilidad y distribución.

El futuro del software no es una dicotomía entre Ingeniería de Software o Inteligencia Artificial. Al contrario es la explosiva mezcla que puede salir de mezclar las ideas y capacidades de las dos disciplinas. Creo que nuestra plataforma de chatbots Xatkit es un buen ejemplo de esto, ya que combina un “core” de IA (en concreto de procesamiento de lenguaje natural) con una arquitectura flexible y multi-plataforma, intentando seguir todo lo que sabemos de buenas prácticas de Ingeniería de software (y más concretamente, de Ingeniería de Software dirigida por modelos).

La IA sufre cuando la Ingeniería de Software se ignora

Todo software inteligente es software. Lo que nos lleva a afirmar que malas prácticas de ingeniería de software llevan a aplicaciones IA de mala calidad.

Hemos aprendido mucho en las últimas décadas acerca de como construir software de calidad (¡y los desastres nos ha costado!). No tiene sentido tirarlo todo por la borda y empezar de cero al construir aplicaciones de IA. Todo ingeniero de IA debería también estudiar Ingeniería de Software como parte crucial de su formación.

La IA mejora cuando se siguen los principios de la Ingeniería de software

Lo contrario del punto anterior también es cierto. Cuánto más mejore la Ingeniería de Software, mejor para la IA.

Esto incluye también, por ejemplo, todo el movimiento open source que facilita la colaboración para la mejora de los paquetes estadísticos, de redes neuronales,… parte de la gran mayoría de software de IA.

La Ingeniería de Software también necesita la IA

Las cuatro leyes anteriores discuten como la Ingeniería de Software puede ayudar a la IA pero la dirección inversa también es muy interesante (por ejemplo, podéis leer el post ¿Quién desarrollará las aplicaciones del futuro?).

Eso sí, no es tan fácil como cualquier herramienta de IA genérica y ponerla a colaborar con nuestro equipo de programadores. No sólo porque hay factores humanos y sociales a tener en cuenta (¿van a aceptarla? ¿van a confiar en sus sugerencias?…). Sino también porque casi siempre habrá que primero reentrenarla para que entienda bien un dominio tan particular como el del desarrollo de software antes de que pueda empezar a ser útil. Pensad que la gran mayoría de estas herramientas inteligentes están entrenadas utilizando corpus genéricos (como por ejemplo la Wikipedia) y por lo tanto no “entienden” de temas de desarrollo.