2009/02/04 |
Acabo de terminar de leer Beautiful Code, editado por Andy Oram y Greg Wilson (O’Reilly, 2007). Es un libro excelente; contiene 33 capítulos sobre los más diversos aspectos de la programación y el desarrollo de software, en una gran cantidad de campos de aplicación y en una gran variedad de lenguajes de programación. Citando a Greg Wilson:
In May 2006, I asked some well-known (and not so well-known) software designers to dissect and discuss the most beautiful piece of code they knew. As this book shows, they have found beauty in many different places. For some, it lives in the small details of elegantly crafted software. Others find beauty in the big picture — in how a program’s structure allows it to evolve gracefully over time, or in the techniques used to build it.
En el libro hay de todo: un matcher de expresiones regulares escrito en C, por Brian Kernighan (sí, ese Brian Kernighan); analizadores de logs en Ruby; verificadores de XML escritos en Java; unit tests escritos usando JUnit; generadores de código escritos en C#; árboles parser escritos en JavaScript (!); código para analizar ADN y otras cosas biotecnológicas escrito en Perl; incluso Fortran para problemas de matrices en computadoras paralelas.
Otros capítulos ahondan en la implementación de software de relativamente bajo nivel: el modelo de drivers del kernel Linux, la API de lectura/escritura de archivos en FreeBSD, la implementación de diccionarios en Python (escrito en C), el manejo de locks en Solaris, etc.
Aún más, hay capítulos sobre diseño de aplicaciones grandes, enfocándose en la adapabilidad y flexibilidad a largo plazo: tal es el caso de los capítulos que explican el diseño y desarrollo de Cryptonite, MapReduce, ERP5 y el Collaborative Information Portal (parte de la Mars Exploration Rover Mission de la NASA).
Finalmente, están los capítulos que hablan sobre algoritmos y se enfocan en los detalles de la implementación y análisis de los mismos. Siendo un geek de hueso colorado, estos fueron los capítulos que más disfruté. Entre estos capítulos están el que ya mencioné de Kernighan, un análisis del rendimiento de Quicksort sin implementar Quicksort (convenientemente llamado The Most Beautiful Code I Never Wrote), uno sobre la implementación del algoritmo de conteo de población, uno sobre la implementación del syntax-case expander en Scheme y finalmente un capítulo sobre la implementación de un algoritmo de geometría computacional.
En fin, fue una increíble lectura. Ahora, me toca empezar a leer Applied Cryptography, que me acaba de llegar.