¿Que es la arquitectura de software? y ¿que se necesita para ser arquitecto?, primero, se confunde generalmente la arquitectura de software con la ingeniería de software, yo creo que la arquitectura de software forma parte de uno de los procesos de la ingeniería de software, mientras la ingeniería de software se preocupa del proceso de creación software completo, con una visión sistemática y completa, la arquitectura de software se enfoca sólo al proceso de diseño de un producto o sistema, donde no solo se tiene que preocupar del diseño de los algoritmos involucrados en el desarrollo, sino tener una visión general mucho más amplia teniendo clara las interacciones del software y enfocándose en los diferentes puntos que implican calidad del mismo, Philippe Kruchten lo explica mucho mejor que yo, dice:
”La arquitectura de software, tiene que ver con el diseño y la implementación de estructuras de software de alto nivel. Es el resultado de ensamblar un cierto número de elementos arquitectónicos de forma adecuada para satisfacer la mayor funcionalidad y requerimientos de desempeño de un sistema, así como requerimientos no funcionales, como la confiabilidad, escalabilidad, portabilidad, y disponibilidad.”
Pese a no estar de acuerdo con Philippe Kruchten en aspectos metodológicos, que tienen que ver con la ingeniería del software más que con la arquitectura, creo que su definición es bastante acertada y me quedo con ella.
Y ahora ¿que se necesita para ser arquitecto?, me parece que es una lista de características que puede llegara ser infinita, por lo que sólo resumiré algunas de las que encuentro más importantes.
- Conocimiento: Claramente una característica de un arquitecto de software es el conocimiento, de la plataforma, de la forma de trabajar, del negocio, de la tecnología y del equipo, no es necesario que lo sepa todo a la perfección, ya que para eso son los especialistas, pero sí debe tener el conocimiento suficiente para poder tomar decisiones que ayuden a mejorar la sinergia de todos los aspectos mencionados, ya que todas esas son las aristas de conocimiento que se deben tomar en cuenta, que se saca con impulsar una iniciativa de tecnología si nadie puede trabajar en ella, o hace que el negocio responda lento y sea inviable, o que no se tengan los medios económicos necesarios para soportarla.
- Experiencia: No solo el conocimiento teórico es necesario, entre las funciones del arquitecto está lidiar con personas y problemas de la tecnología, y problemas que en teoría no ocurren y problemas que en la teoría ocurren y están bien documentados, pero en la práctica no son importantes o que el modelo de negocio está construido de tal forma que tales condiciones no se dan, para esos casos la experiencia es necesaria y absolutamente importante.
- Liderazgo y negociación: No vivimos en un mundo ideal donde todo el mundo nos espera y podemos escribir un código muchas veces hasta que estemos orgullosos de ellos, estamos supeditados a tiempos, plazos, expectativa y factores humanos, es por eso que un buen arquitecto debe saber qué hacer, cómo lidiar con las circunstancias y que sacrificios hacer para poder cumplir con las expectativas y plazos, sin dejar de lado la motivación al equipo, la capacitación constante al mismo y trabajar como facilitador para eliminar problemas y prácticas que entorpecen el desempeño normal y correcto del equipo.
- Visión del negocio: Una de las cosas más importantes bajo mi punto de vista, la informática es una ciencia de apoyo, y, amenos que sea en un contexto de investigación, no se hace arquitectura de software por arquitectura de software, si no para resolver problemas en función del negocio, no hay que perder de vista el negocio, el arquitecto es la pieza clave que debe tener la capacidad de alinear los proyectos con la realidad tecnológica y hacerlos coexistir en función del negocio y las metas de negocio.
Uno de los mejor libros que he leído sobre arquitectura de software es Software Architecture: Foundations, Theory, and Practice, tiene una visión moderna de la arquitectura de software, es muy detallado y se mezcla con los conceptos de Ingeniería de Software, muestra como se involucra la arquitectura en cada una de las etapas de la ingeniería de Software, y sobretodo mantiene la visión que muestra la arquitectura no como una etapa de la construcción del software, si no como parte integral del proceso de desarrollo, no importando en que etapa se encuentra. Si tienen oportunidad de leer este libro, se los recomiendo, es un libro que parece ser de carácter universitario, con ejercicios y todo al final del capítulo, muy bueno para reforzar el conocimiento, para el resto de los puntos, solo la experiencia es lo que mejor puede ayudar.
Deja una respuesta