Hay música en el desarrollo de software
La revolución digital que estamos experimentado en nuestras vidas, mediante apps y servicios de Internet, se basa en el fondo en software que crean los desarrolladores.
Pero, ¿qué es desarrollar software y qué es un desarrollador de software? En realidad, es una de las profesiones peor comprendidas históricamente por el mundo empresarial, e incluso, en algunas ocasiones por las propias universidades de informática, pues tienden a pensar que un desarrollador de software es un trabajador de bajo nivel que se puede subcontratar y reemplazar a bajo coste. Se entiende como el “obrero de la automatización” que trabaja a las órdenes de un analista, de un arquitecto software o de un product manager que especifica al desarrollador lo que tiene que hacer.
Desarrollar software es un actividad de altísimo nivel, que requiere tener un cerebro potente, creativo y con mucho conocimiento tecnológico para poder manejar tanto la complejidad del hardware como la del propio software. Por ello, hacer buen software, entenderlo y ser capaz de crearlo no está al alcance de cualquier persona.
Desarrollar software se puede entender, en primera instancia y de forma muy simple, como escribir las instrucciones en un programa o código para que la máquina, el hardware, las ejecute a lo largo del tiempo. En el fondo, un computador es una máquina matemática que ejecuta algoritmos o programas; incluso cualquier algoritmo se puede abstraer y analizar teóricamente mediante la máquina de Touring.
A pesar de esa naturaleza matemática, y por tanto exacta, en la práctica, desde que el hardware supera en capacidad de cómputo al cerebro consciente, desarrollar software se ha vuelto una tarea muy compleja e incierta para los humanos. Como ejemplos sencillos de la potencia de cómputo, un simple servidor web apache en un portátil con 2 CPU es capaz de procesar 1000 TPS – transacciones por segundo – con facilidad. Google procesa en su buscador más de 44.000 búsquedas cada segundo. Y la potencia de cómputo no para de crecer. Cada 18-24 meses se dobla la capacidad de cómputo, tal como se recoge en la Ley de Moore.
Que la potencia de cómputo sea tan elevada dificulta que el cerebro humano prediga el comportamiento de un sistema o aplicación. El estado de ejecución de un software a lo largo del tiempo, cuando se ejecuta en un hardware tan y cada vez más potente, es muy difícil de predecir, sobre todo cuando hay varios algoritmos o programas ejecutándose en paralelo, manejando muchas interacciones con los usuarios o con un gran volumen de datos. Si además el software ha sido creado por varios desarrolladores, el nivel de incertidumbre aumenta. Es muy difícil calcular el estado en el que está el conjunto software + hardware.
Arduino, hardware y software de código librePor eso, acompañando al desarrollo de software, se hacen siempre test para comprobar que las instrucciones que se le han dado a la máquina generan el compartimento deseado. A la vez, esta incertidumbre y complejidad está en la raíz de que el software tenga bugs o fallos, introducidos por lo humanos que desarrollan el software y el hardware. Esta situación es conocida desde los años 70 cuando el potencial del hardware creció exponencialmente y desarrollar software se convirtió en un endeavour impredecible. Hubo muchos proyectos software que fallaron y se hablaba entonces de Software Crisis.
Toda esta complejidad e incertidumbre inherente al desarrollo de software ha hecho que se entienda cada vez más como una serie de ciclos rápidos y continuos de intention-synthesis-realization-feedback, similar al de otras disciplinas creativas como la pintura, la escritura o la composición musical, donde su proceso de creación se caracteriza por ciclos continuos de síntesis hasta que la “obra” emerge. Si el pintor pinta hasta que emerge una obra que le gusta, el desarrollador programa un software hasta que funciona y además le gusta, porque también existe un tipo de “belleza” o elegancia en la forma de escribir código y en la forma en que las diferentes partes del software interaccionan en ejecución. De todas esas disciplinas creativas la composición musical es la que más parecido tiene con el desarrollo de software.desarrollar software
Un desarrollador de software se puede ver como un compositor musical; se podría decir que es un compositor de software. Primero escribe el código o programa que quiere que se ejecute en la máquina. Ese código y sus instrucciones escritas en un lenguaje de programación (C, Java, JavaScript, Python…) serían el equivalente al pentagrama. En segundo lugar, el desarrollador le dice a la máquina (vía el sistema operativo) que ejecute el programa que acaba de escribir. Este paso sería equivalente a tocar en un instrumento las notas musicales del pentagrama.
El instrumento para un desarrollador de software sería el computador con el sistema operativo y las herramientas de desarrollo (también software). En tercer lugar observa el resultado de su ejecución para ver si el software programado se comporta como desea, hace un test (escucha la música recién compuesta). Si el resultado no es el esperado se inicia de nuevo el ciclo intention-synthesis-realization-feedback, y así hasta que obtiene el resultado esperado. En su día a día un desarrollador de software ejecuta estos ciclos varias veces por hora.
Tanto la música como el software tienen raíces en las matemáticas y ambas tienen ejecución temporal. La principal diferencia es que mientras la música se percibe en el cerebro mediante el sentido del oído, el software es un intangible que en su ejecución y composición no tiene materialización física, sólo se puede observar mediante el análisis mental. Al igual que hay partituras bien o mal compuestas, hay código que está bien o mal escrito. Al igual que la música tiene armonía o base musical que proporciona consistencia e integridad en su ejecución, un software también tiene una base transversal sobre la cual se ejecuta. Es lo que se suele llamar arquitectura del software, especialmente relevante cuando hay varios desarrolladores trabajando sobre el mismo sistema o app.
Cuando hay varios desarrolladores de software el proceso de desarrollo de software se parece a una interpretación de Jazz, donde cada músico/desarrollador compone una parte de la melodía sobre una base armónica, creada por otro el arquitecto o compositor de la armonía. Controlar este proceso creativo es muy difícil y suele fallar cuando se intentan aplicar técnicas predictivas con diseños y especificaciones a priori. En su lugar, la industria ha reconocido en los últimos 15 años que hay que gestionar el desarrollo de software de una forma adaptativa y hacerlo emerger.
Esta visión del software y de los desarrolladores pretende ayudar a entender y valorar el trabajo que hacen los desarrolladores de software. Diría que es un trabajo fundamental para el desarrollo de una sociedad digital y para las transformaciones digitales que se están acometiendo en muchas empresas, como es el caso de Telefónica.
Esta importancia de los desarrolladores la conocen muy bien las compañías del mundo de Internet que luchan por tener los mejores desarrolladores de software del mundo. Es el caso de Telefónica I+D, donde llevamos años atrayendo desarrolladores con talento, tanto nacionales como internacionales, para ayudar a la compañía a a ser competitiva en el mundo digital. Como parte de este proceso de captación de talento, este año lanzamos en colaboración con la U-TAD, un Máster de Desarrollo de Softaware Avanzando, donde formar desarrolladores de muy alto nivel.