Arquitectura de software. Rememorando…
Al hablar de la arquitectura de software, no puedo evitar recordar mis primeros semestres de universidad. Mientras veíamos los conceptos básicos para algunas materias de ingeniería de sistemas, los profesores y algunos autores en sus libros hacían comparaciones entre el desarrollo de software y la arquitectura civil, por ejemplo, hacer la casa de Rocco (el mejor amigo del hombre) vs hacer un edificio. Aunque hacer la casa del Rocco no parezca algo muy complejo, si en un inicio no se planea bien, terminara cayéndose o en un estado pésimo para nuestra mascota.
Expectativa vs realidad |
Los roles de un arquitecto civil y de un arquitecto de
software de cierta manera son muy similares, y se pueden llegar a enfrentar a
los mismos retos. Por ende, para poder construir software/edificios se
necesitan conocimientos y habilidades básicas dependiendo del caso. Porque si
algo está claro es que esto:
No es lo mismo que esto:
Pero también es claro que en ninguno de los casos queremos que se caigan. Entonces, ¿Qué herramientas, personas, presupuesto,
conocimiento y tiempo necesitamos para cada escenario? Pues bien, es importante recalcar que estas mismas
consideraciones (las que se tendrán para definir la arquitectura del edificio),
deberán ser tenidas en cuenta al momento de desarrollar software y definir su
arquitectura.
Otro ejemplo que no podré olvidar de aquellas primeras
clases es el de la Mansión Winchester (No olvido la historia, pero
definitivamente el nombre de la mansión siempre se escabulle, por más famosos
que sean los rifles). En resumen, la historia nos cuenta que una viuda con
mucho dinero en su poder, y de la que se podría desconfiar de su cordura,
durante 38 años mando a realizar construcciones y remodelaciones a su mansión. Como
resultado se obtuvo una mansión con “160 cuartos, incluyendo 40 habitaciones, 7
pisos, 476 puertas, 6 cocinas, 52 tragaluces y 2 vestíbulos. También incluía 47
chimeneas (2 encontradas), 10.000 ventanas con paneles, 2 sótanos, 3 ascensores
y lámparas de gas que se encendían con un botón. Contaba con sólo una bañera y
dos espejos en toda la casa…”.
Hasta ahí la historia no parece tan mal, una viuda que
mando a construir una casa enorme, el problema es que al parecer no contaba con
un muy buen arquitecto ya que algunas ventanas y puertas dan a paredes, las
escaleras no llevan a ninguna parte, puertas en medio de ventanas, entre otras peculiaridades. Si me llego a equivocar con algunos datos de la mansión
me corrigen o las omiten, ya que así el ejemplo para este caso sale a la perfección 😅😅.
La construcción de software puede llegar tener estos mismos
problemas si no se cuenta con un buen arquitecto de software en el proyecto y
peor aún, cuando a un desarrollador le asignan mejorar o corregir un proyecto del
que no se cuenta documentación y en su momento su arquitectura tenía fallas. Este
desarrollador/arquitecto elegirá reconstruir algunas partes del código o crear
nuevas extensiones sin tener en cuenta lo que ya existía. Al final esa aplicación
de software se convertirá en la unión de diferentes retazos, algo similar a la
Mansión Winchester.
“Programar sin una arquitectura en mente es como explorar una gruta sólo con una linterna: no sabes dónde estás, dónde has estado ni hacia dónde vas” - Danny Thorpe
Con esto podemos entender que la arquitectura de software
es la base de un proyecto de software. Esta arquitectura debe ser construida
pensando en satisfacer las necesidades actuales, sin dejar de lado las posibles
evoluciones o mantenimientos que se requiera, según el modelo de negocio y/o
solicitudes de los clientes.
Línea de aprendizaje del Arquitecto de Software.
Mientras que un arquitecto civil puede ser muy bueno en
su trabajo sin saber fundir unas bases, levantar una pared o un techo, un
arquitecto de software si debió pasar por este proceso y haber programado
alguna vez, ser coordinado por un arquitecto y haber ganado algo de experiencia
de él. En la arquitectura de software no vale solo tener la teoría sin haber
realizado algo de práctica.
De la experiencia como desarrollador le debe quedar a
este futuro arquitecto, cual es la mejor manera de realizar un desarrollo en
equipo y cuál era el mejor método que seguía el equipo para cumplir las
indicaciones del arquitecto. Siempre buscando el éxito del proyecto.
Algunas consideraciones…
- En la arquitectura de software, siempre se debe dar prioridad a lo crítico e importante del proyecto. Las necesidades generales del sistema serán resueltas en ultimo.
- Un Arquitecto de Software, se encarga de elegir las estrategias y herramientas necesarias para satisfacer los requerimientos funcionales y no funcionales del sistema.
- Un Arquitecto de Software, debe ser capaz de identificar las necesidades del negocio.
- Un Arquitecto de Software, debe ser capaz de identificar las habilidades de su equipo de trabajo.
- Un Arquitecto de Software, debe ser capaz de identificar la viabilidad de las tecnologías disponibles.
- Un Arquitecto de Software, debe ser capaz de identificar las condiciones a las que será sometido su sistema y pensar en las posibles soluciones para cada escenario.
El ámbito de la arquitectura de software es mucho más
amplio de lo que logro expresar en esta entrada de Blog, pero considero que
puede transmitir una idea general y llegar a dejar una pisca de curiosidad en
quien lo lea. Quizás en una entrada futura profundice en un capítulo específico
de este mundo, por ahora espero lograra mi cometido y generarles más consultas
sobre el tema.
Comentarios
Publicar un comentario