La filosofía UNIX
Hace unos días atrás me encontraba con que tenía que optimizar cierto código que realiza operaciones super costosas en término de CPU. Más aún, debía leer harto del disco por lo que el tiempo de respuesta era malo tirando para pésimo. Después de varias horas tratando de mejorarlo, tuve una pequeña epifanía, y recordé que en alguna parte hace mucho, mucho tiempo atrás y en una lejana galaxia leí sobre la filosofía UNIX. De manera que en búsqueda de inspiración, cual texto sagrado decidí ir en su búsqueda.
La filosofía UNIX puede resumirse en 3 frases (según Doug Mcllroy)
Escribe programas que hagan una sola cosa y la hagan bien.
Escribe programas que trabajen juntos.
Escribe programas que manejen streams de texto, pues esa es la interface universal.
Hay varias versiones más largas y cortas, pero la que más me gusta es la de Mike Gancarz:
- Lo pequeño es hermoso.
- Haz que cada programa haga una cosa bien.
- Construye un prototipo lo antes posible.
- Elige portabilidad sobre eficiencia
- Guarda los datos en archivos planos
- Aprovecha funcionalidades del software
- Usa scripts de shell para aumentar la funcionalidad y portabilidad
- Evita interfaces de usuario captivas
- Haz de cada programa un filtro
Muchas veces, por diversos motivos, uno empieza a escribir código como loco (o al menos eso me ha pasado últimamente) y no se toma un respiro para pensar por 2 segundos "para donde va la micro" y cual es la mejor estrategia para enfrentar un problema. Más alguien no estará de acuerdo con todos los puntos expuestos, pero son buenas ideas generales que pueden ser aplicadas no sólo al desarrollo de UNIX.
Por si alguien está interesado en más aforismos, se pueden encontrar aquí
Imagen: http://flickr.com/photos/yogicat/433521005/
- blog de agraves
- 1031 lecturas



Robots Paracaidistas 2.0 (La venganza)...
Disculpas por el off topic, pero el tema original está cerrado.
Como no se sabe que robot cae al norte y que robot cae al sur de la marca, se podría usar el siguiente algoritmo iterativo, que hace caminar a los robot distancias cada vez mayores hacia el norte y hacia el sur hasta encontrar la marca:
total_pasos=1; on=1; While(on) { num_pasos=1; while(num_pasos<=total_pasos) { dar_paso(); if(ver_marca()) { on=0; break; } num_pasos++; } inv_direccion(); total_pasos++; } inv_direccion(); stop_robot();En donde la rutina dar_paso() hace dar un paso al robot en la dirección que este apuntando (se asume que solo se puede mover a través de una línea norte-sur), la rutina ver_marca() devuelve 1 si se detecta la marca, la rutina inv_direccion() hace girar al robot en 180 grados y la rutina stop_robot() detiene la marcha del artefacto. No es un algoritmo muy eficiente (o sea cero probabilidad de ser contratado...:-)) pero debería funcionar.
PS: Lo siento, en el primer intento tuve problemas con el HTML (¿Lo pueden borrar (y este si no corresponde)?).
Versión corta...
Mmm..., queda con menos instrucciones así:
total_pasos=1; While(1) { for(num_pasos=1; num_pasos<=total_pasos; num_pasos++) dar_paso(); if(ver_marca()) break; inv_direccion(); total_pasos++; } stop_robot();Robots paracaidistas (Off topic)
Disculpas por colocar esto acá, pero el tema original estaba cerrado...
Como no se sabe que robot cae al norte y que robot cae al sur de la marca, se podría usar el siguiente algoritmo iterativo, que hace caminar a los robot distancias cada vez mayores hacia el norte y hacia el sur hasta encontrar la marca:
total_pasos=1;
on=1
While(on)
{
num_pasos=0;
while(num_pasos
Y lo lograste?
Lograste aplicar la filosofia y mejorar el programa?
La verdad
En eso estoy, pero la solución nueva se ve mucho más prometedora que la idea original
—
Alvaro Graves - agraves [at] dcc punto uchile punto cl
MSN: no_mas_zpam [@]correocaliente punto com
jejeje
Qué buena pregunta... Vamos agraves! queremos la respuesta!
—Tchorix
Filosofía Unix y productividad personal...
Hace un par de días redacté un par de artículos que hablan sobre como aplicar la filosofía Unix a la productividad personal, quizá les resulte interesante:
http://glatelier.wordpress.com/2008/02/18/aplicando-la-filosofia-de-unix-a-la-productividad-personal-parte-i/
La segunda parte aún no la termino, pero para mañana o pasado debiera estar lista.
programming pearls
Siempre recomiendo a quienes buscan inspiracion cuando estan en situaciones como la que describiste invertir en un maravilloso librito: Programming Pearls de Jon Bentley, leyéndolo experimentaras una verdadera epifanía:
http://netlib.bell-labs.com/cm/cs/pearls/