Este libro, escrito en el año 1987 por Geoffrey James, recoge, en un humorístico tono de misticismo oriental, distintas historias y parábolas con geniales mensajes de fondo sobre calidad en la programación, gestión de proyectos y otros temas que siguen siendo válidos veinticinco años después. Como probablemente habrá más lectores que no lo conozcan, me ha parecido interesante reproducirlo aquí traducido en su totalidad, por supuesto contando previamente con el permiso expreso del Sr. James.
Comentarios
Para ser leido correctamente ha de ser impreso en papel bandeado con una impresora matricial de carro ancho.
El Gran Maestro Turing una vez soñó que era una máquina. Cuando se despertó, exclamó:
”¡No sé si soy Turing soñando que soy una máquina, o una máquina soñando que soy Turing!'”
#17 http://www.concienciasinfronteras.com/PAGINAS/CONCIENCIA/chuangtsemariposa.html
“Vivo para la programación. Si fuera ascendido no haría más que desperdiciar el tiempo de todos. ¿Me puedo ir? Tengo un programa en el que trabajar”
Sólo por esta frase ya vale la pena
#14 Olvidalo, desaprendelo, borra ese conocimiento de tu memoria. Por tu bien. Es un consejo
Mira, te voy a pegar un cacho de código que usa mi aplicación (una mega aplicación de cálculo de nómina que a nivel más bajo, son programas COBOL enormes):
-------------------------------------------------------------- DE
010 ****** N ****************************** 25 DW 8K-I < WAB-IND-8K-L
020 ****** * * SEARCH PAY ITEM INTO W-DRC4M *
030 ****** * * TABLE : PAY ITEMS THAT ARE *
040 ****** * * LOADED INTO PRDB AND HAVE A *
045 ****** * * ZD4M *
055 ****** * ******************************
060 ****** A 1 8K-I
062 ****** M Z-ZX8K-ZONINF (8K-I)
064 ****** VAB-ZX8K
065 ****** * SEARCH FOR PAY ITEM IN ZDAH
066 ****** * TABLE WITH A ZD4M INDEX NOT
067 ****** * NULL
068 ****** COB SEARCH ALL WAB-DRCAH-POSTE
069 ****** AT END MOVE ZERO TO WAB-DRC-Y
070 ****** WHEN WAB-DRCAH-CODRUB
071 ****** (WAB-DRCAH-IND)
072 ****** = VAB-ZX8K-CODRUB
073 ****** MOVE "1" TO WAB-DRC-Y
-------------------------------------------------------------- DI
010 ****** N ****************************** 30 IT WAB-DRC-Y = "1"
020 ****** * * IF ZD4M IS CODIFIED WE TAKE * AN W-DRC-IND-4M (WAB-DRCAH-IND)
030 ****** * * IT INTO ACCOUNT * NOT = ZERO
040 ****** * ******************************
060 ****** M VAB-ZX8K-TOTVAL
070 ****** WAB-TOTVAL
080 ****** * INTERNAL TO EXTERNAL PERIOD
090 ****** M WAB-DATVAL WAB-TRP-PER-IN
100 ****** PTR ABXTRPE
110 ****** M WAB-TRP-PER-EX W-PERDSL 99 IT WAB-TRP-PER-EX NOT = SPACE
120 ****** M Z-ZX00-PERPAI(1:2) W-FRQDSL
130 ****** M SPACE UAB-ZUTEEE 99 EL
140 ****** M WAB-TRP-PER-IN UAB-ZUTEEE-0104
150 ****** M "X4K1EK" UAB-ZUTEEE-0611
160 ****** ERR DCC 5UAB-ZUTEEE
170 ****** GT 10
180 ****** PTR ABXSEADI 99 BL
190 ****** M W-DSL-DAFIN (W-DSL-DI-IND) 99 IT W-DSL-DI-Y = "1"
200 ****** WAB-DATFIN
210 ****** M SPACE UAB-ZUTEEE 99 EL
220 ****** M WAB-PER1FF UAB-ZUTEEE-0104
230 ****** M "X4K1EK" UAB-ZUTEEE-0611
240 ****** ERR DCA 5UAB-ZUTEEE
250 ****** GT 10
260 ****** A 1 8K4K-I 99 BL
-------------------------------------------------------------- DM
010 ****** N ****************************** 35 IT Z-ZX6B-NOMBRE > 0
020 ****** * * GET END OF PAYSLIP PERIOD *
030 ****** * * FROM ZX6B (YSD1) *
050 ****** * ******************************
051 ****** M Z-ZX6B-FINPER(1) WAB-D1FINP
-------------------------------------------------------------- DR
010 ****** N ****************************** 35 IT 8K4K-I NOT GREATER 8K4K-IM
020 ****** * * LOAD INTO WAB-8K4K-TABLE *
030 ****** * ******************************
040 ****** M VAB-ZX8K-CODRUB
050 ****** WAB-8K4K-CODRUB (8K4K-I)
060 ****** M VAB-ZX8K-IMPUTA
070 ****** WAB-8K4K-IMPUTA (8K4K-I)
080 ****** M WAB-DATFIN
090 ****** WAB-8K4K-DATFIN (8K4K-I)
092 ****** M WAB-D1FINP
094 ****** WAB-8K4K-D1FINP (8K4K-I)
100 ****** M VAB-ZX8K-MONSAL
110 ****** WAB-8K4K-MONSAL (8K4K-I)
120 ****** M VAB-ZX8K-MONPAT
130 ****** WAB-8K4K-MONPAT (8K4K-I)
131 ****** M VAB-ZX8K-DATRUB
132 ****** WAB-8K4K-DATRUB (8K4K-I)
133 ****** M VAB-ZX8K-NBRBAS
134 ****** WAB-8K4K-NBRBAS (8K4K-I)
135 ****** M VAB-ZX8K-TAUSAL
136 ****** WAB-8K4K-TAUSAL (8K4K-I)
137 ****** M VAB-ZX8K-TAUPAT
138 ****** WAB-8K4K-TAUPAT (8K4K-I)
-------------------------------------------------------------- DU
010 ****** N SEARCH FOR CODRUB INTO 35 BL
020 ****** * DRCAH TABLE TO FIND TENATU
030 ****** COB SEARCH ALL WAB-DRCAH-POSTE
040 ****** AT END MOVE ZERO TO WAB-DRC-Y
050 ****** WHEN WAB-DRCAH-CODRUB
060 ****** (WAB-DRCAH-IND)
070 ****** = VAB-ZX8K-CODRUB
080 ****** MOVE "1" TO WAB-DRC-Y
-------------------------------------------------------------- DW
140 ****** N APPLY INVERSION OF SIGN 35 IT WAB-DRC-Y = "1"
150 ****** * DEPENDING OF PAY ITEM NATURE AN WAB-DRCAH-TENATU
170 ****** MP -1 WAB-8K4K-MONSAL (8K4K-I) (WAB-DRCAH-IND) = "2"
190 ****** MP -1 WAB-8K4K-MONPAT (8K4K-I)
-------------------------------------------------------------- EN
010 ****** N ****************************** 20 IT 8K4K-I GREATER 8K4K-IM
020 ****** * * ERROR MESSAGE IF *
030 ****** * * OVERFLOW OF *
040 ****** * * WAB-8K4K-TABLE *
050 ****** * ******************************
070 ****** M SPACE WMDI
080 ****** M "BBAD0012" S-CDDISP
090 ****** M "WAB-8K4K-TABLE"
095 ****** S-ZOSUB1
100 ****** M 8K4K-I S-ZOSU29
110 ****** M 8K4K-IM S-ZOSU39
120 ****** COB PERFORM F97 THRU F97-FN
130 ****** M "1" UT-POERRE
140 ****** M "1" WAB-SHUNTSAL
150 ****** WAB-SHUNTBUL
170 ****** * *--- REJECT DOSSIER ---*
180 ****** M SPACE WMDI
190 ****** M "DDAG0042" S-CDDISP
200 ****** M WAB-NUMSOC S-ZOSUB1
210 ****** M WAB-CLESAL S-ZOSUB2
220 ****** COB PERFORM F97 THRU F97-FN
230 ****** M "1" UT-POERRE
Bueno, no tabula bien, pero te haces una idea...
Nota que donde veas la clausula GT, el metacompilador lo traduce como un GOTO, y no se puede hacer de otra manera
#15 joder, es más complicado que el COBOL en si mismo...de hecho ni usábamos GOTO en los programas
#15 Programas en HOYGAN? Que dolor!
#15 Joder, y luego dicen que el PHP es un lenguaje de mierda
#24 ¿Que PHP es un lenguaje de mierda? ¿Quien dice eso?
#27 Yo, y si pongo una lista aqui de cosas mierdosas de PHP me expulsan por floodear. PHP no es zen ni tao ni nada, es un saco con un monton de funciones cuyo nombre nadie puede recordar.
#29 Hombre, si la alternativa es ASP me quedo con PHP
#29 adoctrina tus datos para formar piezas pesistentes y claras, no dejes que tu vista interfiera en tu control , que tus acciones sean evidentes para el usuario . Junta todas estas habilidades en la bandeja de la caldera siguiendo el camino Zen(d)
Cuando entiendas mis palabras veras que el Tao tambien es posible a traves de Caos... Ups perdon, a traves de PHP
#29 te falta perspectiva.
Los hashes de php son un horror. Pero son un salto evolutivo con perl, que era a quien pretendía superar.
Los pajar-aguja / aguja-pajar son incongruentes. Pero eso es un mal menor; con un editor moderno con autocompletado no es tan difícil.
El manejo de cadenas, encodings y fechas es un horror, y hay funciones que ni la madre que las pario sabe para que sirven, porque la documentación es una mierda. Pero eso es cierto con la gran mayoría de los lenguajes de programación.
Y no me hagas entrar en cosas frikis como la conversión implícita entre tipos, porque fliparias... los que tengáis PHP a mano, probad esto y sufrid:
----
$entrada = "ERROR COMO UNA CATEDRAL DE GRANDE!!";
if( $entrada['exito'] )
">
----
Pero es que te equivocas de base. Tu dices que PHP es una mierda. En realidad, programar hoy en dia es una mierda, en conjunto; estamos en pleno siglo XXI, uno se esperaria que la maquina fuera un poco mas "amistosa" con el desarrollador, pero lo mas parecido que tenemos es una bisnieta de Elisa conectada a un sintetizador de voz y un sistema de reconocimiento de voz, reproduciendo listas de musica y buscando por ti en google. En realidad, seguimos anclados en los años 60 en muchos temas. Es lo que tiene el capitalismo: beneficio a corto plazo antes que evolucion...
#35 No me falta perspectiva, vivo en el Tao/Zen de Python y cualquier cosa que no sea la excelencia ensucia mi karma.
Hace años quise encontrar en Tao en PHP pero la incompetencia de sus creadores rompia mi paz una y otra vez.
OMHHHHHH
#38 qué pena, pero si estás intentando alcanzar el Tao por medio de un lenguaje en especial, no has entendido el Tao (y tu soberbia no te dejará entrar en el Tao)
#40 Yo busco el Tao en las necesidades, muchas son cubiertas por Python, otras solo por C o Javascript, solo el gran programador sabe que necesidades nos depara el futuro, pero PHP no cubre necesidades, es una necesidad en si mismo, alejarte del camino de PHP te iluminará hasta el verdadero Tao. OMHHH.
#27 Prueba python, eso si que es un lenguaje Zen.
Aunque para mi PHP también tiene su encanto, a pesar de que le faltan cosas importantes como los espacios de nombres, un sistema robusto de clases y le sobran otras cosas como las conversiones automágicas de tipos
...
“¿Y si le asigno cien programadores?”
El maestro programador se encogió de hombros. “Entonces el diseño no se completará jamás”, dijo.
Había una vez un programador que trabajaba con microordenadores. “Mira lo bien que estoy aquí”, dijo a un programador de mainframes que lo fue a visitar. “Tengo mi propio sistema operativo y dispositivo de almacenamiento de archivos. No tengo que compartir mis recursos con nadie. El software es consistente y fácil de usar. ¿Por qué no dejas tu trabajo actual y te vienes conmigo?”
Entonces, el programador de mainframes comenzó a describir su sistema a su amigo, diciendo: “El mainframe está sentado como un antiguo sabio meditando en el centro de datos. Sus discos se encuentran de extremo a extremo como un gran océano de maquinaria. El software es tan polifacético como un diamante, y enrevesado como una selva virgen. Los programas, cada uno único, se mueven a través del sistema como un río de corriente rápida. Por eso estoy feliz donde estoy”.
El programador de microordenadores, al oír esto, se quedó en silencio. Pero los dos programadores siguieron siendo amigos hasta el final de sus días.
C&P
Cada lenguaje tiene su propósito, aunque sea humilde. Cada lenguaje expresa el Yin y el Yang del software. Cada lenguaje tiene su lugar dentro del Tao.
Pero no programes en COBOL si puedes evitarlo.
#7 Nunca subestimes la chunguez del RPG. Ningún proyecto en COBOL puede minarle a uno la moral como tirar código de RPG. El horror! El horror!
#7 #8 Solo diré una palabra: PACBASE
#7 #8 #11 sólo diré 1 cosa: masters do it on the PROCEDURE DIVISION
#12 PACBASE es un metalenguaje que genera código COBOL
#13 nunca te acostarás sin saber una cosa nueva. No tenía ni idea de eso
Copy/Paste
Así habló el maestro programador:
“Después de tres días sin programar, la vida pierde sentido”
El maestro es sabio y tiene paciencia...
...el jefe abraza la ignorancia y desprecia la calidad, lo quiere corriendo ya!
Curiosas enseñanzas para sonreir y pasar el rato
Creo que obtuve mi primera copia de ese texto en una BBS de fido con un modem de 2400, que tiempos Y_Y
Había una vez un maestro programador que escribía programas no estructurados. Un programador novicio, buscando imitarlo, también comenzó a escribir programas no estructurados. Cuando el novicio le pidió al maestro que evaluara su progreso, el maestro lo criticó por escribir programas no estructurados, diciendo:
“Lo que es apropiado para el maestro no es apropiado para los principiantes. Debes entender el Tao antes de trascender la estructura”.
Jamás dejará de sorprenderme el nivel de frikismo...
Pá desintoxicar:
http://blogs.revistagq.com/nadaimporta/category/hombres-de-bien/
Un novicio le preguntó al Maestro: "Hay un programador que nunca diseña, documenta, ni prueba sus programas. Y todos los que lo conocen lo consideran uno de los mejores programadores del mundo. ¿Cómo es esto?"
El Maestro contestó: "Ese programador se ha convertido en un maestro del Tao. El ha ido más allá de la necesidad de diseñar; el no se enoja cuando el sistema se cae, acepta al universo sin preocupación. El ha ido más allá de la necesidad de documentar; ya no le interesa si alguien más ve su código. El ha ido más allá de la necesidad de probar; cada uno de sus programas son perfectos dentro de sí mismos, serenos y elegantes, su proposito es auto-evidente. Realmente, el ha penetrado el misterio del Tao."
OH MAESTRO, HE VISTO LA LUZ!!!
Es el BOFH_Zen!
Epic, no hay mas que decir
Siendo menéame me sorprende tantos votos salvo que sean por darlo a conocer a más gente aunque ellos ya lo conozcan...... o será que yo he dado con gente bastante friki cuando entre a primero de informatica en la web de la primera asignatura de programación estaba este genial documento entre los enlaces
¡Lo quiero en formato DOC para colgarlo en el tablón de mi universidad!
No lo conocía es buenísimo...
Que fuente de sabiduria...
me siento como si leyera comentarios en chino...
He sido iluminado
Lloré mientras lo leía. =)
Releeré uno cada día para entender el Tao.
Vaya lol lo de la ley de las sorpresas