El Tao  
 

El Tao de la Programación

Traducido por Leonardo Herrera

Tabla de Contenidos

  1. El Limbo Silente
  2. Los Maestros Antiguos
  3. Diseño
  4. Código
  5. Mantención
  6. Gerencia
  7. Sabiduría Corporativa
  8. Hardware y Software
  9. Epílogo
  10. Glosario

 

 
   Libro 1 -- El Limbo Silente  
  Entonces dijo el Maestro Programador:

``Cuando sea el tiempo en que puedas encontrar y solucionar el error por tí mismo, será el tiempo en que debas marchar''

1.1

Algo misterioso está formado, nacido desde el limbo silente. Esperando solitario e inmóvil, está al mismo tiempo en constante movimiento. Ésta es la fuente de todos los programas. No conozco su nombre, por lo que le llamaremos El Tao de la Programación.

Si el Tao es grandioso, entonces el sistema operativo es grandioso. Si el sistema operativo es grandioso, entonces el compilador es grandioso. Si el compilador es grandioso, entonces la aplicación es grandiosa. El usuario será complacido y la armonía primará en el mundo.

El Tao de la Programación fluye lejos y retorna con el viento de la mañana.

1.2

El Tao dió a luz al lenguaje de máquina. El lenguaje de máquina dió a luz al Assembler.

El Assembler dió a luz al Compilador. Ahora ellos son diez mil lenguajes.

Cada lenguaje tiene su propósito, aunque sea éste humilde. Cada lenguaje expresa el Ying y el Yang del Software. Cada lenguaje tiene su lugar dentro del Tao.

Pero no programes en COBOL si puedes evitarlo.

1.3

En el principio fué el Tao. El Tao dio a luz al Espacio y al Tiempo. Por eso, el Espacio y el Tiempo son el Yin y el Yang de la Programación.

Aquellos programadores que no comprendan que el Tao siempre estarán alcanzados por el tiempo y el espacio en sus programas. Quienes comprendan el Tao tendrán suficiente tiempo y espacio para cumplir con sus objetivos.

Como podría ser de otra forma?

1.4

El maestro programador conoce el Tao y lo sigue. El programador avanzado sabe sobre el Tao y lo busca. El programador necio sabe sobre el Tao y se ríe de Él.

Si no fuese por los necios, el Tao no existiría.

Los sonidos más altos son difíciles de escuchar. Ir al frente es una forma de retroceder. Los grandes talentos se muestran tardíamente en la vida. Incluso un programa perfecto aún tiene errores.

   Libro 2 -- Los Maestros Antiguos  
 

Entonces dijo el Maestro programador:

"Después de tres días sin programar, la vida se vuelve un sin sentido"

2.1

Los programadores de antaño eran misteriosos y profundos. No podemos imaginar sus pensamientos, por lo que sólo podemos describir su apariencia.

Atento, como un zorro cruzando su agua. Alerta, como un general en el campo de batalla. Afable, como un anfitrión gratificando a sus huéspedes. Simple, como bloques de madera sin tallar. Opacos, como pozos oscuros en cavernas sin luz. Quien puede contar los secretos de sus corazones y mentes?

La respuesta existe sólo en el Tao.

2.2

El Gran Maestro Turing una vez soñó que era una máquina. Cuando hubo despertado, exclamó:

"No se si yo soy Turing que soñó que era una máquina, o soy una máquina soñando ser Turing"

2.3

Un programador de una enorme compañía de computadores asistió a una conferencia sobre software y retornó para reportarse con su gerente, diciendo: "Que tipo de programadores trabajan para las otras compañías? Se comportaron muy mal, y se veían indiferentes. Su pelo era largo y descuidado, y sus ropas viejas y raídas. Ellos arruinaron nuestra hospitalidad, e hicieron vulgares sonidos durante mi presentación"

El gerente dijo: "Nunca debí enviarte a esa conferencia. Esos programadores están más allá del mundo físico. Ellos consideran la vida absurda, una coincidencia accidental. Ellos vienen y van sin limitaciones. Sin ningún cuidado, ellos viven sólo para sus programas. Porqué deberían molestarse con convenciones sociales?

Ellos viven dentro del Tao."

2.4

Un novicio le pregunta al maestro: "He aquí un programador que nunca diseña, documenta o prueba sus programas. Aún así, quien le conoce le considera uno de los mejores programadores en el mundo. Por que ocurre esto?

El maestro responde: "Este programador se ha convertido en un maestro del Tao. Ha ido más allá de la necesidad del diseño; el no se enoja cuando el sistema cae, porque acepta el universo sin preocupación. Ha ido más allá de la necesidad de documentación; ya no le importa si alguien más ve su código. Ha ido más allá de la necesidad de las pruebas; cada uno de sus programas son perfectos en sí mísmos, sobrios y elegantes, y su propósito es evidente por sí mismo. Créeme, el se ha compenetrado con el misterio del Tao"

     Libro 3 -- Diseño  
 

Entonces dijo el maestro programador:

"Cuando el programa ha sido probado, es demasiado tarde para efectuar cambios de diseño."

3.1

Este era un hombre que asistió a una feria de computación. Cada dia cuando entraba, el hombre le decía al guardia de la puerta:

"Soy un gran ladrón, reconocido por mis fechorías en este tipo de convenciones. Sé atento, pues esta feria no escapará incólume"

Estos dichos inquietaban sobremanera al guardia, pues habían millones de dólares en equipos computacionales en la feria, por lo que observó a este hombre cuidadosamente. Pero el hombre se limitó a vagar de puesto en puesto, murmurando para sí.

Cuando el hombre salía, el guardia lo llamaba y le hurgaba las ropas, pero no encontró nada.

Al día siguiente de la feria, el hombre retornó y reprendió al guardia, diciendo: "Ayer escapé con un vasto botín, pero hoy será aún mejor". Por lo que el guardia le vigiló aún más de cerca, pero sin resultado.

En el último día de la feria, el guardia no pudo aguantar su curiosidad. "Señor Ladrón" le dijo, "Estoy tan perplejo, no puedo estar en paz. Por favor, deme una pista; que es lo que usted está robando?"

El hombre sonrió. "Estoy robando ideas" le dijo.

3.2

Este era un maestro programador que no escribía sus programas estructurados. Un programador novicio, queriendo imitarle, también comenzó a escribir programas no estructurados. Cuando el novicio pidió a su maestro que evaluase su trabajo, el maestro le criticó por no haber estructurado sus programas, diciendo "Lo que es apropiado para el maestro, no es apropiado para el alumno. Debes entender el Tao antes de trascender la estructura"

3.3

Este era un programador que fué enviado a la corte del señor de Wu. El Señor le preguntó al programador: "Que es más fácil de diseñar: un paquete contable o un sistema operativo?"

"Un sistema operativo", respondió el programador.

El señor profirió una exclamación de incredulidad. "Seguramente, un paquete contable debe ser trivial, comparándolo con la complejidad de un sistema operativo", dijo.

"No es tan así", respondió el programador. "Cuando uno diseña un paquete de contabilidad el programador opera como un mediador entre gente que tiene diferentes ideas: Cómo debe operar, como deben aparecer sus reportes, y como debe estar conformado según las leyes de impuestos. En contraste, un sistema operativo no está limitado por su apariencia externa. Cuando se diseña un sistema operativo, el programador busca la armonía más básica entre la máquina y las ideas. Esto es por lo cual un Sistema Operativo es más fácil de diseñar"

El poderoso Señor de Wu asintió, y esbozó una sonrisa. "Esto esta muy bien. Pero, ¿Cual de ellos es más fácil de depurar?

El programador no respondió.

3.4

Un gerente fué donde el Maestro Programador y le mostró la documentación con los requisitos para una nueva aplicación. El gerente preguntó: "Cuanto tiempo tomará diseñar este sistema si le asigno cinco programadores?"

"Tomará un año", dijo el maestro.

"Pero necesitamos este sistema inmediatamente, incluso antes! Cuanto tomaría si le asigno diez programadores?

El maestro frunció el ceño. "En ese caso, tomaría dos años"

"Y que pasaría si le asigno cien programadores?

El maestro programador se encogió de hombros. "Entonces el diseño nunca se completaría."

     Libro 4 - Código  
 

Entonces dijo el maestro programador:

"Un programa bien escrito es su propio cielo; un programa escrito pobremente es su propio infierno."

4.1

Un programa debe ser ágil y luminoso, sus subrutinas conectadas como un collar de perlas. El espíritu y la intención del programa se deben retener ante todo. No debe ser ni mucho ni poco, sin ciclos innecesarios ni variables sin usar, no carecer de estructura pero tampoco una rigidez aplastante.

Un programa debe seguir la 'Ley del menor Asombro'. Cual es esta ley? Es simplemente que el programa deba responder al usuario de manera que lo sorprenda de la menor forma.

Un programa, no importando cuan complejo, debe actuar como una unidad. El programa debe estar dirigido por la lógica que reside en él en vez de las apariencias externas.

Si el programa falla en estos requerimientos, caerá en un estado de desorden y confusión. La única manera de corregir esto es el reescribir el programa.

4.2

El aprendiz le preguntó al maestro: "Tengo un programa que a veces corre y algunas veces aborta. He seguido las reglas de la programación, y estoy totalmente desorientado. Cual es la razón de esto?

El maestro respondió: "Estás confundido porque no entiendes la naturaleza del Tao. Sólo los necios experan comportamientos racionales de sus congéneres humanos. Qué esperas de una máquina construida por humanos? Los computadores simulan determinismo; sólo el Tao es perfecto.

Las reglas de programación son transitorias; sólo el Tao es eterno. Por esto, debes contemplar el Tao antes de que puedas iluminarte.

"Pero cómo sabré cuando me haya iluminado?" preguntó el aprendiz.

"Tu programa funcionará correctamente entonces.", respondió el maestro.

4.3

Un maestro le explicaba la naturaleza del Tao a uno de sus aprendices. "El Tao está presente en todo software; no importa cuan insignificante éste sea", dijo el maestro.

"Está el Tao en una calculadora de bolsillo?", preguntó el discípulo.

"Está", vino la respuesta.

"Está el Tao en un juego de computadora?", continuó el discípulo.

"Incluso en un juego de video", dijo el maestro.

"Y está el Tao en el DOS de un computador personal?"

El maestro tosió y cambió ligeramente de posición. "La lección de hoy ha terminado", dijo.

4.4

El programador del príncipe Wang estaba escribiendo un programa. Sus dedos danzaban sobre el teclado. El programa compiló sin mensajes de error, y corrió como un viento ligero.

"Excelente!", exclamó el Príncipe. "Tu técnica no tiene fallas!"

"¿Técnica?", dijo el programador girando desde su terminal. "Lo que yo hago es seguir al Tao más allá de cualquier técnica! Cuando comencé a programar, lo primero que veía era el problema completo como una masa. Después de tres años ya no ví esa masa. En vez de eso, usé subrutinas. Pero ahora ya no veo nada. Mi ser existe en un limbo sin forma. Mis sentidos están idos. Mi espíritu, libre de trabajar sin planes, siguiendo sus propios instintos. En resumen, mis programas se escriben a sí mismos. Créeme, a veces hay problemas o dificultades. Las veo venir, me detengo un poco, observo silenciosamente. Entonces cambio una simple línea de código y las dificultades se desvanecen como el humo. Entonces compilo el programa. Me siento a esperar y dejo que el gozo del trabajo llene mi ser. Cierro mis ojos por un momento y entonces cierro mi sesión."

Entonces, el príncipe Wang exclamó: "Si todos mis programadores fuesen tan sabios!"

     Libro 5 -- Mantención  
 

Entonces habló el Maestro Programador:

"Aún cuando un programa tenga sólo tres líneas de extensión, algún día deberá tener mantención."

5.1

Una puerta bien usada nunca necesita aceite en sus bisagras.
Un arroyo que fluye veloz no crece ni se estanca.
Ni el sonido ni los pensamientos pueden viajar por el vacío.
El software se descompone si no es usado.

Esos son grandes misterios.

5.2

Un gerente le preguntó a un programador cuanto se demoraría en terminar el programa en el cual estaba trabajando. "Estará terminado mañana", respondió el programador.

"Pienso que estás siendo poco realista", dijo el gerente. "Cuanto demorarás en realidad?"

El programador pensó por un momento. "Tengo algunas características que me gustaría añadirle. Con eso, tomaría al menos dos semanas.", dijo finalmente.

"Incluso pienso que eso es mucho esperar", insistió el gerente. "Estaré satisfecho si simplemente me dices que el programa está completo"

El programador accedió a esto.

Varios años después, el gerente se retiró. Cuando iba camino a su cena de despedida, descubrió al programador durmiendo en su terminal. Había estado programando toda la noche.

5.3

Un programador novicio fue asignado para escribir un sencillo paquete financiero.

El novicio trabajó furiosamente por varios días, pero cuando su maestro revisó su trabajo, encontró un editor de pantallas, un conjunto de rutinas gráficas generalizadas, una interface para inteligencia artificial, pero nada que hiciera mención a ninguna cosa financiera.

Cuando el maestro preguntó acerca de esto, el novicio se indignó. "No se vuelva impaciente", dijo. "Incorporaré las partes financieras eventualmente"

5.4

Abandona el buen granjero la cosecha que ha plantado?
Pasa por alto el buen maestro incluso al más humilde estudiante?
Deja el buen padre que su hijo pase hambre?
Se rehúsa el buen programador a mantener su código?

     Libro 6 -- Gerencia  
 

Entonces, dijo el maestro programador:

"Dejad que los programadores sean muchos y los gerentes pocos -- Entonces todos serán productivos"

6.1

Cuando los gerentes sostienen reuniones sin fin, los programadores escriben juegos. Cuando los contadores hablan de ganancias trimestrales, el departamento de desarrollo está a punto de ser despedido. Cuando los científicos hablan de cielo azul, entonces hay nubes.

En verdad este no es el Tao de la Programación.

Cuando los gerentes están en sus compromisos, el programar juegos se ignora. Cuando los contadores realizan planes a largo plazo, la armonía y el orden están a punto de ser reestablecidos. Cuando los científicos señalen los posibles problemas, los problemas serán solucionados pronto.

En verdad, éste es el Tao de la Programación.

6.2

Por qué los programadores no son productivos?
Porque su tiempo es malgastado en reuniones.

Por qué los programadores se vuelven rebeldes?
Porque los gerentes interfieren demasiado.

Por que los programadores abandonan uno a uno?
Porque se han quemado.

Cuando han trabajado para gerencias mediocres, ya no valoran su trabajo.

6.3

Este era gerente a punto de ser despedido, pero un programador que trabaja para él inventa un nuevo programa que se vuelve popular y bien vendido. Como resultado, el gerente mantuvo su trabajo.

El gerente trató de darle un bono al programador, pero el programador se rehusó, diciendo: "Escribí este programa porque pensé que sería un concepto interesante, y por eso no espero recompensa."

El gerente, cuando hubo oído esto, dijo: "Este programador, aunque mantiene bajo su perfil, entiende bien el deber de un empleado. Dejenos promocionarlo al privilegiado puesto de Consultor de Gerencia!"

Pero cuando se dijo esto, el programador una vez más se rehusó, diciendo: "Yo existo para poder programar. Si fuese promovido, no haría nada sino malgastar el tiempo de todos. Me puedo ir ya? Hay un programa en el cual estoy trabajando".

6.4

Un gerente se reunió con sus programadores y les dijo: "Con respecto a sus horas de trabajo, Ahora llegarán a las nueve de la mañana y se irán a las cinco de la tarde". A este punto, todos ellos se enojaron e incluso algunos presentaron sus renuncias en el acto.

Por lo que el gerente dijo: "Está bien, en ese caso ustedes mismos fijarán sus horas de trabajo, siempre y cuando terminen sus proyectos según los márgenes".

Los programadores, satisfechos, comenzaron a llegar en la noche y a trabajar hasta altas horas de la madrugada.

     Libro 7 -- Sabiduría Corporativa  
 

Entonces dijo el maestro programador:

"Puedes demostrarle un programa a un ejecutivo de la corporación, pero no puedes convertirle en un conocedor de computadoras".

7.1

Un principiante le preguntó al maestro: "Hacia el Este existe un enorme árbol-estructura que los hombres llaman «Cuarteles Corporativos». Está hinchado, lleno de vice presidentes y contadores. Emite multitudes de memos, cada uno diciendo 'Anda, aquí!' o 'Anda, allá', y nadie sabe que significa. Cada año nuevos nombres son puestos sobre las ramas, pero ninguno de provecho. Como puede existir una entidad tan desnaturalizada?

El maestro respondió: "Has percibido esta inmensa estructura y estás perturbado pues no tiene propósito racional alguno. No te entretienes con sus interminables giros? No disfrutas de la simplicidad de la programación albergada bajo sus ramas? Por qué molestarte con su inutilidad?

7.2

Al Este, hay un tiburón mucho más grande que los otros peces. Se transforma en un pájaro cuyas alas son como nubes llenando el cielo. Cuando este pájaro se mueve sobre la tierra, manda un mensaje desde los Cuarteles Corporativos. Este mensaje es lanzado en medio de los programadores, como una gaviota capturando su presa en medio de la playa. Entonces el pájaro alza sus alas y, con el cielo azul a su espalda, retorna a su hogar.

El programador novicio se sorprende ante el ave, debido a que no le entiende. El programador avanzado tiene miedo ante la venida del pájaro, pues le teme a su mensaje. El Maestro Programador continúa en su terminal, pues ignora que el pájaro ha venido y se ha marchado.

7.3

El Mago de la Torre de Marfil lleva su última invención al Maestro Programador para que la examine. El Mago carga una enorme caja negra en la oficina del Maestro mientras éste espera en silencio.

"Esta es una estación de trabajo integrada, distribuida y multipropósito",dijo el mago, "con un diseño ergonómico y un sistema operativo propietario, lenguajes de sexta generación, y varias interfaces de usuario excelentes. Le llevó a mis asistentes cientos de años humanos construirle. No es esto asombroso?

El Maestro alzó sus cejas ligeramente. "Es absolutamente sorprendente"dijo.

"Las Oficinas Matrices han encargado", continuó el mago, "que todos usen esta estación de trabajo como plataforma para los nuevos programas. Estás de acuerdo con esto?"

"Ciertamente", dijo el maestro. "Haré que la transporten al centro de datos inmediatamente!". Y el mago retornó a su torre, complacido.

Varios días más tarde, un novicio llegó hasta la oficina del maestro, y dijo: "No puedo encontrar los listados de mi nuevo programa. Sabes donde pueden estar?"

"Si", respondió el maestro. "Los listados están apilados en la plataforma en el centro de datos".

7.4

El maestro programador se mueve de programa en programa sin miedo. Ningún cambio de gerencia puede herirle. No será despedido, incluso si el proyecto es cancelado. Por qué es esto? El está lleno con el Tao.

     Libro 8 -- Hardware y Software  
 

Entonces dijo el Maestro Programador:

"Sin el viento, la hierba no se movería. Sin el Software, el Hardware no tiene ninguna utilidad".

8.1

Un principiante le pregunta al maestro: "Percibo que una compañía de Computación es mucho más grande que otras. Se alza sobre la competencia como un gigante entre enanos. Cada una de sus divisiones puede ser una industria por sí sola. Por qué es esto?

El maestro respondió: "Por qué haces preguntas tan necias? Esa compañía es enorme debido a su enormidad. Si sólo hiciese hardware, nadie le compraría. Si sólo hiciese software, nadie lo usaría. Si sólo mantuvieran sistemas, la gente le trataría como a sirvientes. Pero debido a que combina todas estas cosas, la gente cree que es uno de los dioses! Sin buscar esforzarse, conquista sin esfuerzo.

8.2

Cierto día, un maestro programador pasó cerca de un programador novicio. El maestro notó la preocupación del novicio con un juego de video de bolsillo. "Discúlpame", dijo, "puedo examinar eso?"

El novicio volvió en sí, y le entregó el juego al maestro. "Veo que el juego dice tener tres niveles de juego: Fácil, Medio y Difícil.", dijo el maestro. "Aunque cada aparato tiene otro nivel de juego, donde el aparato no busca conquistar al humano, ni ser conquistado por el humano"

"Ruego que me digas, Gran Maestro", imploró el novicio. "Donde puede uno encontrar esa misteriosa configuración?"

El maestro lanzó el aparato al suelo y lo aplastó bajo su pie.

Y súbitamente, el novicio fué iluminado.

8.3

Este era un programador que trabajaba con microprocesadores. "Mira que bien me encuentro aquí", le dijo a un programador de mainframes que estaba de visita. "Tengo mi propio sistema operativo y mi sistema de almacenamiento. No tengo que compartir mis recursos con nadie. El software es autosuficiente y simple de usar. Porqué no renuncias a tu actual trabajo y vienes a trabajar aquí?

El programador de mainframes entonces comenzó a describir su sistema a su amigo, diciendo: "El mainframe está sentado como un antiguo adivino meditando en el medio del centro de datos. Sus unidades de disco yacen en todo el lugar como un gran océano de máquinas. Su software tiene múltiples caras, como un diamante, y es tan convulsionado como una jungla primal. Los programas, cada uno único, se mueven a través del sistema como un río que fluye veloz. Esto es porqué estoy feliz donde me encuentro."

El programador de microcomputadores, habiendo escuchado esto, guardó silencio. Pero los dos programadores continuaron siendo amigos hasta el resto de sus días.

8.4

Hardware se reunió con Software en el camino hacia Chang Tsé. Software dijo: "Tú eres Ying y yo soy Yang. Si viajamos juntos nos volveremos famosos y ganaremos vastas sumas de dinero". Y así, marcharon juntos, pensando en conquistar el mundo.

Así llegaron donde Firmware, quien vestía de harapos raídos y cojeaba, caminando con un viejo bastón. Firmware les dijo a ambos: "El Tao yace más allá del Yin y el Yang. Es silencioso y quieto como una poza de agua. No busca la fama, por lo que nadie conoce su presencia. No busca fortuna, pues está completo dentro de sí. Existe más allá del tiempo y el espacio."

Software y Hardware, avergonzados, retornaron a sus moradas.

     Libro 9 -- Epílogo  
 

Entonces dijo el maestro programador:

"Es tiempo de que marches."
 

   Info  
  Copyright 1995 by Duke Hillard. Last Revision: Jun 02, 1995.
Traducido por Leonardo Herrera. Primera Versión: Jueves 12 de Marzo de 1998 5:04:34 PM
Ubicación Original: http://www-isis.ecs.soton.ac.uk/computing/c/notes/tao.html
 
     Glosario  
 
Firmware:
Pieza de software incorporada en un microprocesador, usualmente en un EPROM o similar. IBM llama a esto "microcode". Mayor información: What is... Firmware.