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).
Para los que no tengan acceso al artículo completo científico, lo resumo muy brevemente las cinco leyes de la Ingeniería de Software para la Inteligencia Artificial:
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 pre-entrenada 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ás aprendiendo en nuestras carreras de informática seguirá teniendo mucho valor, aún en un mundo dominado por software inteligente.
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).
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.
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.
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, puedes 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 re-entrenarla 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.
Fuente original:
https://ingenieriadesoftware.es/5-leyes-ingenieria-software-para-inteligencia-artificial/