1 Introducción

No tengo una buena definición de los que es Diseño de Software o de Arquitectura. De hecho, no me gusta la palabra Arquitectura al hablar de software, porque creo que la metáfora está mal aplicada. Otra cosa sería Arquitectura de Sistemas. Me explico.

Yo veo la Arquitectura como un saber que se ocupa de cómo se sostienen las cosas. Es decir, cómo los componentes colaboran entre sí para distribuir y gestionar las fuerzas que intervienen en que las construcciones se sostengan y perduren, permitiendo a las personas desarrollar su vida en ellas.

Sin embargo, lo que llamamos Arquitectura en Software se ocupa más bien de cómo los distintos componentes colaboran comunicándose. La arquitectura de software define las reglas que dicen qué componentes pueden hablar entre ellos y cuáles no, cuál es la dirección de la comunicación y quién se encarga de qué.

Por esa razón, personalmente me gusta más el término Diseño de Software, más que Arquitectura. Porque creo que, dentro de sus limitaciones, captura mejor la idea de lo que representa para mí.

En este libro hablo de Diseño de Software. De principios, patrones y prácticas, por ser más preciso. La mayor parte de su contenido nació como hilos en Twitter. Durante una temporada usé este medio para exponer algunas ideas. Para mi sorpresa, esta iniciativa tuvo buena acogida y cierto éxito. Hasta el punto de que hay quien me reconoce por los hilos de Twitter, lo cual no sé si será bueno o malo, pero es lo que hay.

Obviamente, con esos orígenes no puedes esperar que este libro sea un manual de referencia sobre diseño de software. Es más bien una colección caótica de ideas que he ido aprendiendo o elaborando a lo largo de los años como desarrollador. No pretendo que sea una obra de consulta, ni mucho menos. En todo caso, puede ser una introducción ligera y no demasiado rigurosa a una serie de temas que como desarrolladoras deberíamos considerar.

Pienso que hay una diferencia entre programar y desarrollar. Diría que programar es el hecho de describir un proceso en un lenguaje de programación para que un ordenador lo pueda ejecutar. En ese sentido, cualquiera puede programar. Y está genial que quien quiera hacerlo, por afición o por necesidad, aprenda. Es un poco como cocinar: cualquiera puede cocinar, pero no todo el mundo puede convertirse en chef.

Desarrollar software, por su parte, requiere considerar más cosas. Es una actividad compleja, que incluye elementos técnicos, sociales y lingüísticos. Desarrollamos software en equipos que integran personas, de negocio y técnicas. Software que debe servir a personas, nuestras clientas y clientes. Software que debe contribuir a lograr los objetivos de una empresa, que tiene que generar un valor, que tiene que responder a circunstancias cambiantes, que tiene que poder mantenerse en el tiempo, que tiene que tener fiabilidad y resiliencia.

Para conseguir esto no basta con saber programar. Es necesario considerar muchas más cosas. Por eso, este libro recoge algunas de ellas:

  • Principios que nos ayudan a tomar decisiones.
  • Patrones que nos ayudan a resolver problemas comunes.
  • Prácticas que resultan útiles para desarrollar software de forma sostenible.

Desarrollar software es algo más grande que saber programar. Es una profesión apasionante, que estamos construyendo entre todas y todos y en la que estamos constantemente aprendiendo, descubriendo formas nuevas y mejores de hacer cosas. Y también es una gran responsabilidad.

Nuestro trabajo tiene impacto en la vida de muchas personas. Puede facilitar su vida, potenciar sus capacidades, expandir sus relaciones personales, ahorrarles tiempo para dedicarse a lo que les importa de verdad, darles acceso a posibilidades nuevas, ayudarles a disfrutar sus pasiones y un larguísimo etcétera.

Por eso tenemos que preocuparnos de desarrollar software que no solo funcione, sino que esté bien hecho, que se pueda entender, que sea honesto y fácil de intervenir en él.

Y me encantaría que este libro te ayude a hacerlo así.