h1

Codigo Hermoso / Beautiful Code

08/21/2007

Wizbook [Icon by Buuf]  Libros: Software Engineering.
Justo hoy terminé de leer el libro "Beautiful Code", (ISBN 0-596-51004-7) escrito por Andy Oram y Greg Wilson. Considero pertinente decir que es un libro iluminador: no se trata de mostrar programas con corazoncitos o que formen figuras con el ASCIII, sino soluciones a problemas difíciles de maneras extraordinariamente simples, elegantes y contundentes. De hecho, ésta es la tesis de los autores con respecto al código hermoso. Del prefacio:

¿Cómo es que los expertos solucionan problemas difíciles en el desarrollo de software? En este único y profundo libro, algunos de los científicos en computación más importantes nos ofrecen casos de estudio que revelan cómo ellos han encontrado soluciones inusual y cuidadosamente diseñadas para proyectos de alto perfil… Código Hermoso es una oportunidad para los maestros codificadores de contarnos su historia.

A diferencia de otros libros donde se enfocan en la teoría, aquí se presentan en cada capítulo los casos de estudio como problemas en el contexto de un dominio muy particular (por ejemplo, un algoritmo de búsqueda, una arquitectura empresarial o un modelo de testing) y cómo se resolvieron. Adicionalmente, no sólo se quedan en el modelo conceptual sino cómo se realizó la implementación (mostrando el código de la solución): van desde el core de Solaris o el modelo de drivers de Linux escritos en C, la implementación de Diccionarios en Python, hasta el Collaborative Information PortalCIP utilizado por la NASA para la exploración de Marte implementada en… ¡Java Enterprise Edition!

Aplicándose "Pensamientos para el levantamiento"*

Por otro lado, además de los aspectos técnicos mostrados a lo largo del libro, los autores de los fragmentos de código filosofean un poco acerca del dominio del problema, y ciertos detalles de la naturaleza de las cosas que son muy útiles en la vida diaria. Por ejemplo, en el Capítulo 3: El código más hermoso que jamás haya escrito, el autor comenta que en alguna ocasión escuchó cómo elogiaban a un master de masters diciendo que "Añadía función al borrar código". Como él mismo elabora, esto puede generalizarse con la frase atribuida a Antoine de Saint-Exupéry (escritor Francés autor de El Principito): Un diseñador sabe que ha alcanzado la perfección no cuando ya no haya más que agregar, sino cuando ya no hay nada más que quitar. Por cierto, el código en cuestión es el famosísimo Quicksort (para ordenar un arreglo de elementos de manera eficiente, con una complejidad de O(n.log2n)):

void quicksort(int l, int u)
{
    int i, m;
    if (l >= u) return;
    swap(l, randint(l, u));
    m = l;
    for (i = l+1; i <= u; i++)
        if (x[i] < x[l])
            swap(++m, i);
    swap(l, m);
    quicksort(l, m-1);
    quicksort(m+1, u);
}

Los Marcianos llegaron ya…

El que llamó a sobremanera mi atención fue el Capítulo 20: Un sistema empresarial altamente confiable para la misión Mars Rover de la NASA. Esto por tres razones:

  1. A diferencia de otros capítulos, donde describen una parte especifica de un sistema (como la búsqueda de logs o cómo parsear XML de manera más eficiente), aquí hablan de la plataforma en su conjunto. Más específicamente, de la arquitectura de la solución, que por cierto, es un SOA (con web services y todo), implementada en Java, Enterprise Edition con… ahh… BEA Weblogic.
  2. El usuario de la solución es nada más y nada menos que el equipo de ingeniería de la NASA, administradores del proyecto y todo el personal científico alrededor del mundo relacionado a la misión Mars Exploration Rover, que adicionalmente, es un proyecto que sigue vivo, cumpliendo y sobrepasando todas las espectativas.
  3. Con todo y los desmadres de la NASA (siendo el caso del Challenger el ejemplo más citado), siempre he considerado a esa dependencia como sinónimo de calidad, confiabilidad y alto desempeño, siempre tomando en cuenta las restricciones de tiempo y costo. Después de todo, ahí no arriesgan la calificación de un alumno o la entrega tardía de un pedido, sino vidas humanas y millones de dólares en equipo de alta tecnología.
El Mars rover

El Spirit en la superficie marciana.
(Foto propiedad de la NASA)

Por razones de copyright y espacio, me es difícil incluir la definición completa del sistema (¡ja! incluso un esbozo de la misma puede ser complicado), pero baste decir que es una señora arquitectura que califica como una obra de arte de ingeniería. Una buena especificación, aunque por encimita, puede encontrarse entre los documentos públicos de la NASA.

… y llegaron bailando cha-cha-cha

Como conclusión, las grandes obras de ingeniería parten de dos simples requisitos:

  1. Conocer bien el dominio del problema.
  2. Saber qué herramientas usar.

Así pues, recomiendo mucho este libro, tanto para programmer wannabes como para masters de masters veteranos pues aunque los ejemplos son muy específicos, nos dan una muy buena idea de cómo debería desarrollarse el software. Los mismos autores hacen una reflexión que me paró los pelos de punta:

A los arquitectos se les enseña a ver las construcciones, y a los compositores estudiar las partituras de sus compañeros, pero los programadores ven el trabajo de otros sólo cuando hay un bug que corregir; e incluso entonces, tratan de ver el código lo menos posible. Les decimos a los estudiantes cómo usar nombres de variables sensibles, los introducimos a algunos patrones de diseño básicos y luego nos preguntamos por qué tanto de lo que escriben es tan feo.

[*] En honor a la sección Pensamientos para el levantamiento que pasa en el programa de radio Toño Esquinca y la Muchedumbre de lunes a viernes de 6:00 a 6:30 AM en MIX 106.5 FM con Antonio Esquinca como locutor.

One comment

  1. […] mantenibles y hacen más con menos. Por ello, vale la pena leerse valiosos ejemplares como Beautiful Code o The Pragmatic Programmer y luego poner todo en práctica: en el mercado laboral actual, un […]



Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: