Conecta con nosotros

A Fondo

¿Sabes qué es en realidad un desarrollador de software? Por Rubén González Blanco

Publicado el

desarrollador_software

Desarrollar software 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 erróneamente se piensa 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.

Pero en realidad, desarrollar software es un actividad de altísimo nivel, que requiere tener un cerebro potente, creativo y con mucho conocimiento tecnológico para así 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.

Nivel de incertidumbre

Desarrollar software se puede entender, en primera instancia, y de una 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 a lo largo del tiempo.

Incluso cualquier algoritmo se puede abstraer y analizar teóricamente mediante la máquina Universal de Touring . Pero, 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.

El hecho de que la potencia de cómputo sea tan elevada, hace que sea muy difícil predecir a priori por el cerebro humano 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/programas ejecutándose en paralelo, manejando muchas interacciones con los usuarios o con un gran volumen de datos y si además el software ha sido creado por varios desarrolladores, el nivel de incertidumbre es aún mayor.

Es muy difícil calcular el estado en el que esta el conjunto software + hardware. Por eso, acompañando al desarrollo de software, se hacen siempre test (el desarrollador ejecuta lo que ha programado en diferentes escenarios o casos de 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 habló entonces de la Software Crisis

Toda esta complejidad e incertidumbre inherente al desarrollo de software ha hecho que el desarrollo de software 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: el pintor pinta hasta que emerge una obra que le gusta; el desarrollador programa un software hasta que emerge un software que funciona y además le gusta, porque también existe un tipo de “belleza” o elegancia en la forma en la que se escribe el código y en la forma en la diferentes partes del software interaccionan unas con otras en ejecución. De todas esas disciplinas creativas es la composición musical la que creo que más parecido tiene con el desarrollo de software.

El compositor musical y el compositor de software

Un desarrollador de software se puede ver como un compositor musical, casi 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 musical, que describe qué notas son las que hay ejecutar a lo largo del tiempo. 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, el desarrollador observa el resultado de su ejecución para ver si el software programado se comporta como desea, hace un test. Este paso sería el equivalente a escuchar la música recién compuesta. Si el resultado no es el esperado se inicia de nuevo el ciclo de intention-synthesis-realization-feedback, y así sucesivamente hasta que se obtiene o emerge el resultado esperado. Si observamos a un desarrollador de software en su día a día, está continuamente ejecutando estos ciclos de intention-synthesis-realization-feedback, 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 que 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, solo se puede observar mediante el análisis mental.

Pero 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 en el argot “la arquitectura del software”, que no deja de ser al igual que la armonía musical, otro software que hay que componer y ejecutar para dar consistencia e integridad a la realización software. Esta arquitectura es especialmente relevante cuando hay varios desarrolladores trabajando a la vez sobre el mismo sistema o app.

Cuando hay varios desarrolladores de software (compositores de software), el proceso de desarrollo de software se parece más a una interpretación de Jazz, donde cada músico (desarrollador de software) compone una parte de la melodía sobre una base armónica, creada por otro desarrollador de software (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 (de eso van los métodos ágiles).

Espero que esta visión del software y de los desarrolladores ayude 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, y también es el caso de Telefónica I+D, donde llevamos años atrayendo desarrolladores con talento, tanto nacionales como internacionales, para ayudar a Telefónica 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 avanzando de software, donde esperamos, de forma conjunta, formar desarrolladores de muy alto nivel.

Firmado:  Rubén González Blanco Head of Architecture for Product Innovation and Research at Telefonica I+D y Director del Máster Telefónica en Desarrollo de software avanzado.

¿Quieres aprender a desarrollar el software más avanzado?

Telefónica y U-tad han unido sus fuerzas para lanzar uno de los masters más interesantes del momento: el “Máster Telefónica en desarrollo de software avanzado”, un programa orientado a desarrolladores de software de alto nivel técnico con recursos avanzados de programación tanto en implementación como de diseño software: patrones avanzados, eficiencia, computación paralela y diseño avanzado, algoritmos y estructuras de datos.

A lo largo del máster se abordarán temas como la optimización de algortimos y estructuras de datos, despliegue de bases de datos o técnicas avanzadas en C++. También se verán temas como programación avanzada con Boost o desarrollo para las principales plataformas móviles (iOS, Android, Windows Phone y Firefox OS). De la misma forma se estudiará el diseño e implementación de interfaces, el desarrollo en plataformas distribuidas y distintos paradigmas de programación (lógica, concurrente, funcional, reactiva, orientada a aspectos, etc.)

En el campo de la producción de software se abordarán temas como estructuras de datos auto optimizables, implementaciones dependientes de caché, cerraduras o eficiencia de Stack y Heap. El Máster Telefónica en Desarrollo de Sotware Avanzado  tiene una duración de 600 horas y cuenta con el reconocimiento del departamento I+D de Telefónica.

¡Si quieres conocer más de cerca todo lo que te puede ofrecer, te recomendamos que te descargues su folleto informativo!

¡Aprende a programar el software más avanzado!

 

Imagen: Shutterstock

Top 5 cupones

Lo más leído

Suscríbete gratis a MCPRO

La mejor información sobre tecnología para profesionales IT en su correo electrónico cada semana. Recibe gratis nuestra newsletter con actualidad, especiales, la opinión de los mejores expertos y mucho más.

¡Suscripción completada con éxito!