El mejor libro de arquitectura

La semana pasada terminé de leer el libro “Building Evolutionary Architectures” y me resultó posiblemente el mejor libro de arquitectura que lei en mi vida (y eso que he leído varios libros sobre el tema).

Compré el libro porque me atrapó el título y ya había leído otras cosas de los autores. El libro no delira con definiciones abstractas, es muy concreto y el planteo de “evolvability” como propiedad de la arquitectura me resultó muy novedoso y super apropiado en la actualidad. Si bien por momentos me hizo un poco de ruido el tono “grandilocuente” con el que se refiere a los arquitectos corporativos, finalmente me terminó convenciendo el lugar y las responsabilidades que les asigna (que lejos está de lo que suelo ver cotidianamente en la industria).

Algunos otros puntos que me parece vale la pena destacar son:

  • La idea de usar fitness functions para verificar el cumplimiento de ciertas propiedades de la arquitectura
  • ¡Habla de testing! Lo cual no es común en los libros de arquitectura
  • Trata diversas cuestiones de negocio/organización que no siempre están presenten en los libros de arquitectura. Entre estas cosas habla de la estructura de equipo.
  • Toma muy en cuenta la arquitectura física y el potencial acoplamiento que esta puede generar.
  • Cubre cuestiones tanto de green field projects como de brown field projects

Si tienen la oportunidad, bien merece dedicarle un tiempo.

Breve reseña de algunos libros de arquitectura

Hace un tiempo escribí una breve reseña sobre libros de patrones de diseño y en ese momento dudé de mencionar algunas libros que finalmente decidí dejar para incluirlos posteriormente en un post sobre libros de arquitectura. Llegó el momento.

Software Architecture in Practice

Este es un clásico, la primera edición data de fines de los 90′. Yo tengo la segunda edición que es del 2003 y hay también una tercera edición del 2012. Es un libro del Software Engineering Institute, un lugar de referencia en todo lo que tiene que ver con Ingeniería y Arquitectura de Software. No es un libro brillante pero sienta algunas bases. La primera parte de libro presenta conceptos y la segunda parte presenta casos. Es un libro bien conceptual, no se centra en tecnologías aunque obviamente hace alguna mención tecnológica cuando presenta los casos.

Designing Software Architectures

Este libro también es de la gente de SEI aunque me parece que es mucho menos conocido que el anterior, tal vez porque es más reciente, fue publicado en 2016. Este libro me resultó mucho más entretenido que el anterior, es más corto y está enfocado concretamente en cómo diseñar una arquitectura. Me gustó tanto el enfoque de Architectural Drivers que lo incluí en mi materia de FIUBA.

Patterns of Enterprise Application Architecture

A estas alturas este libro también se ha convertido en un clásico y me animo a decir que este libro en particular posiblemente sea uno de los libros de arquitectura de software más famosos actualmente.

Este libro fue escrito por Martin Fowler y fue publicado en 2002 dentro una serie de Addison-Wesley que lleva a firma del propio Fowler. Creo que casi todos los libros de esta serie están relacionados a cuestiones de arquitectura. Este libro lo leí en digital y hace tiempo que lo tengo anotado en lista de compra de libros físicos.

Beyond Software Architecture

Este libro también es de la serie Martin Fowler de Addison-Wesley, tal vez el menos famoso de esa serie, pero curiosamente es un libro muy interesante. Trata de cuestiones, que como su nombre lo indica exceden la idea tradicional de arquitectura pero que tienen una relación directa. Cuestiones tales como instalación, configuración, actualización, modelo de licenciamiento, etc.

Microsoft .NET: Architecting Applications for the Enterprise

Me compré este libro por uno de los autores: Dino Esposito. Ya había leído otros libros de él que me parecieron muy buenos y este no fue la excepción. A pesar de ser un libro centrado en tecnología .NET los temas están presentados de una forma tal que son fácilmente portables a otras tecnología. Al presentar un tema primero hay un capítulo que presenta el tema conceptualmente y a continuación en otro capítulo se centra en la implementación en tecnología .NET. en un primera parte el libro trata algunos temas conceptuales como SOLID y luego va analizando distintos patrones de arquitectura con bastante nivel de detalle. Cubre particularmente bien Domain Model, CQRS y Event Sourcing.

Just Enough Software Architecture

Este libro propone un enfoque de definición de arquitectura basado en riesgos que me resultó concreto y afín a mis propias ideas. A diferencia de otros libros de arquitectura que “le hablan al arquitecto”, este libro “le habla a developers”. El libro pone un foco importante en el modelado pero también toca de forma superficial algo de patrones.

Application Architecture Guide

Es es un libro gratuito (la versión digital) publicado por el grupo de Prácticas y Patrones de Microsoft.

Es básicamente un libro de patrones de arquitectura. Habla de atributos de calidad y propone un método para definir la arquitectura de un sistema. Resulta interesante que el libro contempla distintos tipos de arquetipos de aplicaciones: web, desktop, mobile, rich clients, etc. Más allá de que es un libro de Microsoft y que como tal tiene foco en su tecnología, creo que la mayor parte del contenido es agnóstico de tecnología. Es así que en mi materia de FIUBA leemos un par de capítulos.

Building Microservices

Este libro de Sam Newman ha cobrado mucha popularidad en los últimos años. Creo que es un libro muy interesante porque más allá de los conceptos de microservicios sirve también para entender un conjunto de técnicas y estrategias muy en moda en la actualidad, cuestiones tales como: Circuit breakers, Api Gateaways, Api Vesioning, etc.

Yo leí primeramente una versión preview de 3 capítulos que conseguí gratuitamente, con eso me bastó para decidir comprar el libro completo.

Building Evolutionary Architectures

Este libro aún lo estoy leyendo. Me parece muy bueno. La premisa central del libro es que la arquitectura de una aplicación no es estática, puede necesitar cambiar a lo largo del tiempo, pero independientemente de cómo evolucione hay ciertas propiedades que uno querrá asegurar que siempre se cumplan. En este sentido el libro analiza puntos fuertes y flojos de distintas arquitecturas y provee herramientas para facilitar la evolución de de una arquitectura.

He leído algunos libros más que podrían entrar en esta categoría de arquitectura pero estos son los que más me han gustado y me parece que merecían recomendación.

Breve reseña de algunos libros de patrones diseño

Continuando con el tema de patrones del post anterior, se me ocurrió compartir esta breve reseña de algunos libros de patrones diseño de mi biblioteca.

Design Patterns, de Gamma y amigos

Este es EL libro de patrones de diseño que acuñó el término. Es un clásico, tiene dos capítulos introductorios y luego presenta los patrones agrupados por tipo de patrón: de creación, de comportamiento, de estructura, etc. El conjunto de patrones presentados en este libro son comúnmente denominados “los patrones de Gamma”.
Una curiosidad del libro es que utiliza una notación gráfica para representar clases que es anterior (pero muy parecida) a UML. Por esas cosas de la vida que por momentos resultan inexplicables me compré la edición en castellano de este libro.

UML and Patterns, de Larman

Este es otro libro que para mi también es un clásico. Este libro tiene dos cuestiones que me gustan mucho. Por una la lado es un libro que presenta el uso de patrones de diseño en el contexto de un proceso de desarrollo en este caso el Proceso Unificado. Por otro lado, más allá de los patrones Gamma, este libro presenta un conjunto de patrones que denomina GRASP:

Este libro lo tomamos como referencia hace un par de año con @dfontde cuando armamos la primera versión de la materia Análisis y Diseño Orientado a Objetos en UNTreF.

Implementation Patterns, de Kent Beck

Tengo la sensación que este libro es muy poco conocido pero a mi me gustó mucho. Ma animaría a decir que es un libro de patrones de código, o sea son patrones “de bajo nivel”. Si bien el código está en escrito en Java, muchas de las cuestiones son más de programación orientada a objetos y por lo tanto resultan aplicables incluso cuando uno no trabaje con Java. En InfoQ hay una interesante entrevista a Kent Beck sobre este libro.

C++ Coding Standards, de Sutter & Alexandrescu

El subtitulo del libro es “101 Rules, Guidelines and Best Practices” y si bien ni título ni subtítulo hacen referencia a patrones el libro perfectamente puede clasificarse como un libro de patrones. Las recomendaciones/patrones son específicas de C++ y en general no son extrapolables a otros lenguajes. Cuando los patrones son específicos de un lenguaje, como en este caso, se los suele llamar idioms. Este libro me llegó por mera casualidad hace unos 15 años en la época en que cursaba Taller de Programación 1 en Fiuba donde aprendí C++ en profundidad.

Applying Domain-Driven Design and Patterns, de Jimmy Nilsson

Este libro fue publicado en 2006, y si bien el subtítulo “With Examples in C# and .NET“, varias de las cuestiones expuestas son extrapolables a otras tecnologías. De hecho el libro es una bajada a C#/.NET de las ideas de dos libros: Patterns of Enterprise Applicacion Architecture (fowler) y Domain Driven Design (Evans). A pesar de ser un libro de que tiene ~15 años, creo que sigue vigente.

En un próximo post, escribiré sobre algunos otros libros que no son específicamente de patrones sino de temas muy relacionados.

Libro de Desarrollo Ágil de Software by 10 Pines

Fede Zuppa junto a otros colegas de 10 Pines están escribiendo un libro sobre desarrollo ágil de software. El libro está aún en proceso de escritura pero periódicamente Fede publica versiones preliminares. Tuve la oportunidad de leer una de esas versiones y a pesar de ya estar familiarizado con los temas abordados me pareció un material muy valioso.

Las explicaciones son claras y los distintos temas están presentados desde la experiencia práctica de 10Pines. Aquellos que gusten darle una leída las versiones preliminares pueden encontrarlas aquí.

Libro: Agile Software Requirements

Por estos dias estoy leyendo el libro Agile Software Requirements, de Dean Leffingwell, un libro que compré el año pasado pero que en aquel momento leí apenas algunos capítulos. El libro pertenece a la serie Agile Software Development de Addison-Wesley cuyos editores son Alistair Cockburn y Jim Highsmith. La edición física es excelente, es un libro tapa dura con un formato de página muy ameno a la lectura.

El autor, Dean Leffingwell, ha cobrado cierta popularidad en los últimos años por ser el creador de SAFe, uno de los enfoques de escalamiento de Agile más difundidos en la actualidad. Sin embargo yo ya conocía a Leffingwell por un libro anterior que escribió a fines de los 90′: Managing Software Requirements: A Unified Approach.

El libro propone un enfoque ágil para el manejo de requerimientos a distintos niveles: empresa, programa y equipo. En cierto modo el enfoque propuesto es como una precuela de SAFe (digo esto sin conocer demasiado de SAFe). Aunque aún no terminé de leerlo, me parece que el enfoque propuesto es muy completo sobre todo teniendo presente que inicialmente el foco de los métodos ágiles estaba a nivel de equipo. Me parece importante destacar que el libro no se queda solo en el tema de requerimientos, sino que también tiene capítulos enteros dedicados a temas como arquitectura, planificación y testing entre otros.