Hoy día el software está en todas partes, en nuestros teléfonos, en nuestros vehículos, en nuestras televisiones, en nuestros electrodomésticos, etc. El software está en el corazón de la innovación y, gracias a él, las empresas son más competitivas y pueden aportar más valor a sus clientes. Pero no siempre ha sido así. Ha habido momentos en los que el software era una fuente de problemas e incluso se cuestionaba su futuro como industria. Acompañadme en este repaso breve y muy personal sobre la historia del desarrollo de software para entender de dónde venimos, dónde estamos y qué nos puede deparar el futuro.
Los primeros años del software (1960-1979)
Al principio todo era hardware. El software iba unido de forma inseparable a él, pero la programación era una actividad menor. No existían estándares ni buenas prácticas generales, sino que cada empresa o centro de investigación abordaba la tarea según sus propios criterios, normalmente siguiendo modelos de “prueba y error”. Desarrollar software era una tarea más cercana a la artesanía que a la ingeniería.
Incluso los “bugs” no eran incidentes en los programas sino insectos reales que eran localizados dentro de los servidores y que estropeaban los circuitos eléctricos. Como curiosidad, aquí podéis ver el informe original con la polilla que sirvió para acuñar el término “bug”.
Primer caso de “bug” encontrado, Harvard, 1945.
La falta de consistencia en el ciclo de vida de desarrollo hacía que los programas se entregaran habitualmente con defectos y con retraso, lo que ponía en cuestión el papel del software como una industria capaz de abordar problemas complejos. Este periodo se conoce como la “crisis del software”.
Aunque no he vivido personalmente este periodo, me gustaría compartir con vosotros una anécdota que me parece muy ilustrativa de cómo han cambiado las cosas desde entonces. Hace unos años, un compañero mayor que yo me contaba que, cuando él comenzó a trabajar, los informáticos llevaban una bata blanca. Cada mañana, todos los empleados de la compañía en la que trabajaba esperaban a que él llegara, abriera la puerta del centro de datos y distribuyera a cada uno de ellos los listados con las tareas que tenían que hacer ese día.
En esta época el monopolio del manejo de los ordenadores y de la información que generaban pertenecía a los técnicos y nadie cuestionaba su trabajo. Como decía mi compañero, con añoranza, “es que el PC nos ha hecho mucho daño”. A mí, que crecí rodeado de ordenadores personales, esta afirmación me pareció muy sorprendente, pero entendí que para él este cambio fue traumático porque le supuso perder su parcela de poder.
El proceso de industrialización de los ordenadores (1980-2000)
A partir de los años 80, la aparición de los ordenadores personales democratiza el acceso a la computación y desacopla definitivamente el software del hardware. Para aquellos interesados en conocer más sobre este periodo, os recomiendo el documental “Silicon Cowboys” que cuenta como un grupo de ejecutivos de “Texas Instruments” fundan la empresa “Compaq” para crear el primer ordenador personal compatible con los PCs de IBM y cómo utilizaron ingeniería inversa para replicar la BIOS de IBM, su único componente propietario.
Para hace frente al incremento en la demanda de software, pero evitando los problemas identificados en el periodo anterior, el desarrollo de software busca mayor fiabilidad y eficiencia avanzando hacia la industrialización. En este periodo, se consolida el concepto de ingeniería de software, adoptándose conceptos propios de la ingeniería tradicional. Son los años dorados de los documentos de requisitos, las estimaciones, las planificaciones detalladas en cascada y los procesos de validación manuales.
El peso del proceso de desarrollo de software pasa en esta época de los programadores a los gestores y a los procesos. Es en esta época cuando se popularizan modelos como las “software factory”, que equiparan el proceso de desarrollo de software al de una línea de producción, en donde los requisitos entran por un extremo y el software y sus entregables asociados salen mágicamente por el otro. El desarrollo de software se convierte, así, en una actividad de poco valor añadido, que en muchos casos es externalizada a otros países con menor poder adquisitivo.
La industrialización se traslada también a la vestimenta, abandonándose definitivamente la bata blanca en favor del traje y la corbata.
El manifiesto Ágil y la recuperación del espíritu original (2001-2020)
A finales de los 90 el desarrollo de software es una industria pujante pero no está libre de problemas.
Por un lado, aquellas empresas que han adoptado la externalización con mayor intensidad sufren una descapitalización de conocimiento técnico, lo que incrementa su dependencia de los proveedores y limita su capacidad de aprovechar la tecnología como una fuente de ventaja competitiva.
Adicionalmente, la profesión de programador se encuentra altamente devaluada y afectada por un elevado grado de intrusismo desde disciplinas afines para poder hacer frente a los elevados niveles de demanda.
Por último, existe una gran desconexión entre las llamadas áreas de negocio, que necesitan soluciones tecnológicas para poder operar y desarrollarse y las áreas técnicas, responsables de proveer estas soluciones.
Como respuesta a esta situación un grupo de expertos del sector publican, en febrero de 2001, el manifiesto ágil, un conjunto de 12 principios que tratan de volver a situar a los programadores en el centro del proceso de desarrollo de software. Para ello se basan en reivindicar las particularidades de la programación dentro de la ingeniería, lo que se expresa a través de las siguientes preferencias:
- Individuos e interacciones sobre procesos y herramientas.
- Software funcionando sobre documentación extensiva.
- Colaboración con el cliente sobre negociación contractual.
- Respuesta ante el cambio sobre seguir un plan
Se trata, en suma, de recuperar el carácter creativo del desarrollo de software, fomentando la interacción de los programadores con todos los participantes y reconociendo la necesidad de aceptar al cambio como parte natural del proceso.
Tomando como base estos principios, se desarrollan nuevos marcos de trabajo como SCRUM o eXtreme Programming (XP) que soy hoy los más frecuentemente utilizados para el desarrollo en todo el mundo. El éxito de estas nuevas maneras de trabajar ha hecho que se desarrollen, basándose en los mismos principios, modelos a nivel organizacional como SAFe (Scaled Agile Framework).
El concepto Devops también aparece en esta época (2007) como una manera de integrar el trabajo de los equipos de desarrollo y los de operación y mantenimiento, fomentando la adopción de prácticas ágiles para reducir la duración de los ciclos de desarrollo. DevOps trabaja en 3 niveles:
- Fomentar la obtención de feedback de un desarrollo (mediante técnicas como la monitorización de métricas, A/B testing, etc.).
- Reducir los tiempos necesarios para la obtención del feedback (apoyándose en procesos de automatización e integración continua).
- Adoptar una cultura empresarial que favorezca la mejora continua
Por último, el acceso a recursos de computación en nube se ha hecho mucho más sencillo gracias a proveedores de nube pública como AWS, Google y Microsoft (que lanzaron sus servicios en 2007, 2008 y 2010 respectivamente). Como consecuencia, el hardware se virtualiza en gran parte, dando paso a una nueva era caracterizada por el “software-centrismo”.
La adopción conjunta de estas 3 innovaciones (metodologías ágiles, prácticas Devops y computación en nube) ha favorecido la creación de una edad de oro del desarrollo software, alcanzándose unos niveles de eficiencia y una capacidad de evolución impensables hace tan solo 20 años. Como referencia, el informe “State of Devops”, que publica anualmente Google, establece en su versión de 2022 que las compañías más avanzadas son capaces hoy de desplegar software varias veces al día (algunas como Amazon y Netflix hasta centenares de veces al día) y tienen un tiempo promedio de ciclo de desarrollo de entre 1 día y una semana.
Sin embargo, estas nuevas técnicas no están exentas de críticas y hay un número creciente de expertos que creen (como en este artículo) que las metodologías ágiles se han acabado apartando de los principios ágiles originales y que, en algunos casos, generan una cultura de supervisión y exigencia constante que acaba resultando tóxica.
La percepción de las profesiones asociadas al desarrollo de software alcanza su nivel más alto este periodo, con la llegada de los gigantes de internet como Google, Facebook o Netflix. Este mayor reconocimiento se traslada también a la antes denostada estética “Nerd” (gafas, camisetas, pantalones vaqueros y chanclas) que se vuelve popular.
El futuro del software
¿Y qué podemos esperar del futuro? Como en todas las industrias, pero especialmente en esta, la aparición de novedades es constante, algunas con un elevado potencial de disrupción. Por ejemplo, podemos destacar las plataformas Low Code / No Code o los servicios de inteligencia artificial similares a ChatGPT como Ghostwriter chat o Copilot que pueden proporcionar, a petición, el código fuente necesario para implementar una solución concreta. A continuación, podemos ver algunos ejemplos básicos utilizando ChatGPT y Copilot:
Todos estos avances han suscitado dudas respecto al futuro del trabajo del desarrollador de software, que algunos creen que podría acabar desapareciendo. Ante esto, creo que no debemos caer en la nostalgia, como mi antiguo compañero, o dejarnos llevar por el miedo.
Estoy seguro de que el futuro traerá cambios y que algunas tareas que hoy son ejecutadas por programadores acabarán siendo realizadas por usuarios no técnicos o por algoritmos. Pero estos cambios traerán también oportunidades en forma de nuevos modelos de trabajo, nuevas herramientas o incluso nuevas profesiones que nos ayudarán a llevar a la industria del desarrollo de software al siguiente nivel.
Todavía no hay comentarios