Búsqueda personalizada

lunes, 2 de febrero de 2009

Do one thing, do it well


Do one thing, do it well

Filosofía Unix esta filosofía se reduce a una frase do one thing do it well, la filosofía de Unix es la siguiente:

Segun Mcllroy:

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.

Escribir programas que hagan una cosa y lo hagan bien. Escribir programas que trabajen juntos. Escribir programas que manejen flujos de texto, por que esto es una interfaz universal.

Según Mike Gancarz:

1.Small is beautiful.

2.Make each program do one thing well.

3.Build a prototype as soon as possible.

4.Choose portability over efficiency.

5.Store data in flat text files.

6.Use software leverage to your advantage.

7.Use shell scripts to increase leverage and portability.

8.Avoid captive user interfaces.

9.Make every program a filter.


1.Lo pequeño es hermoso.

2.Haz que cada programa haga una cosa bien.

3.Construye un prototipo lo antes posible.

4.Elige portabilidad sobre eficiencia

5.Guarda los datos en archivos de texto planos

6.Aprovecha funcionalidades del software

7.Usa scripts de shell para aumentar la funcionalidad y portabilidad

8.Evita interfaces de usuario captivas

9.Haz de cada programa un filtro

Las dos filosofias planteadas por Mcllroy y por Mike Gancarz llevan hacia un mismo punto hacer las cosas sencillas pero bien y que se puedan comunicar con los demas programas creo que esta filosfia debe estar en la programacion de todos los que nos dedicamos al software puesto que son principios basicos de un software exitoso

Incluso hay personas que lo aplican a su productividad personal como podemos verlo en el siguiente link

http://lifehacker.com/349646/applying-unix-philosophy-to-personal-productivity

tambien por si buscan la historia de unix pueden encontrala en este link

http://es.wikipedia.org/wiki/Unix

y por ultimo de donde se saco este pequeño comentario y recopilacion de la filosofia de unix

http://en.wikipedia.org/wiki/Unix_philosophy

espero que sea de su agrado cualquier comentario pueden ponerlo tambien dudas si la se la contesto si no la se podemos buscar juntos la respuesta para eso esta google jejeje

17 comentarios:

  1. Hay una cosa con la que yo no estoy de a cuerdo, es con Mike Gancarz en el punto No.5, porque almacenar los datos en un archivo de texto plano, cuando hay bases de datos bastante buenas de uso gratuito y código abierto como PostgreSQL, las cuales nos van a permitir un mejor manejo de la información dandonos tambien agilidad en las transacciones.

    ResponderEliminar
  2. Me parece un post con un contenido muy preciso, en donde no abarcaste mucho cada principio de la filosofía, hiciste un buen manejo de los links.

    Ahora, en el principio 5 "Guarda los datos en archivos te texto planos", en donde podemos ver reflejado este principio en los sistemas Unix y/o derivados.

    ResponderEliminar
  3. pues se ve reflejado en los archivos de configuracion por ejemplo y tambien en algunos manejadores de correo manejan los datos en textos planos hay varios usos de estos en estas plataformas y si para datos importantes se pueden usar bases de datos incluso algunas de estas utilizan tambien textos planos como SQLite y otros seguramente esto tiene algunas ventajas y desventajas les dejo este link para que las vean y las analizen http://usuarios.pntic.mec.es/sqlite.php

    ResponderEliminar
  4. Muy interesante, pero algo que me llamo mucho a atención es el punto numero 4 "Elige portabilidad sobre eficiencia". ¿Porqué la portabilidad antes que la eficiencia? como que esta filosofia trata de inducir que esparzamos nuestras creaciones a todo lugar, buscando siempre que se puedan ejecutar en cualquier equipo y eso es algo que en realidad es muy bueno.

    Pero siento que en ninguna de las otras filosofías busca el facilitar la vida a los usuarios, ya que con el hecho que cualquier persona lo pueda tener, no significa que lo pueda usar. ¿O que decis vos?

    ResponderEliminar
  5. Gracias compañero, en realidad son cosas tan basicas que es dificil comprender que es la base para las buenas practicas de la programacion, ya que como estudiantes, siempre queremos que nuestro software haga de todo, pero nos preocupamos mucho en la interfaz y dejamos atras la funcionalidad, lo cual poco a poco debemos mejorar....

    ResponderEliminar
  6. Me parecio interesante ver como esta filosofia tambien se puede utilizar en proyectos de productividad personal. En fin es una filosofia que se puede aplicar a varias cosas.

    ResponderEliminar
  7. La aplicación de la filosofía como un todo creo que es la base para la creación de software de calidad, sin embargo, pienso que hay una pequeña contradicción entre el punto 2 y 4, pues al elegir la portabilidad antes que la eficiencia, elegimos hacer las cosas (aunque sea) deficientemente y algo hecho deficientemente no esta bien hecho (aunque el resultado sea el esperado, pues incurre en costos de tiempo y puede que hasta monetarios).

    "...creo que esta filosfia debe estar en la programacion de todos los que nos dedicamos al software..."
    En eso estoy de acuerdo.

    ResponderEliminar
  8. Me parece una simplificación bastante buena la que hace Mcllroy;
    "Write programs that do one thing and do it well."
    Es un principio que creo que al aplicarlo correctamente obtendremos grandes beneficios y sus demás caracterizticas positivas si no están incluidas en un inicio será facil adaptarlas en un futuro, como por ejemplo: portabilidad, eficiencia, etc.

    ResponderEliminar
  9. La verdad es que el material que colocaste es muy bueno, y estoy de acuerdo con el compañero Eliabd con respecto al punto 4 que habla sobre la portabilidad sobre la eficiencia, porque considero que hasta cierto punto contradice al punto 2 que dice que hay que asegurarse de que cada programa haga las cosas bien.

    Pero al final se puede ver que la finalidad de todo esto es llegar a un sistema que es conformado por varios programas y que estos tengan una buena comunicación entre sí para lograr una buena funcionalidad.

    ResponderEliminar
  10. @chentex: yo creo que no toma en cuenta bases de datos, porque aquí habla de portabilidad y de programas que sean pequeños.

    Me parecen muy bien estos puntos, pero no me queda claro en donde se toma en cuenta la seguridad de un programa. Ya que no podemos dejar información privada en archivos planos, lo único que se me ocurre es la implantación de un algoritmo de encriptación que proteja esta información, pero acaso implantar esto iría el contra del punto 1?

    ResponderEliminar
  11. Pues yo creo que con el punto 8, "Evita interfaces de usuario captivas", no hay que mal interpretarlo diciendo que la interfaz es inutil, ya que yo pienso que la interfaz juega un rol muy importante en nuestros programas, y por captivas, se refiere a engorrosas, un claro ejemplo es Vista, puede ser muy agradable a la vista pero muy malo en su funcionalidad.

    ResponderEliminar
  12. Gracias por sus comentarios. ahora con respecto a el punto 4 de la portabilidad creo que se refiere a que sea mas portable y no que haga muchas cosas creo que va amarrado a que haga una cosa bien no muchas y que sea pesado y que no pueda ser portable. y tambien creo que esta filosofia la tenemos que tomar como un aporte a nuestro conocimiento en desarrollo de software pero no como una ley si no que aplicar lo bueno que esta filosofia tiene y desechar lo que creamos malo o incorrecto

    ResponderEliminar
  13. Me parecio bastante resumido, es un resumen de los que lei anteriormente, ahora con respeco al punto numero 5 que menciona el compañero al principio, en alguno de los blogs que lei anteriormente, dice "confia en los permisos", no se que tan factible sea, pero talvez se puede tomar en cuenta.

    ResponderEliminar
  14. Fijate Javier que trataste muy someramente el tema de unix, ya que como todos sabemos es algo donde podemos profundizar bastante, entonces yo entre algunos de los topicos que agregaría (ya que se puede empezar desde la historia hasta cuestiones puramente tecnicas) estan las ventajas y desventajas, por ejemplo
    Ventajas:
    - Completamente multitarea con proteccion de la memoria. Aqui multiples usuarios pueden correr multiples programas al mismo tiempo, sin que el sistema se quiebre.
    - Alto grado de eficiencia de la memoria virtual.
    - Control de acceso y seguridad
    - Riqueza de pequeños comandos y utilidades que realizan tareas especificas.
    - Poderoso sistema unificado de archivos.
    - Disponible en una gran variedad de maquinas. Es el unico sistema realmente portable.
    y asi puedo seguir enumerando otra buena cantidad de ventajas, pero mejor voy a mencionar algunas desventajas...
    Desventajas:
    - La linea de comandos tradicional es un tanto hostil, mas bien diseñada para programadores que para usuarios tradicionales.
    - Los comandos tienen nombres encriptados, y las respuestas que proveen no son muy significativas, es decir no indican especificamente que fue lo que se realizo.
    - Para poder utilizar unix a perfeccion es necesario comprender antes algunas carateristicas principales.

    ResponderEliminar
  15. Al igual que levita, no conocía esta filosofía, me pareció muy interesante la perspectiva que le dan. 'Do one thing, do it well', lo relacioné mucho con la filosofia K.I.S.S. (keep it simply, stupid), en la cual se mantiene la sencillez en el software, pero prevalece la funcionalidad del mismo. En cuanto a el punto 4, fue el más interesante para mí, debido al manejo que se le da a la portabilidad sobre la eficiencia, en mi opinión éstas dos van de la mano.

    ResponderEliminar
  16. gracias pablo si eso es importante por eso puse el link de la historia de unix que tambien tiene estos aspectos creo que fui mas puntual en lo que se referia a el tema la filosofia verdad yo lo miro mas como el aprendisaje de que miravan las personas que hicieron unix no que hace unix para esto tenemos otros link en los que tenemos esta informacion siempre es bueno leerlo puesto que es informacion muy importante gracias por tu comentario

    ResponderEliminar
  17. El principio 5 es realmente una de las esencias de los sistemas derivados, dado que todos nos hemos dado cuenta que todo se maneja en un texto plano y de ahi su configuracion, etc.
    Al igual forma lo del prototipo lo mas pronto posible es el porque del desarrollo de las distribuciones dado que lo que se hace es generar una expectativa con un pequeño prototipo funcional o no tanto, que va motivar a otros desarrolladores ene l proyecto para asi unirse y lograr un desarrollo bastante rapido.

    ResponderEliminar