EdificioMe encanta escribir títulos llamativos, especialmente cuando, como este, tienen un significado importante que no es evidente al principio. Una de las definiciones de arquitectura de Ralph Johnson es "La arquitectura trata sobre las decisiones que deseamos se tomen bien al principio del proyecto". ¿Por qué las personas sienten que necesitan hacer algunas cosas desde el principio del proyecto? Por supuesto, la respuesta es porque perciben que algunas cosas son difíciles de cambiar. Entonces podríamos terminar definiendo a la arquitectura como "las cosas que las personas perciben como algo difícil de cambiar".

Es de conocimiento público que si estamos contruyendo una aplicación corporativa debemos crear correctamente el esquema de base de datos desde el principio, porque es difícil cambiar el esquema - en particular si el software ya salió a producción. En uno de nuestros proyectos, el administrador de bases de datos encontró un sistema que nos permitía cambiar el esquema (y migrar datos) de forma muy simple. Al hacer esto, logró que la base de datos ya no formara parte de la arquitectura. Y es algo completamente bueno, porque nos permite manejar mejor al cambio.

En una fascinante charla en XP 2002, el economista Enrico Zaninotto analizó los fundamentos de las ideas ágiles en la industria y en el desarrollo de software. Un aspecto particularmente interesante fue su comentario sobre la irreversibilidadla irreversibilidad es uno de los principales causantes de la complejidad. Los métodos ágiles son un cambio que buscan acotar la complejidad reduciendo la irreversibilidad - en vez de atacar otros causantes de complejidad. Creo que una de las tareas más importantes de un arquitecto es quitar la arquitectura encontrando formas de eliminar la irreversibilidad en los diseños de software.

Terminamos con otro mensaje de Johnson, esta vez respondiendo un email que le mandé: 

Una de las diferencias entre la arquitectura de las construcciones y la arquitectura del software es que resulta muy dificil cambiar muchas de las decisiones que toma un arquitecto de construcciones. Es dificil cambiar de idea y mover el sótano de lugar, aunque es posible.

En la teoría no existe ningún motivo para que algo sea dificil de cambiar en el software. Podemos elegir cualquier aspecto del software y hacerlo fácil de cambiar, pero no sabemos cómo hacer que todo sea fácil de cambiar. Cuando hacemos que algo sea fácil de cambiar agregamos un poquito más de complejidad al sistema total, y al hacer todo facil de cambiar hacemos que el sistema total sea muy complejo. La complejidad es lo que hace que el software sea difícil de cambiar. Eso, y la duplicación.

Mis reservas con la Programación Orientada a Aspectos (AOP) es que ya tenemos técnicas bastante buenas para separar aspectos en los programas, y no las usamos. No creo que el probelma real se resuelva con mejores técnicas para separar aspectos. No sabemos cuáles deberían ser los aspectos a separar, y no sabemos cuándo vale la pena separarlos y cuando no.

A diferencia de los edificios, el software no está limitado por la física. El software está limitado por la imaginación, por el diseño, por la organización. Resumiendo, el software está limitado por las propiedades de las personas, no por las propiedades del mundo. "Encontramos al enemigo, y somos nosotros mismos".

Traducido de Who needs an Architect?, por Martin Fowler.

Inspiración.

"Si tú tienes una manzana y yo tengo una manzana e intercambiamos las manzanas, entonces tanto tú como yo seguiremos teniendo una manzana cada uno. Pero si tú tienes una idea y yo tengo una idea, e intercambiamos las ideas, entonces ambos tendremos dos ideas"

Bernard Shaw