[Parte 1] 9 pasos para que la Arquitectura de Software que ‘siembres’ sea fuerte desde la raíz
Escrito por Paula Ramírez
El mundo empresarial prospera con la información y aunque pueda ser difícil de aceptar, hagas lo que hagas, la tecnología probablemente te ofrezca una mejor manera de hacerlo. No se puede negar. Desde el comienzo de la década, los desarrollos de tecnologías para empresas y organizaciones van tomando fuerza junto con el rápido avance y la evolución de modelos de gestión que han surgido del episodio de “crisis mundial” por la que se ha atravesado en los últimos 6 meses.
El Internet de las cosas (IoT) y la noción de un todo conectado en búsqueda del cumplimento de un objetivo en específico, ha permitido el fortalecimiento del concepto ‘arquitectura tecnológica’ que corresponde a un modelo conceptual que define la estructura, comportamiento, gobernabilidad y relaciones entre el hardware, software, redes, datos, interacción humana y el ecosistema que rodea nuestros procesos de negocio. Podemos visualizarla como una representación de nuestro entorno tecnológico actual y futuro donde describimos de manera general cada aspecto y lo vamos detallando por capas hasta llegar al menor nivel, manteniendo nuestra vista enfocada en las nuevas tecnologías que se desarrollarán bajo una lógica de negocio con el uso de redes, hardware, sistemas operativos, sistemas de administración de bases de datos y estándares de desarrollo de aplicaciones.
La tecnología de la información juega un papel tan importante en los negocios hoy en día, que la mayoría de las empresas tienen empleados dedicados a su uso, creación y administración, pues la arquitectura tecnológica o de software, puede entenderse como una descripción detallada de los diversos activos de procesamiento de información necesarios para cumplir con los objetivos comerciales, las reglas que los gobiernan y la información asociada con ellos.
Vamos a la raíz, ¿nos acompañas?
Empecemos por aclarar dos conceptos que en la práctica pueden llegar a confundirse: La infraestructura tecnológica y la arquitectura tecnológica.
Para entender lo que es la arquitectura tecnológica, debemos ponernos en el papel de un constructor, ¡Vamos a pensar como ellos un rato!
Cuando ves una casa, podrás observar que las cosas que son «importantes», realmente son difíciles de detectar. Hablo de elementos como las varillas, el cableado interno, las tuberías, las columnas y hasta los cimientos, ¿verdad?… Bueno, teniendo esto como referencia, la infraestructura tecnológica por un lado corresponde a los elementos necesarios para que todo funcione de la manera como se espera. En este caso sería el internet, cableado y hasta ordenadores; por otro lado la arquitectura tecnológica es el diseño de cómo se va a ver y cómo encajan cada uno de sus componentes de una forma óptima.
La arquitectura es el plano o el diseño, y la infraestructura son las cosas tangibles.
Lo ideal en este punto, no es sentir un inmenso temor sobre lo que vendrá en un periodo de post pandemia, sino prepararnos con los mejores elementos y herramientas para poder enfrentar la nueva normalidad, y para esto la arquitectura tecnológica es una gran aliada.
Cuando la gente de la industria del software habla de “arquitectura”, se refiere a una noción que a diario crece sobre los aspectos más importantes del diseño interno de un sistema de software. Una buena arquitectura es importante; de lo contrario, será más lento y costoso agregar nuevas capacidades en el futuro.
-
Dato para recordar: Una buena arquitectura es algo que apoya su propia evolución y está profundamente entrelazada con la programación.
Vayamos a lo más profundo, a la “raíz” de la situación para que puedas entender de una mejor forma el término de arquitectura aplicada a la tecnología. No te preocupes, no hay prisa, vamos paso a paso.
¿Qué es la arquitectura tecnológica?
La gente en el mundo del software ha discutido durante mucho tiempo sobre una definición de arquitectura. Para algunos, es algo así como la organización fundamental de un sistema, o la forma en que los componentes de más alto nivel están conectados entre sí. Un segundo estilo común de definición para la arquitectura es que son las decisiones de diseño que deben tomarse al principio de un proyecto y así tener un alto impacto en un mundo cada vez más digital.
Otras de las muchas conclusiones nos llevan hasta la aseveración de que “la arquitectura se trata de lo importante. Sea lo que sea ”. A primera vista, suena trillado, pero si lo analizamos de una manera más detenida, podremos notar que la riqueza de esta premisa está en su simplicidad. Significa poder analizar cuál es el corazón del pensamiento arquitectónico sobre el software, es decidir organizar de una forma panorámica que es importante y luego gastar energía en mantener esos elementos arquitectónicos en buenas condiciones. Para que un desarrollador se convierta en arquitecto, debe ser capaz de reconocer qué elementos son imprescindibles, cuáles pueden generar problemas graves si no se controlan y cómo trabajar en diversas direcciones en pro de un objetivo.
Creo que en este punto, ya nos queda más clara la importancia de la implementación de este tipo de servicios y herramientas dentro de las organizaciones. Y si mezclamos la necesidad de priorizar operaciones, estar en sinergia y los retos que la nueva normalidad trae para diferentes sectores, ¿no se vislumbra entonces a la arquitectura tecnología como algo que se necesita ya?
9 pasos para el diseño y la arquitectura de software
El diseño y la arquitectura de software es prácticamente su propio campo de estudio dentro del ámbito de la informática, como DevOps o UX Design. Te traemos un mapa que describe la amplitud del diseño y la arquitectura de software, desde el código limpio hasta los microkernels.
Nota: Este tema está tomado de Solid Book - The Software Architecture & Design Handbook w / TypeScript + Node.js.
Con esta guía podrás entender cómo:
- Diseñar un sistema para satisfacer las necesidades de sus usuarios.
- Escriba un código que sea fácil de cambiar.
- Escriba código que sea fácil de mantener.
- Escriba un código que sea fácil de probar.
Antes de empezar: define cuál es tu objetivo, está será la semilla de la Arquitectura tecnológica
Antes de construir o mejorar el diseño y la arquitectura de software piensa primero en cuál es el problema que quieres resolver. Asegúrate de que el diseño y la arquitectura del software deben aportar en la satisfacción de las necesidades de tus usuarios, ya que aquel que no lo haga simplemente no es un buen software. Es clave que el software haya sido diseñado para actualizarse constantemente. Si el software no se puede cambiar de forma ágil, eso lo convierte en un mal software y en una inadecuada arquitectura.
Observa el modelo donde cada capa se construye sobre la base de la anterior:
Etapa 1: Código limpio, escoger el lugar adecuado para plantar
El primer paso para crear un software duradero es descubrir cómo escribir código limpio, en la metáfora de hacer crecer nuestro “árbol”, debes encontrar el lugar óptimo para sembrar tu semilla y que esta empiece a germinar. El código limpio es un código que es fácil de entender y cambiar. En el nivel bajo, esto se manifiesta en algunas opciones de diseño como:
- Ser consistente.
- Preferiblemente usar nombres significativos de variables, métodos y clases en lugar de escribir comentarios.
- Asegúrese de que el código esté sangrado y espaciado correctamente.
- Asegúrese que todas las pruebas puedan ejecutarse.
- Utilice funciones puras sin efectos secundarios.
- Evitar pasar valores “null».
Escribir código limpio es increíblemente importante, tan importante como el agua para las plantas. Te recomendamos utilizar, prácticas como la sangría, clases, métodos pequeños y nombres significativos, permitirá un proyecto más estable a lo largo del tiempo y rinde mucho a la larga.
Etapa 2: Paradigmas de programación, la preparación del suelo con fertilizantes
Ahora que estamos escribiendo código legible y fácil de mantener, sería una buena idea comprender realmente los 3 paradigmas principales de programación como 3 tipos de abono o fertilizante para que la estructura o el “árbol” tecnológico crezca con fuerza.
En el libro, » Arquitectura limpia «, llama la atención sobre el hecho de que:
- La programación orientada a objetos es la herramienta más adecuada para definir cómo cruzamos los límites arquitectónicos con polimorfismo y complementos.
- La programación funcional es la herramienta que utilizamos para llevar los datos a los límites de nuestras aplicaciones.
- La programación estructurada es la herramienta que usamos para escribir algoritmos.
Esto implica que el software eficaz utiliza un híbrido de los 3 estilos de paradigmas de programación en diferentes momentos o 3 fertilizantes que en sinergia hacen crecer nuestra estructura. Si bien puede adoptar un enfoque estrictamente funcional o estrictamente orientado a objetos para escribir código, comprender dónde sobresale cada uno mejorará la calidad de sus diseños.
Etapa 3: Programación orientada a objetos, sembrar nuestra semilla
Es importante saber cómo funciona cada uno de los paradigmas y cómo te instan a estructurar el código dentro de ellos, pero con respecto a la arquitectura, la programación orientada a objetos (OOP, según sus siglas en inglés) es la herramienta clara para el trabajo.
La programación orientada a objetos no solo nos permite crear una arquitectura de complementos y generar flexibilidad en nuestros proyectos; OOP viene con los 4 principios (encapsulación, herencia, polimorfismo y abstracción) que nos ayudan a crear modelos de dominio enriquecidos .
La mayoría de los desarrolladores que aprenden programación orientada a objetos nunca llegan a esta parte: aprender a crear una implementación de software del dominio del problema y ubicarla en el centro de una aplicación web en capas .
La programación funcional puede parecer el medio para todos los fines en este escenario, pero es recomendable familiarizarse con el diseño basado en modelos y el diseño basado en dominios. Si lo vemos a modo del proceso de crecimiento de un árbol, sembrar la semilla es importantísimo, pero señalar y hacer la “estructura” del espacio en el suelo en dónde sembramos, también lo es, de esto dependerá el futuro del árbol para que nadie lo pise y no crezca.
¿Por qué es tan importante? Es enorme porque si puede crear un modelo mental de una empresa, puede crear una implementación de software de esa empresa.
Etapa 4: Principios de diseño, demarcar el punto en el suelo en donde está nuestra semilla
En este punto, comprende que la programación orientada a objetos es muy útil para encapsular modelos de dominios enriquecidos y resolver el tercer tipo de «problemas de software»: dominios complejos . Pero OOP puede presentar algunos desafíos de diseño.
- ¿Cuándo debo usar la composición?
- ¿Cuándo debo usar la herencia?
- ¿Cuándo debería usar una clase abstracta?
Los principios de diseño son prácticas recomendadas y orientadas a objetos realmente bien establecidos y probadas en batalla que se utilizan como guardabarros. Algunos ejemplos de principios de diseño comunes con los que debe familiarizarse son:
- Composición sobre herencia
- Encapsula lo que varía
- Programa contra abstracciones, no concreciones
- El principio de hollywood: «No nos llames, te llamaremos»
- Los principios SOLID , especialmente el principio de responsabilidad única
- DRY (Do Not Repeat Yourself)
- YAGNI (You Aren’t Gonna Need It)
Sabemos que en esta entrega te hemos dado mucha información, posturas y ópticas acerca de la importancia de la arquitectura tecnología dentro de las empresas sea cual sea el sector. Entonces, interioriza, piensa y evalúa si necesitas de este proceso dentro de tu organización y si cuentas con ya con él, imagina si necesitas un reajuste o si vas por buen camino, ¡nos vemos en la próxima entrega! para completar nuestras etapas y que consigas una arquitectura fuerte desde la raíz.