El arte de la programación en UNIX, un libro “must read”

Hoy traigo una recomendación de lectura. Una joya para cualquier desarrollador que tenga y mantenga la eterna curiosidad por ser mejor, o para poder guiar a un equipo o departamento o empresa dedicada a la construcción de aplicaciones informáticas, en todo el amplísimo sentido que tiene estas simples palabras.

Dos cosas me llaman la atención. Primero que es absolutamente gratis. Lo puedes leer online, o descargártelo. Y tiene el contenido y la extensión que ya quisieran para sí muchos libros “míticos” bastante costosos.

Lo segundo es que es un compendio de sabiduría y experiencia, y comparto con su autor, Eric Steven Raymond, la visión de que el software propietario o abierto, gratuito o de pago y sin importar su procedencia, es totalmente merecedor de todo el respeto. Y sus constructores.

Lo cual, al igual que a Eric, me lleva a mirar con muy poco agrado las paranoias de Stallman, de los fanboys o los talibanes que pululan por las redes sociales.


Sobre qué trata


Una curiosidad es que, al ser escrito inicialmente a finales de los 90 del siglo pasado, C# y la plataforma .NET entera no existe.

Otra es que según sus palabras, este libro debería ser leído –básicamente- por programadores experimentados. Lo cual hasta cierto punto estoy de acuerdo, porque trabaja a un nivel bastante abstracto sin entrar en el código en sí.

Es importante a tener en cuenta que la obra tiene una gran parte sobre filosofía de la programación en UNIX, o en cualquier programación actual. Y tiene una parte práctica que podría ser interesante sobre todo a desarrolladores sobre Linux, de tal palo tal astilla, y al resto de las plataformas para entender las tripas de un SO complejo como este.

Además tenemos los capítulos relacionados con desarrollos Open Source desde un punto de vista de arquitectura, de gestión de equipos de desarrollo y de arquitectura física y lógica. Algo muy desconocido por casi todos los programadores que de por sí pocos son líderes de equipos, aún menos de equipos desarrollando Open Source.

Principios de la filosofía UNIX


El resumen y el concepto que tengo que mantener continuadamente en el desarrollo de mi profesión es el principio inicial de la filosofía Unix: KISS.

Y que básicamente dice que en la simplicidad está la belleza y la eficacia. Principio que rompemos una y otra vez buscando la excelencia por medio de complicar y complicar cada vez más el código o la arquitectura o la metodología de trabajo o cualquier cosa que pueda hacerse complicada. Cayendo en el error de pensar que cuanto más complejo mejor.


La ‘filosofía Unix’ se originó con meditaciones tempranas de Ken Thompson sobre cómo diseñar un sistema operativo pequeño pero potente con una interfaz sencilla…

…Absorbió las lecciones de muchas fuentes en el camino.

La filosofía de Unix no es un método de diseño formal. No fue dictada desde las altas esferas de la ciencia computacional teórica como una manera para producir software teóricamente perfecto. Tampoco es el espejismo perenne del Ejecutivo: alguna forma para extraer mágicamente software innovador pero confiable en un plazo demasiado corto de programadores desmotivados, mal gestionados y mal pagados.

Los principios según Doug McIlroy

En el capítulo de “Basics of the Unix Philisophy” el autor nos muestra diferentes aproximaciones por los padres de UNIX que de por sí son perlas de sabiduría del desarrollo. Me quiero referir a la visión de Doug Mcllroy, inventor de los pipeline de software, y que dice:

  • Haz que cada programa haga una sola cosa bien. Para hacer un trabajo nuevo, empieza desde cero en lugar que desde código antiguo al que ir añadiendo complejidad.

  • Supón que cada output de tu código va a ser el input de otro que desconoces. No ensucies este output con información extraña. No utilices formatos binarios para los input. No insistas en los input interactivos.

  • Diseña y desarrolla el software para ser publicado, idealmente, en un plazo de semanas. No dudes en tirar las partes “torpes” y reconstruirlas.

  • Utiliza herramientas, con preferencia a las ayudas no cualificadas para iluminar una tarea de programación, incluso si tenemos que desviamos para construir dichas herramientas. Y hazlas como si fueran a ser publicadas, algunas de ellas, después de que se termine de usarlas.

En resumen el vio la filosofía Unix así,

This is the Unix philosophy: Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface.

Esta es la filosofía UNIX: Escribe programas que hagan una sola cosa y que la hagan bien. Escribe programas para que trabajen en conjunto. Escribe programas que manejen cadenas de texto, porque estas son un interface universal.

Reglas de la filosofía


La filosofía UNIX se puede resumir en una tabla de reglas que, de forma sorprendente, siguen totalmente vigente y con aún mayor importancia en nuestros tiempos.

  • Regla de modularidad: escribe partes simples conectadas mediante interfaces limpias.

  • Regla de claridad: legibilidad es mejor que el ingenio.

  • Regla de composición: diseña programas para conectarse a otros programas.

  • Regla de separación: separa las reglas del mecanismo; separa las interfaces de los motores.

  • Regla de simplicidad: diseña con simplicidad; añade complejidad sólo cuando es necesario.

  • Regla de parsimonia: escribe un programa grande sólo cuando este claro por la demostración de que no se puede hacer de otra manera.

  • Regla de transparencia: diseña con legibilidad para hacer la inspección y depuración más fácil.

  • Regla de solidez: la solidez es la hija de la transparencia y la simplicidad.

  • Regla de representación: dividir el conocimiento en datos puede hacer la lógica del programa estúpida y robusta.

  • Regla de la menor sorpresa: en el diseño de la interfaz, siempre haz lo menos sorprendente.

  • Regla del silencio: cuando un programa no tiene nada de sorprendente, no debería decir nada.

  • Regla de reparación: cuando se deba fallar, hazlo ruidosamente y tan pronto como sea posible.

  • Estado de la economía: el tiempo del programador es caro; conservarlo en preferencia al tiempo de máquina.

  • Regla de generación: evitar la programación manual; escribe programas para escribir programas cuando sea posible.

  • Regla de optimización: prototipa antes de pulir; construye trabajo antes que optimizar.

  • Regla de diversidad: desconfían de todos los que hablan de “el único camino verdadero”.

  • Regla de extensibilidad: diseña para el futuro, porque antes de lo que crees estará aquí.

En resumen, un libro que merece una lectura en profundidad para entender de una forma mucho más profunda la visión de los grandes desarrolladores de nuestros tiempos.

Que lo disfrutes,

Autor | Eric S. Raymond
Enlace de descarga | En Open Libra | The Art of Unix Programming

Portada de Genbeta