¿Cuál es el futuro del desarrollo de software?
Por Alejandro Bianchi, Fundador-Presidente de LIVEWARE.
De la mano de nuevas tecnologías, que eran impensadas hace 20 años atrás, estamos viviendo la era del software. Los sistemas basados en software están cambiando la manera en cómo nos relacionamos, cómo hacemos negocios, cómo nos entretenemos, y hasta en cómo administramos la salud. También la forma en cómo pensamos la seguridad pública y la defensa de las naciones; y hasta se advierte transformaciones en la nueva dinámica de las ciudades en donde cada vez más, veremos vehículos autónomos y robots cumpliendo tareas de servicios públicos.
El software es estratégico para las naciones y su desarrollo, es fundamental para la manera en cómo se concebirán las empresas en un futuro no muy lejano y el concepto de trabajo también está alcanzado por la tecnología. Pero hay áreas que están en desarrollo y que en poco tiempo serán disruptivas, con gran impacto en la dependencia que tendremos del software: infraestructura inteligente, (nanotecnología) y la extensión de las capacidades humanas a través de la biotecnología y la inteligencia artificial a escala. Los sistemas del futuro serán de una magnitud socio-técnica que requerirán la convergencia de varias disciplinas para su desarrollo por lo que este deberá adaptarse a la nueva realidad.
Pero esta dependencia, cada vez mayor, que tenemos del software nos hace vulnerables a las debilidades inherentes al mismo. Y estas debilidades, muchas veces reflejadas en casos de graves problemas en diferentes áreas, (fallas de seguridad, por ejemplo), son consecuencia de la falta o la necesidad de mejorar las prácticas de la Ingeniería de Software para soportar los nuevos escenarios.
Centros de formación y de investigación como el Software Engineering Institute están trabajando en la definición de una nueva concepción de la Ingeniería de Software sobre la base de que las tecnologías evolucionan rápidamente y que la adaptación de métodos y prácticas deben acompañar esta evolución. Algunas de las premisas que guían esta nueva concepción de la Ingeniería de Software son:
1.Considerar el software como un componente estratégico de una nación, los esfuerzos en mejorar la manera en cómo se lo produce es una responsabilidad compartida entre el estado la academia y la industria, colaborando con una visión compartida y garantizando los recursos necesarios para sostener la investigación y el desarrollo.
2.El proceso de desarrollo debe ser reinterpretado en función a uno que integre a la Inteligencia Artificial (IA) con el desarrollador, para asegurar una continua evolución del sistema a través de implantar, por ejemplo, programación por intención. En casi todas las etapas del proceso de desarrollo, la IA tiene un enorme potencial para ayudar a los humanos, aliviando el esfuerzo de tareas tediosas, por lo que podrán concentrarse mejor en actividades que requieren la creatividad e innovación que solo nosotros podemos proporcionar. Para lograr este objetivo, se hace necesario visualizar el proceso de manera integral identificando los puntos en donde la IA y otras herramientas automatizadas aportan valor al desarrollo. Uno de los desafíos será la utilización de los datos del proceso de desarrollo para alimentar los componentes de IA. Esta área de investigación deberá proveer de un proceso de desarrollo altamente automatizado, que facilite la colaboración entre humanos y la IA y potencie la evolución continua de sistemas basados en software.
3.Dado que los sistemas van a evolucionar constantemente y en algunos casos en tiempo real, se hacen necesarios nuevos métodos de aseguramiento de calidad, verificación y validación poniendo a la seguridad como un atributo de primer orden.
4.Muchos de los sistemas futuros incluirán a las personas como componentes de este, no meramente usuarios, llevando la escala social a límites que van a requerir nuevos métodos de diseño para soportar nuevos atributos de calidad adicionales a los tradicionales de performance, disponibilidad, escalabilidad, etc.
5.La característica socio-técnica de los futuros sistemas implicará dedicar esfuerzos a nuevos modelos y patrones arquitectónicos y serán necesarios nuevas estrategias de diseño que hagan foco en el concepto de ‘diseño centrado en el humano’.
6.El volumen de los sistemas continuará creciendo, incrementando su complejidad para lo cual se hace necesario investigar nuevas metodologías y tecnologías de composición para facilitar la integración y orquestación de software. Paradigmas como Línea de Producto deben evolucionar con nuevas técnicas y herramientas.
7.Los ingenieros de software deberán ser formados en disciplinas complementarias porque los nuevos desarrollos integrarán otras disciplinas del campo de las ciencias sociales y también incorporar nuevos conocimientos técnicos alineados a las nuevas tecnologías y demanda de los nuevos tipos de sistemas. Como dijo el Dr. Bohem, ‘en el futuro será más importante cómo aprendemos que el mismo contenido de aprendizaje’. Incrementar la cantidad de ingenieros es un desafío estratégico para gobiernos, industria y academia.
8. Se necesita desarrollar nuevas especialidades para poder afrontar los requerimientos de la nueva generación de sistemas. Ingeniería en Seguridad e Ingeniería en Inteligencia Artificial son dos claros ejemplos.
Sobre estos 8 puntos se sustentarán las futuras generaciones de Ingenieros de Software. El mundo que viene será cada vez más dependiente del software, por lo que hay una enorme responsabilidad en asegurar sistemas con cada vez mayor calidad y que esa calidad se mantenga a medida que el software evolucione. Si bien el desarrollo de software tiene un enorme componente social, (conformación de equipos, motivación, comunicación y negociación, por mencionar algunos), la calidad solo se logra con buena ingeniería. Esto último cobra mayor vigencia en el mundo que se viene.