El otro día mi pareja me preguntó qué era la arquitectura/ingeniería software. Como es una persona no técnica, tuve que explicarlo mediante una analogía (cosa que he de reconocer que me encanta).
Le conté que la informática es un arte y que, como en cualquier arte, existen una serie de útiles necesarios. Tomando la literatura como ejemplo, un escritor necesitará su pluma y papel, que equivaldrían a un nuestros ordenadores y entornos de desarrollo.
De igual manera que en la literatura, en la informática existen cientos de lenguajes, cada uno con su vocabulario y normas gramaticales. Quien programa en Java, conoce el conjunto de palabras válidas y las posibles maneras de conectarlas, de igual manera que el escritor conoce las palabras del diccionario en un idioma y sabe cómo enlazarlas para crear frases y oraciones con significado.
El objetivo del código, es explicar cómo se debe resolver un problema determinado, de la misma forma que una oración trata de trasmitirte un mensaje coherente.
Hasta aquí, le comenté, la cosa es relativamente fácil. Un programador novel, podría asemejarse a un niño de escuela. Conoce la palabras e incluso puede escribirte un sencillo texto para contarte una historia o transmitir una idea.
En cambio, el arquitecto software sería equivalente a un novelista o un poeta. Es un artista experimentado, que va más allá del simple uso de lenguaje, es capaz de crear complejas estructuras que te trasmitan mensajes mucho más profundos. Crea enormes historias con estructuras anidadas, haciendo uso de recursos literarios para sacar aún más partido al lenguaje.
El niño de escuela es capaz de crear oraciones con sentido. En cambio el novelista, es capaz de crear y enlazar oraciones de tal manera que cumplan un fin mucho mayor.
El arquitecto software tiene un conocimiento de un nivel de abstracción superior que no depende tanto del lenguaje. Escribir una buen poema no depende tanto de si lo haces en español o en italiano, sino de si sabes jugar o no con la métrica. Por eso los arquitectos software no necesitan conocer todos los lenguajes a la perfección para aportar una solución a un problema, solo necesitan saber lo suficiente delél como para poder aplicar patrones y diseños.
La arquitectura software es, por tanto, una maestría que requiere experiencia y que, ciertamente, nunca se deja de aprender y perfeccionar.
Ingenieros e ingenieras, ¿están de acuerdo? ¿cómo mejorarías la analogía?
PD. Estoy preparando el Update de jade #5, ya tenemos cositas! Esta semana tengo bastante lío con cierre del trimestre de Calisteniapp, pero intentaré sacar un hueco para compartir los avances. Business is business.