Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa Próxima revisiónAmbos lados, revisión siguiente |
filosofia_unix [2021/08/03 05:26] – peron | filosofia_unix [2021/12/12 02:37] – peron |
---|
====== Filosofía UNIX ====== | ====== Filosofía Unix ====== |
| |
| Es una filosofía de programación orientada a buscar un entorno de trabajo interdependiente, en el cual se elaboran pequeñas aplicaciones capaces de operar en conjunto con otras. |
| |
Es una filosofía de programación orientada a buscar un entorno de trabajo interdependiente, en el cual se realicen pequeñas aplicaciones capaces de operar en conjunto con otras. | Fomenta el **concepto estético minimalista** según lo cual "lo simple es hermoso", e intenta transportarlo al arte de la programación y al diseño de sistemas de cómputo. |
| |
Es fundamental para ofrecer herramientas pensadas para programar y generar bases de infraestructura computada sobre la que pudiese trabajarse en comunidad. | Su sentido práctico se basa fundamentalmente en ofrecer herramientas simples y transparentes creadas para un único propósito. Estas características implican robustez para trabajar en comunidad, ya que Las aplicaciones están pensadas especialmente pensando en su uso cooperativo con otras aplicaciones. |
| |
Entre los conceptos se encuentra el de "todo es un archivo", "procesos cooperativos", "fronteras internas", "atributos de fichero y estructuras de datos", "formatos de archivos binarios". | > "Lo que queríamos preservar no era sólo un buen entorno para programar, sino mas bien un sistema alrededor del cual pudiese formarse una [[pubnix|comunidad]]. Sabíamos por propia experiencia que la esencia del cómputo comunal en función del acceso remoto a [[tiempo de cómputo compartido|sistemas de tiempo compartido]] no implica únicamente escribir programas desde una [[terminal de computadora|terminal]] en lugar de utilizar conmutadores, sino asegurar una comunicación cercana". Dennis Ritchie |
| |
> "Lo que queríamos preservar no era sólo un buen entorno de cómputo en el cual programar, sino un sistema alrededor del cual se pudiese formar una [[comunidad|pubnix]]. Sabíamos por experiencia que la esencia del cómputo comunal como el que puede dar el acceso remoto a un en un [[sistema de tiempo de cómputo compartido|tiempo de cómputo compartido]] no implica únicamente escribir programas con el teclado de una terminal en lugar de hacerlo a través de conmutadores, sino asegurar una comunicación cercana". Dennis Ritchie | Entre los preceptos filosóficos Unix se encuentra el de "todo es un archivo", "procesos cooperativos", "fronteras internas", "atributos de fichero y estructuras de datos", "formatos de archivos binarios". |
| |
Mas adelante se agregó el concepto [[cliente]]-[[servidor]] | Al contar con un punto de vista resultadista, se privilegia el intercambio de cadenas de texto simple, ya que se la considera una interfaz universal y de fácil transformación y procesamiento. |
| |
| El concepto de "caños" o //pipes// en Unix ha sido una mecánica de trabajo altamente influyente. Permite llevar a cabo a nivel [[interpretes_de_comandos|intérprete de comandos]] un trabajo cooperativo entre distintas aplicaciones. En la práctica esto permite utilizar el caracter **|** para encaminar los resultados de texto de un programa (//salida//) y oficiarlas como objeto (//entrada//) a otro. De esta manera se pueden estructurar nuevos trabajos de manera creativa. |
| |
| Mas adelante se agregó el concepto [[cliente]]-[[servidor]]. |
| |
| Conceptos de McIrloy |
| |
| - **Regla de Modularidad**: Escribir partes simples conectadas por interfaces limpias. |
| - **Regla de Claridad**: Claridad es mejor que inteligencia. |
| - **Regla de Composición**: Diseña programas que se conecten con otros programas. |
| - **Regla de Separación**: separa políticas de mecanismos, interfases de motores. |
| - **Reglas de Simplicidad**: diseña buscando simplicidad, agrega complejidad sólo cuando debas hacerlo. |
| - **Regla de parsimonia**: Escribe programas grandes sólo cuando es claro por demostración que nada mas podrá resolverlo. |
| - **Regla de Transparencia**: diseña para visibilidad, para hacer el depurado y la inspección muy fácil. |
| - **regla de Robustez**. Robustez es la unión de transparencia y simplicidad. |
| - **Regla de Representación**: Divide el conocimiento en datos, de modo que la lógica del programa pueda ser estúpida y robusta. |
| - **Regla de la menor sorpresa**: Al diseñar interfases, siempre haz lo menos sorprendente. |
| - **Regla de Silencio**: Cuando el programa no tiene nada que decir, que no diga nada. |
| - **Regla de Reparación**. Cuando falle, que falle ruidosamente y tan rápido como sea posible. |
| - **Regla de Economía**: Tiempo de programación es cado, ahorrala en preferencia al tiempo de procesamiento. |
| - **Regla de generación**: Evita hacking a mano; escribe programas que escriban programas. |
| - **Regla de optimización**: Prototipea antes de pulir. Haz que funcine antes de optimizarlo. |
| - **Regla de Diversidad**: Desconfía de "la única manera verdadera". |
| - **Regla de extensibilidad**: Diseña para el futuro, pero será más pronto que lo pensado. |
| |
| > "Cuando estés en duda, emplea la fuerza bruta". Ken Thomson. |