domingo, 27 de junio de 2010

Unix Power Tools

Este es uno de los libros más interesantes que me he encontrado sobre sistemas Unix (incluyendo a Linux y Mac OS). No es un texto estructurado como un manual o tutorial de aprendizaje ni tampoco la típica referencia basada en documentación técnica oficial. Es una especie de compendio de conocimiento teórico y (sobre todo) práctico sobre Unix y los mecanismos y herramientas que lo hacen tan potente. Eso sí, requiere un dominio básico de la interfaz de comandos de este tipo de sistemas y cierta familiaridad con sus características principales para poder aprovechar el potencial de sus más de 1000 páginas:




Aquí podemos ver la ficha en la web de su editorial y aquí pueden descargarse los ejemplos. A pesar de que el "tocho" lleva 8 años sin actualizar, sigue siendo altamente recomendable como prueban las reseñas que aún cosecha en Amazon.

A continuación incluyo como muestra mi traducción libre de algunos pasajes interesantes de sus capítulos introductorios donde se habla de la "filosofía Unix". Puede que en el futuro caigan algunos más si el tiempo lo permite...

¿Que tiene Unix de especial?

[...]
Unix es único en el sentido de que no fue diseñado como un sistema operativo comercial destinado a ejecutar programas de aplicación, sino como un juego de herramientas para el hacker, por y para programadores. De hecho, una versión temprana del sistema operativo se llamó PWB (Programmer's Work Bench) o "banco de trabajo del programador".

Cuando Ken Thompson y Dennis Ritchie programaron la primera versión de Unix en los laboratorios Bell de AT&T fue para su propio uso y para sus amigos y colegas de trabajo. Varias personas fueron añadiendo utilidades según se les presentaron nuevos problemas a resolver. Como Laboratorios Bell no estaba en el negocio de los ordenadores se cedió el código fuente a las universidades por una tasa simbólica. Brillantes investigadores escribieron su propio software y lo fueron añadiendo a Unix en una oleada de anarquía creativa[...]

Unix también es importante para usuarios avanzados porque es uno de los últimos sistemas operativos populares que no te obliga a trabajar con una interfaz de menús, ventanas y ratón de "talla única". Sí, puedes hacerlo si quieres y te harán ahorrar tiempo en muchos casos. Pero Unix también te da una serie de piezas que con algo de formación y práctica te proporcionarán más opciones de las que cualquier diseñador de software pueda meter en un conjunto de menús. Si aprendes a usar Unix y sus utilidades desde la línea de comandos, no tendrás que ser programador para hacer cosas muy potentes con unas pocas pulsaciones de teclado.
[...]

La fuerza crece en ti

Se ha llegado a decir que Unix no es tanto un sistema operativo como una forma de pensar. En "The UNIX programming environment", Kernighan y Pike escribieron que en el corazón de la filosofía Unix está la idea de que "la potencia de un sistema le viene más de las relaciones entre los programas que de los programas en sí mismos."
La mayoría de las utilidades no gráficas que se han venido usando en Unix desde el principio, hace más de 30 años, comparten la misma interfaz de usuario. Es una interfaz mínima, la verdad --pero permite conectar entre sí los programas en tuberías para llevar a cabo tareas que ningún programa podría realizar por sí mismo.
[...]
Un usuario novato empieza empalmando tuberías de comandos sencillas y cuando se hacen demasiado largas, salvándolas para su posterior ejecución en un archivo, alias o función del shell. Gradualmente, si el usuario tiene el carácter adecuado, capta la idea de que el ordenador puede hacer más de la parte aburrida de muchas tareas. Quizá empiece usando un bucle for para aplicar el mismo script de edición a un conjunto de archivos. Luego seguirán condiciones y bloques case y pronto se sorprenderá a sí mismo programando.
[...]
Puedes salir de los límites impuestos por las herramientas que proporciona el sistema y resolver problemas que no encajan en el molde. A esto se le llama a veces hacking; en otros contextos se le llama simplemente "ingeniería". En esencia es la habilidad para construir una herramienta cuando no tienes a mano una adecuada.

Ningún programa, por muy bien pensado que esté, es capaz de resolver cualquier problema. Siempre va a haber un caso especial, una necesidad especial, una situación que escapa a lo esperado. Pero Unix no es un único programa. Es una colección de cientos de ellos, y con esta colección de herramientas básicas, una persona con el suficiente ingenio y/o dedicación puede enfrentarse a prácticamente cualquier problema informático.