He leído: The art of Unix programming de Eric S. Raymon

Supongo que lo primero que se preguntan los lectores de este blog al ver el título de este post es ¿qué hace un MVP leyendo cosas sobre Unix? o formulando la pregunta de una manera menos torticera ¿por qué un experto en entornos Microsoft está interesado en Unix?. La respuesta es compleja, pero las motivaciones que me han llevado a leer este libro son:
Unix es un gran sistema operativo, estaba seguro que aprendiendo más sobre Unix me iba a convertir en un desarrollador y arquitecto más valioso. Internet es Unix, Internet es omnipresente. Quieras o no a diario todos usamos sistemas Unix. Me gusta conocer lo que uso.
Conocer los puntos fuertes y débiles de otras plataformas de desarrollo y sistemas operativos te ayuda a detectar, prevenir y minimizar las debilidades de tus soluciones y del entorno en que te mueves, Windows y .Net en mi casos.
Es un libro enormemente citado. Casi todo el mundo que lo ha leído coincide en que es un gran libro que todo amante del desarrollo de software, por encima de afinidades a tal o cual sistema operativo, disfruta leyendo.
A pesar de lo que pueda parece por el título el libro no es un libro sobre programación. No te enseña a programar en Unix. Es un libro sobre historia, arquitectura y cultura informática en general. Es una lectura amena y llevadera, sobre todo si ya has tenido contacto con entornos Unix y te apetece saber por que las cosas son como son en esa plataforma.
La primera parte del libro, de aplicación universal, desgrana las grandes decisiones de arquitectura y circunstancias históricas que han llevado a los entornos Unix a ser como son. Muchísimas de estas decisiones de diseño, tomadas por gente de extraordinaria valía, pioneros de la computación e Internet, esconden extraordinarias lecciones prácticas de arquitectura y diseño de sistemas informáticos. Además se incluye una ‘comparativa’ entre sistemas operativos y las grandes decisiones de diseño que han marcado cada una de ellos que sin duda aporta una interesantísima cultura general sobre el tema que todo arquitecto debería tener. Lo que menos me ha gustado del libro, sin duda, es que no es del todo objetivo en su tratamiento de los sistemas operativos de Microsoft y que se nota que lleva un lustro escrito y no ha sido actualizado con los avances habidos en esta plataforma. Por poner un simple ejemplo se critica la ausencia de una interfaz de línea de comandos potente, algo paliado ampliamente desde la aparición de PowerShell. En esta parte del libro me parecen especialmente destacables e interesantes las reglas que el autor desgrana sobre la filosofía de Unix, ¡son reglas aplicables a cualquier arquitectura!. No se puede discutir que si algo a demostrado Unix es su capacidad para adaptarse a las circunstancias, evolucionando durante cincuenta años para amoldarse y ser una plataforma puntera en todo cambio habido en la informática durante su historia. Sin duda esta capacidad de adaptación y permanencia se deriva de una excelente arquitectura, por eso conocer las reglas que han guiado esa arquitectura es sumamente valioso.
En la segunda parte del libro, se baja de nivel y pasamos de la arquitectura de Unix a su diseño, a detalles concretos de soluciones que se han tomado en el diseño de este sistema operativo y de aplicaciones significativas del mismo. Esta parte del libro es, para mí, la más interesante. Podemos extraer de los casos estudiados en el libro una gran cantidad de conocimiento práctico sobre el diseño de sistemas informáticos. Se tratan todos los temas clásicos del diseño arquitectónico: Encapsulación, ortogonalidad, capas, diseño de protocolos, transparencia, multiprocesamiento, lenguajes embebidos, generación de código, optimización, complejidad… Resumiendo, todo un tratado sobre los grandes temas del diseño de software, vistos no solo desde un punto de vista teórico sino repasando como se han aplicado en esta plataforma y en sus aplicaciones más relevantes.
El libro presenta además un repaso sumamente interesante, en su tercera parte, de las herramientas y lenguajes de programación que permiten llevar a la práctica la lecciones aprendidas sobre arquitectura y diseño. Aquí el libro se convierte en algo mucho más especifico de la plataforma Unix, y por lo tanto las lecciones que aprendemos en esta parte, aunque interesantes y valiosas, no son de universal aplicación.
La cuarta parte del libro está dedicada a la comunidad. No cabe duda que la cultura de comunidad ha sido mucho más rica y tiene una tradición mucho mayor en entornos Unix que en entornos Windows. Esto ha cambiado radicalmente en los últimos años, pero aun así hay lecciones importantes que podemos aprender y otras que aun estamos aprendiendo en el mundo Windows sobre como compartir código, trabajar en proyectos de manera abierta, documentar los proyectos que compartimos, etc... Conocer como el mundo ‘open source’ Unix lleva años haciendo esto, puede enriquecer el mundo ‘open source’ Windows, cada vez más potente y rico y sobre todo nos puede ayudar a evitar reinventar la rueda.
En resumen un libro excelente, más que recomendable, que merece la pena leer y comprar. Sin duda va a ocupar un lugar preeminente en mi biblioteca y con seguridad va a inspirar post en este blog.
¡Un saludo!