[LinuxFocus-icon]
LinuxFocus article number 313
http://linuxfocus.org

[Aquí debería ir una foto mía...]
por Edgar Hernández Zúñiga.
<edgar(en)linuxfocus.org>

Sobre el autor:

Aquí debería escribir un poco de mi pero no hay tiempo para ello.

Revisión bibliográfica: El Arte de Programar en Unix.

[Illustration]

Resumen:

La presente revisión bibliográfica tratará de mostrar una perspectiva clara y concisa de los temas centrales del libro que para la fecha en la que se lee esto, debe estar listo para su venta.

La revisión se basó en la versión 0.87 del libro, ejemplar previo a la publicación que se me hizo llegar para evaluarlo antes de su publicación, en el transcurso de la realización de este artículo me di cuenta de que la amplitud del tema que trata, aunado a la calidad de la manera en la que lo hace, quizá merecería un artículo más para continuar exponiendo ampliamente las características del libro, espero que sea así.

Título revisado: El Arte de Programar en UNIX.
Título original: The Art of UNIX Programming.
Autor(es): Eric S. Raymond.
Colaboraciones: Thompson, Kernighan, McIlroy, Arnold, Bellovin, Korn, Gettys, Packard, Lesk, Feldman, McKusick, Spencer.
Páginas: 550 en esta versión.


_________________ _________________ _________________

 

Introducción

Eric S. Raymond, conocido por todos por La Catedral y El Bazar, realiza un trabajo excepcional. Este libro será publicado en breve pero puede encontrarse en línea y es, de hecho, con base en esa gran recopilación de información basada en horas y horas de investigación y procesos que se nos permite tener una visión general de muchas de las tecnologías y elementos que conforman a los sistemas Unix y a algunos de sus derivados, por la que se ha conseguido llevar a la imprenta este libro.

El trabajo de Eric S. Raymond se ve apoyado de gran manera por la colaboración de grandes nombres, entre ellos Ken Thompson, Brian Kernighan y Dennis Ritchie; curiosamente son el primero y último de quienes acepta haber recibido la motivación para realizar este trabajo.

El libro se encuentra dividido en cuatro partes esenciales:

  • Contexto
  • Diseño
  • Implementación
  • Comunidad

  • Cada una de estas partes contiene diversos temas que van desde Conceptos básicos de la filosofía Unix perteneciente al Contexto, hasta Mejores prácticas para trabajar con desarrolladores de Código Abierto, pasando por conceptos de Modularidad, Diseño de protocolos para aplicaciones, Transparencia, Minilenguajes y Complejidad en Diseño y Lenguajes y Herramientas en la parte que corresponde a la Implementación. Además de todo esto, cada vez que se hace necesario se muestra un ejemplo práctico que permite al lector incrementar la compresión de la lectura.

    Muy a mi pesar, ya que disfruto más de hacer una revisión profunda de los libros que solamente citar el contenido y dar una breve opinión, pero teniendo en cuenta que para los lectores pueda ser útil, añadí el índice general del libro. Nuestro siguiente artículo será de un análisis más profundo del libro.  

    Tabla de contenido

    I. CONTEXTO.

    1. Filosofía.
    ¿Cultura? ¿Qué cultura?
    La durabilidad de Unix.
    El caso en contra del aprendizaje de la cultura Unix.
    Qué está mal en Unix.
    Qué está bien en Unix.
    Conceptos básicos de la filosofía Unix.

    La filosofía Unix en una lección.
    Aplicando la filosofía Unix.
    La actitud también cuenta.

    2. Historia.
    Orígenes e historia de Unix, 1969-1995.
    Orígenes e historia de los hackers, 1961-1995.
    El movimiento de Código Abierto: 1998 en adelante.
    Las lecciones de historia Unix.

    3. Contrastes.
    Elementos de estilo del sistema operativo.
    Comparaciones de sistemas operativos.
    Qué hay alrededor.

    II. DISEÑO.

    4. Modularidad.
    Encapsulación y tamaño óptimo de los módulos.
    Compactación y ortogonalidad.
    Bibliotecas.
    Unix y los lenguajes orientados a objetos.
    Codificación para la modularidad.

    5. Textualidad.
    La importancia de ser textual.
    Metaformatos para archivos de datos.
    Diseño de protocolos de aplicación.
    Metaformatos de protocolo de aplicación.

    6. Transparencia.
    Algunos casos de estudio.
    Diseñando para la transparencia y el descubrimiento.
    Diseñando para la sustentabilidad.

    7. Programación múltiple.
    Control de separación de la complejidad para ajustar el rendimiento.
    Taxonomía de los métodos IPC en Unix.
    Problemas y metódos a evitar.
    Procesos de particionamiento a nivel diseño.

    8. Minilenguajes.
    Taxonomía de los lenguajes.
    Aplicando minilenguajes.
    Diseñando minilenguajes.

    9. Transformación.
    Programación de control de datos.
    Generando código ad-hoc.

    10. Configuración.
    ¿Qué debería ser configurable?
    Dónde están las configuraciones.
    Archivos de control de arranque.
    Variables de ambiente.
    Opciones de la interfaz de comandos.
    Cómo escoger entre los métodos de configuración.
    Al romper estás reglas.

    11. Interfaces.
    Aplicación de la regla: La menor sorpresa.
    Historia del diseño de la interfaz Unix.
    Evaluando diseños de interfaz.
    Compensaciones entre CLI y las interfaces visuales.
    Transparencia, expresividad, y configurabilidad.
    Patrones de diseño de la interfaz Unix.
    Aplicando los patrones de diseño de la interfaz Unix.
    El navegador web como front end universal.
    El silencio es de oro.

    12. Optimización.
    No solamente hagas algo, ¡manténlo!.
    Medir antes de optimizar.
    Lo no adecuado es considerado dañino.
    Rendimiento de procesamiento contra latencia.

    13. Complejidad.
    Hablando de complejidad.
    Una historia de cinco editores..
    El tamaño indicado para un editor.
    El tamaño indicado del software.

    III. IMPLEMENTACIÓN.

    14. Lenguajes.
    Cornucopia de lenguajes Unix.
    C, ¿por qué no?
    Lenguajes interpretados y estrategias mixtas.
    Evaluaciones de lenguajes.
    Tendencias para el futuro.
    Escogiendo un conjunto de herramientas para X.

    15. Herramientas.
    Un sistema operativo amistoso con el desarrollador.
    Escogiendo un editor.
    Generadores de código para propósitos especiales.
    Usando make en otras partes además de C/C++.
    Sistemas de control de versiones.
    Depuración durante el tiempo de ejecución.
    Perfilar.
    Emacs como front end universal.

    16. Reuso.
    La historia de J. Random Newbie.
    Transparencia como llave del reuso.
    Del reuso al Código Abierto.
    Las mejores cosas de la vida son abiertas.
    ¿En dónde debo mirar?.
    ¿Cuáles son los temas en el uso de software de Código Abierto?
    Temas de licenciamiento.

    IV. COMUNIDAD.

    17. Portabilidad.
    Cornucopia de lenguajes Unix.
    Evolución de C.
    Estándares Unix.
    Especificaciones como DNA, código comp RNA.
    Programando para la Portabilidad.
    Internacionalización.
    Portabilidad, estándares abiertos y Código Abierto.

    18. Documentación.
    Conceptos de documentación.
    El estilo Unix.
    El zoológico de los formatos de documentación Unix.
    El caos actual y las posibles opciones.
    La herramienta DocBook.
    Cómo escribir documentación Unix.

    19. Código Abierto.
    Unix y Código Abierto.
    Mejores prácticas para trabajar con desarrolladores de Código Abierto.
    La lógica de las licencias: Cómo escoger una.
    Porqué debes usar una licencia estándar.
    Variedades en el licenciamiento de Código Abierto.

    20. A futuro.
    Esencia y accidente en la tradición Unix.
    Problemas en el diseño de Unix.
    Problemas en el ambiente de Unix.
    Problemas en la cultura de Unix.
    Razones para creer.

    A. Glosario de abreviaciones.
    B. Referencias.
    C. Contribuidores.


     

    Cultura y filosofía Unix

    Como mencionaba antes, además de un opinión personal acerca del libro, creo que se puede tomar una amplia ventaja de realizar una análisis sistemático que permita mostrar tanto el contenido del libro como una idea clara del mismo para aquellos que quizá no podrán leerlo completamente.

    Para quienes cuentan con experiencia en el mundo Unix, asi como algunos sistemas operativos derivados en mayor o menor grado de este, no es nada raro escuchar el término: Filosofía, Unix es una filosofía, además de un cultura es un modo de vida, un modo de hacer las cosas, una manera en la cual se consigue un esquema completamente distintivo de programación, por ejemplo.

    Unix está basado en una poderosa filosofía de diseño que le ha permitido, desde su nacimiento en 1969, ser una referencia para la creación de gran cantidad de sistemas operativos.  

    Lo básico de la filosofía Unix

    La filosofía Unix, iniciada evidentemente por Ken Thompson entre su confusión por diseñar un sistema operativo pequeño pero altamente capaz y sus lecciones aprendidas de diversas fuentes, no puede determinarse como un método formal de diseño, está basada completamente en la experiencia.

    En el libro encontrarás grandes temas para estudio, una de las partes de las cuales se puede tomar provecho es aquella en la que se nos motiva a abstraernos a fin de mantener en mente algunas de las siguientes ideas básicas que forman parte de la filosofía Unix:

    Modularidad: Escribir partes de código pequeñas pensando en conectarlas a través de interfaces.
    Composición: Diseñar programas que se conectarán a otros programas.
    Economía: El tiempo del programador es caro, consérvalo.
    Optimización: Realiza un prototipo antes de pulir. Ponlo a trabajar antes de que pienses en optimizarlo.
    Extensibilidad: Diseña para el futuro, porque llegará antes de lo que te imaginas.  

    Conclusión y recomendaciones

    Es, y sin temor a equivocarme un libro excelente. Eric Steven Raymond, hace un gran trabajo de recopilación y con un estilo verdaderamente bueno añadido a las referencias usadas para la creación de este libro, como: El entorno de programación Unix de Kernighan y Pike, La filosofía Unix de Gancarz y, El programador pragmático de Hunt y Thomas entre otros, consigue hacer necesaria su lectura, el libro está dirigido a todos aquellos programadores que novatos, desean adquirir la experiencia necesario para mejorar, así como para programadores que ajenos a Unix conocen de lenguajes como C, C++ y Java.

    Tiene una bibliografía extensa que permite ampliar horizontes si así se desea y un tema que en particular disfruté fue el de estándares para la creación de documentación y sistemas de control de versiones.

    Espero generar un artículo que continúe con este para hacer un análisis más profundo del libro, mientras, me despido esperando que hayan disfrutado esta breve introducción.

    Contactar con el equipo de LinuFocus
    © Edgar Hernández Zúñiga.
    "some rights reserved" see linuxfocus.org/license/
    http://www.LinuxFocus.org
    Información sobre la traducción:
    es --> -- : Edgar Hernández Zúñiga. <edgar(en)linuxfocus.org>

    2005-01-14, generated by lfparser_pdf version 2.51