El mundo, y cada uno de nosotros, depende cada vez más de aplicaciones software para funcionar (la famosa frase “software is eating the world” es más vigente que nunca). La gran pregunta es quién va a desarrollar en el futuro todo ese software. Y más teniendo en cuenta la creciente complejidad del software a desarrollar. Si antes hablábamos que el “software is eating the world” ahora le añadimos que la “AI is eating software” para enfatizar que ahora muchos sistemas software necesitan incluir o interactuar con componentes inteligentes. Añade además los temas del Internet de las Cosas, el blockchain, la necesidad de que el software sea eficiente energéticamente (green computing),…

No serán los programadores los que desarrollarán todo este software (tal y como entendemos el concepto de programador hoy en día, básicamente un codificador). Ni hay suficientes ni su trabajo aporta suficiente valor, necesitamos ser capaces de generar más software escribiendo (directamente) menos líneas de código. O como mínimo que esas líneas de código no las tengan que escribir todas los programadores profesionales porque así no llegamos.

Si no son ellos, entonces ¿quiénes?: ¿Ingenieros? ¿Ciudadanos? ¿Humanistas? ¿robots? ¿nadie?.

En esta charla en el Tecnológico Nacional de México en Celaya, repaso qué puede contribuir cada uno de ellos al desarrollo de software y como su implicación puede revolucionar, una vez más, nuestra profesión.

Si los programadores no son la solución ¿cómo conseguiremos producir todo el software que necesitamos?. Os doy cinco soluciones parciales a esta pregunta. El futuro será una combinación de ellas. Podéis descubrirlas a continuación o ver directamente el vídeo de mi charla o la presentación que usé, al final de este post.

Contents

Utilicemos modelos y generemos el código

De hecho, el propio nombre “Ingeniería de Software” ya indica la voluntad de qué el software se vea como una actividad ingenieril donde primero se modela y luego se crea (o en nuestro caso, se genera). Aunque, por desgracia, en la práctica, esto normalmente se olvida.

El uso de las técnicas de modelado (tan comunes en cualquier otra ingeniería, nadie construye un puente sin primero modelar la estructura, la fuerza del agua, del viento, hacer simulaciones con los modelos,…) y de generación automática de código permitirían aumentar mucho la productividad y la calidad del proceso de desarrollo.

Tampoco es nada que no hagamos ya en cualquier framework de programación que se precie, donde siempre hay algun lenguaje que nos permite, como mínimo, definir los datos que la app tiene que gestionar y a partir de los cuáles el framework es capaz de crear la base de datos y los formularios (“scaffolding”) para poder manejarlos.

Para los interesados en estos aspectos de la ingeniería del software dirigida por modelos, mi blog en inglés (modeling languages) se dedica exclusivamente a hablar de estos temas.

Como modelado incluimos también el concepto de low-code, que es casi lo mismo pero con mucho mejor marketing detrás.

A ver si nos damos cuenta que el término 'Ingeniería de Software' empieza con la palabra 'Ingeniería' Click To Tweet

Cada ciudadano es un programador potencial

Para paliar la escasez de programadores ya hace mucho que se intenta convertir cualquier persona en un posible programador. Esto es lo que se llamaba antiguamente “end-user programmer” y que ahora se ha rebautizado como “citizen developer”.

El concepto es el mismo pero ahora el aumento (aún más) de la demanda, por ejemplo debido al interés de los ciudadanos en explotar los datos abiertos que publican las administraciones públicas, y las mejoras en las plataformas de desarrollo lo hacen más necesario que nunca.

No se trata que cualquiera aprenda a programar (aunque ciertamente, un poco de pensamiento computacional no hace daño a nadie) sinó de qué cualquiera pueda adaptarse o crear sus propias apps SIN necesidad de programar (o programando lo más mínimo).

Las herramientas no-code pueden también ser de utilidad aquí. Limitan mucho la creatividad pero a cambio permiten a cualquiera utilizar y combinar plantillas y servicios predeterminados para como mínimo adaptar las herramientas de las que ya dispone.

Antes de ponerte a programar, piensa si con una plataforma como WordPress te basta para 'implementar' tu idea Click To Tweet

Sacar el máximo provecho a la comunidad

Todo gran proyecto, sobre todo si es un proyecto open source, tiene una comunidad de usuarios y contribuidores detrás. Optimizar el trabajo de esa comunidad y conseguir que más personas se unan a ella es otra manera de conseguir más “manpower” para el proyecto.

Hoy en día, gracias a GitHub, podemos estudiar millones de proyectos software para ver qué hace que algunos proyectos tengan más éxito, produzcan más código, sean más rápidos a contestar las peticiones de los usuarios…

Los informáticos tenemos que ser un poco de 'letras'. Para entender a usuarios y gestionar equipos grandes Click To Tweet

Contratar a un asistente inteligente para que nos eche una mano

El proceso de cognificación  que estamos viviendo también se puede aplicar al propio proceso de desarrollo. Hay muchas tareas donde una ayuda externa en forma de sistema experto / inteligencia artificial nos podría ir bien. Hoy en día todo el mundo habla de GitHub Copilot y otros entornos de programación inteligentes pero herramientas de este estilo también están llegando al mundo del análisis y diseño, por ejemplo, recomendando qué clases añadir a tu diagrama en función de lo que tú u otros tenían en modelos anteriores similares.

Este es un campo donde queda mucho trabajo por hacer. Hay bastantes tareas dentro de la Ingeniería de software donde la cognificación podría muy útil.

Éste es también un buen ejemplo de que el programador 10x existe, pero no es una persona. Y, que nadie se preocupe, nadie va a perder su trabajo. La IA y las personas trabajamos mejor juntos. En todo caso, la IA nos quitará de encima aquellas tareas más aburridas y repetitivas para que así podamos dedicarnos a los aspectos más creativos del desarrollo.

Que nadie haga nada

Al final, la forma más eficiente de completar un proyecto de desarrollo es que nadie tenga que hacer nada.

Por ejemplo porque existe un software o plataforma que nos permite hacer lo mismo con una mínima configuración. El caso paradigmático, para mí, son los gestores de contenidos como WordPress o Drupal que vienen ya con una gestión de usuarios, capacidad de publicación de información (incluyendo restricciones de acceso), formularios de entrada de datos y un sinfín de posibilidades (vía las decenas de miles de plugins disponibles).

Otro ejemplo, sería lo que llamo, no-work. Ya hemos visto antes que a partir de modelos podemos generar el código del sistema. Pero, ¿podemos también crear esos modelos automáticamente?. La respuesta es que en algunos casos sí, aprovechando información (excels, bases de datos,…) que ya estén disponibles en la propia empresa. Con lo que tanto los requisitos, los modelos como el código se puedan generar y dar lugar a un sistema software que explote esos datos (ej. para crear un chatbot para tiendas online donde el bot se configura automáticamente a partir de la información de la tienda).