lunes, 27 de julio de 2009

FILOSOFIA UNIX

"Cada programa debe hacer un solo trabajo y hacerlo bien"


Qué es UNIX


Estrictamente, UNIX designa el núcleo de un sistema operativo multiusuario y multitarea. En un sentido más amplio, comprende el núcleo del sistema operativo más un conjunto de programas que permiten compilar lenguajes de programación, editar texto, interpretar comandos, manejar archivos y discos, acceder a otras máquinas, establecer comunicaciones telefónicas, enviar y recibir correo electrónico, manejar las colas de impresión y un sinfín de tareas más. Algunos de estos programas pueden haber sido desarrollados por los propios usuarios.

UNIX designa al mismo tiempo un cierto "ambiente de trabajo", un conjunto de circunstancias que encuentra el usuario de la computadora donde corre UNIX, tales como la presentación en pantalla, los programas disponibles y la forma de trabajo que impone o permite.


Origen de la Filosofía Unix:


La "filosofía Unix" se originó con las primeras meditaciones de Ken Thompson sobre cómo diseñar un sistema operativo pequeño pero capaz. Creció a medida que la cultura Unix aprendió cosas sobre cómo obtener el máximo beneficio del diseño de Thompson.

Que es la Filosofía Unix???

Es un conjunto de “pensamientos” o proposiciones que alguien podría catalogar como reglas, las que son aplicables al desarrollo de software en el ámbito Unix, se basa en la experiencia, simplicidad, reinvención y rapidez en el desarrollo. Estos son un conjunto de enunciados simples y básicos de ideas que se traducen en características que poseen los diferentes programas que corren en Unix.

La Filosofía UNIX supone crear programas rápidos, simples, con poca intervención por parte del usuario, o en caso de necesitarla, esta se produzca al principio o lo más mínima posible. Esta se acopla perfectamente a las necesidades de computación de los laboratorios científicos, puesto que Unix fue originalmente desarrollado en uno de estos.


Principales Características:


  • No utiliza la teoría de la computación para obtener “teóricamente un software perfecto”.
  • Su programación es de “abajo hacia arriba: bottom up”.
  • Es de conocimiento pragmático.
  • Basado en el conocimiento Empírico o Experiencia.
  • No se encuentra en los métodos y las normas oficiales, sino en el medio reflexivo implícito del conocimiento.

Directivas


  • Que cada programa realice únicamente la tarea para la que fue creado y la haga bien: Esto quiere decir que los programas deben de ser lo más atómicos posible y que se compruebe mucho su rendimiento y funcionamiento para hacerlo lo mejor posible.
  • Para llevar a cabo una nueva tarea escribir un programa nuevo. No complicar uno viejo añadiendo nueva funcionalidad.
  • Escribir un programa teniendo en cuenta que su salida probablemente sea la entrada de otro programa.
  • Guardar los datos en archivos de texto plano. Si se necesita seguridad, darle permisos.
  • Usar nombres cortos y en minúscula.
  • En la manera de lo posible hacer que el usuario suministre los datos por línea de comandos en la llamada.
  • Hacer partes simples conectadas mediante interfaces limpias y bien definidas.
  • Centrarse en los datos.
  • Claridad mejor que complejidad. La solución más simple es frecuentemente la mejor.
  • Portabilidad mejor que eficiencia.
  • Pensar en paralelo. Hay otros procesos en el mundo, incluso instancias del mismo programa funcionando al mismo tiempo.
  • Hacer programas grandes, solo cuando se demuestre que no se puede realizar con uno pequeño.
  • Si no hay nada interesante que decir, que el programa mejor no diga nada.
  • Para cada problema existen múltiples soluciones.
  • Diseñar pensando en el futuro (esta cercano). Esto nos ofrece compatibilidad y mayor tiempo de utilización.
  • Programa de abajo hacia arriba y de conocimiento pragmático.
  • Programa basado en el conocimiento Empírico o Experiencia.
  • No se encuentra en los métodos y las normas oficiales, sino en el medio-reflexivo implícito, el conocimiento.

Ventajas


  • PRECIO: Podemos descargarlo gratuitamente desde internet o comprarlo a un precio accesible.
  • REQUERIMIENTOS: Funciona exclusivamente en modo de texto sin la necesidad de cargar un entorno grafica y puede ejecutarse en cualquier maquina.
  • ESTABILIDAD: A tener su núcleo basado en unix, hereda esa estabilidad que siempre ha caracterizado a los sistemas unix.
  • SEGURIDAD: A nivel de servidor podemos encontrar que la seguridad del unix frente a otros servidores del mercado es mucho mayor.
  • COMPATIBILIDAD: Reconoce la mayoría de otros sistemas operativos en una red.
  • MULTITAREA REAL: Ejecuta varias aplicaciones y procesos simultáneamente.
  • VELOCIDAD: Su entorno grafico para ejecutar servicios o aplicaciones hacen que su velocidad sea muy superior a los actuales sistemas operativos.
  • CODIGO FUENTE: Es posible modificarlo y adaptarlos a nuestras necesidades libremente.
  • ENTORNO DE PROGRAMACION: Se puede programar para otro sistema operativo.
  • CRECIMIENTO: Gracias a la licencia GNU, el código abierto, y la gran comunidad de miles de programadores es los más rápidos que existen en la actualidad.

Desventajas


  • SOPORTE: Algunos Linux no cuentan con empresas que lo respalden, por lo cual no existe un soporte sólido como el de otros sistemas operativos.
  • SIMPLICIDAD: Gracias al entorno de ventanas, sus escritorios y las aplicaciones diseñadas especificamente, para el cada día resulta más sencillo su integración y uso.
  • SOFTWARE: A veces es difícil encontrar una aplicación determinada, y lo mas importante, es que no todas las aplicaciones esta en castellano.
  • HARDWARE: Actualmente Linux soporta un máximo de 16 procesadores simultáneamente contra los 64 procesadores de otros sistemas operativos.


Conclusiones:


Todos estos criterios que nos presenta esta filosofía podríamos verlos también como buenas prácticas que podemos tomar, a la hora de realizar nuestros proyectos para lograr un mejor desempeño y como dice la frase al principio del post si hacemos algo, esto lo debe hacer bien lo que mostrara que ha logrado su objetivo.


Bibliografía y Referencias


http://www.trucospc.info/varios/introduccion-al-unix.asp?poll=7&results=1

http://www.thefuckingshit.org/?p=347
http://neoprogramadores.galeon.com/ch1taoup.htm

http://iroiokoto.blogspot.com/2009/02/filosofia-unix.html
http://holait.blogspot.com/2009/02/filosofia-unix.html
http://iroiokoto.blogspot.com/2009/02/filosofia-unix.html


Video sobre el Tema: