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. Ya os avanzo que no serán los programadores (tal y como entendemos el concepto de programador hoy en día). Ni hay suficientes ni lo que hacen aporta suficiente valor.

Si no son ellos, entonces ¿quienes?: ¿Ingenieros? ¿Ciudadanos? ¿Humanistas? ¿robots?.

En esta charla en la Universidad de Murcia, 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 ¿como conseguiremos producir todo el software que necesitamos?. Os doy cuatro soluciones parciales a esta pregunta.

Ver el desarrollo de software como una ingeniería

De hecho, el propio nombre “Ingeniería de Software” ya indica la voluntad de qué el software se vea como una actividad ingenieril. Aunque, por desgracia, en la práctica, esto normalmente se olvida.

El uso de las ténicas 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. 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.

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

Sacar el máximo provecho a la comunidad

Todo gran proyecto, sobretodo 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 mas “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

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 cietamente, 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).

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

Añadir inteligencia artificial al proceso de desarrollo

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. Un ejemplo ya en marcha es el entorno de desarrollo Kite  que a medida que vas escribiendo código te va ofreciendo sugerencias de como mejorar o completar ese código en base a trozos de código similares que ha visto en Internet (por ejemplo en Stack Overflow).

Otro ejemplo sería un bot que te hiciera de asistente virtual durante el proceso de modelado. Mirando que dominio de conocimiento estás modelando, y comparándolo con modelos propios anteriores o ontologías existentes, el bot podría sugerir errores en el modelo (señalando partes del modelo que no siguen los patrones típicos de modelado para ese concepto) y atributos/relaciones nuevas para enriquecerlo.

Este es un campo donde queda mucho trabajo por hacer. Mi equipo viene de publicar una primear lista de tareas donde la cognificación podría muy útil.

¿Es la cognificación la siguiente revolución en el desarrollo de software? Click To Tweet