miércoles, 26 de octubre de 2011

Reflexiones sobre software (I): la artesanía del software

Dos recientes lecturas han despertado en mi dos reflexiones, en realidad dos ideas antiguas, sobre un tema que últimamente no estaba tratando mucho en este blog: el mundo del software.

La primera, que es objeto de este artículo, me viene a la mente leyendo un pasaje del libro 'Unos y ceros'  de Daniel Rodríguez Herrera, una desenfada historia de la informática, Internet y los videojuegos y hace referencia al mundo de la ingeniería del software.

Descubrí esta disciplina, que pretende ofrecer metodologías y herramientas para el desarrollo de software, a principios de los años noventa, y me cautivó su elegancia y el reto que suponía procedimentar e industrializar el desarrollo de software. Conocí las metodologías estructuradas, los diagramas de flujos de datos, el modelo en cascada, la orientación a objetos...y me apliqué con denuedo a conocerlas desde un punto de vista teórico y, lo más importante, a llevarlas a la práctica

Pero esa práctica, tanto desarrollando software con mis propias manos, como dirigiendo equipos de desarrollo, me llevó a rebajar bastante las expectativas puestas en la disciplina.

A pesar de todos los estudios, a pesar de todos los modelos, a pesar de toda la experiencia, las metodologías de la ingeniería software se acaban limitando a un conjunto de técnicas, de buenas prácticas, de notaciones gráficas y, eso sí que es importante de cara al aumento de la productividad, a herramientas y entornos de desarrollo, pero no consiguen, ni de lejos, aproximarse a un auténtico proceso de producción industrial.

No quiere eso decir que no sean valiosas, que no aporten calidad y productividad...pero se quedan muy lejos de una auténtica automatización e industrialización de la producción de software. A pesar de las metodologías y herramientas, existe todavía un alto grado de discrecionalidad y, por qué no decirlo, de arte, por parte del programador, para llevar a cabo el desarrollo.

Frecuentemente, refiriéndome a ese hecho, digo que la ingeniería de software no es tal sino, más bien, una artesanía de software.

Y esa impresión no debe ser solo mía. Cuando Daniel Rodríguez repasa en su obra el desarrollo del sistema operativo OS / 390 nos cuenta la cantidad de problemas que se encontró el proyecto y cómo, a pesar de que las técnicas de ingeniería de software mejoraron algo el panorama, éste siguió estando teñido de retrasos y cierta desconfianza hacia el proceso. El autor extiende esa problemática tambien a nuestros días, al desarrollo de Windows Vista o Windows 7 y remata con una afirmación rotunda:

"la idea de que la del software podía ser una ingeniería como las demás, con sus plazos bien establecidos y sus certezas de funcionamiento perfecto, hace ya tiempo que ha sido abandonada por todos los que abandonaron la universidad y trabajan en el mundo real."

Si observo esa situación desde un punto de vista personal, desde la de alguien que ha disfrutado enormemente del desafío, creatividad y satisfacción que suponían el diseño y programación en un entorno incierto y poco definido, no puedo dejar de alegrarme de que el software tenga ese carácter de artesanía, de expresión de la propia creatividad, ingenio y conocimiento.

Si, por el contrario, adopto la perspectiva gerencial, que también he vivido en primera persona, esa dificultad para industrializar, esa impredecibilidad de plazos y costes, esa dependencia de la calidad como desarrolladores de personas concretas es, hay que reconocerlo, un auténtico problema, un verdadero lastre.

¿Alcanzará algún día el desarrollo software su mayoría de edad, no ya como negocio, que ya lo ha hecho, sino como disciplina ingenieril? ¿Dejará de ser una artesanía para convertirse, realmente, en una ingeniería?

El tiempo lo dirá.