El Programador Mañoso

From The Joel on Software Translation Project

Revision as of 14:16, 25 September 2009 by Jsoto (Talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Por Joel Spolsky
Miércoles 23 de septiembre de 2009
Artículo original: The Duct Tape Programmer
Traducido originalmente por: Jaime Soto


Jamie Zawinski es lo que yo llamaría un programador mañoso. Y lo digo con mucho respeto. El es el tipo de programador que se esfuerza por construir el futuro y cosas útiles para que la gente pueda hacer su trabajo. El es el tipo que quisieras tener para construir carros de rodillos para tu equipo, por que tiene dos herramientas favoritas: cinta adhesiva y WD-40. Y las emplea elegantemente aún mientras tu carrito desciende la colina a una milla por minuto. Esto ocurrirá mientras los otros programadores estan todavía en la línea de salida alegando si deben usar titanio o algún tipo de material de la era espacial que Boeing está usando en el 787 Dreamliner.

Al fin de cuentas, terminarás con un carrito desorganizado pero muy veloz.

Acabo de leer una entrevista de Jamie en el libro Coders at Work de Peter Seibel. Cómpralo ya. Es una maravillosa colección de entrevistas de grandes programadores, incluyendo Peter Norvig, Guy Steele y Donald Knuth. Este libro es tan interesante que terminé trotando 60 minutos en la máquina de ejercicio en vez de los habituales 30 por que no pude parar de leer. Como dije, vé y cómpralo.

¡Vé! Yo espero.

Esta es la razón por la cuál me gustan los programadores mañosos. Algunas veces, estás en un equipo, y estás ocupado reventando código, y alguien se acerca a tu escritorio, taza de café en mano, y empieza a refunfuñar que si estuvieras usando apartamentos COM multi-hilos tu programa sería 34% más resplandeciente, y ni siquiera es tan difícil, por que él ha escrito un montón de plantillas, y lo único que tienes que hacer es usar herencia múltiple desde 17 de sus plantillas, cada una con un promedio de 4 argumentos, y a duras penas tendrás que escribir el cuerpo de la función. Es simplemente una gigantesca lista de herencias multiples y listo, apartamentos COM multi-hilos. Y tus ojos navegan, y entiendes de que carajo esta hablando éste idiota, y aún cuándo él se marcha. él simplemente volverá a su oficina y escribirá más de sus ingeniosas clases construídas completamente a través de herencias multiples de plantillas, sin tener que escribir el cuerpo de ninguna implementación, y va a empezar a fallar cómo loco y tu vas a ser al que llaman por la noche a tratar de decifrar que pasa por que él va a estar en una condenada reunión de "Patrones de Diseño".

Y al programador mañoso no le da miedo decir, "herencia multiple es una porquería. Deja de usarla. Simplemente déjala."

Ves, a los demás les da mucho miedo de parecer ignorantes por que no pueden mantener suficientes datos en su cabeza a la misma vez para hacer que herencia multiple, o plantillas, o COM, o multi-hilos, o cualquier otra cosa de esas funcione. Entonces siguen como ovejas mansas cualquier moda de programación descabellada mandada por los los astronautas arquitectónicos que hablan en las conferencias y escriben libros y artículos y son mucho más inteligentes que nosotros que ni se dan cuenta que las cosas que promueven son muy difíciles de entender para nosotros.

Esto es lo que Zawinski dice acerca de netscape: "Fueron decisiones como no usar C++ ni hilos que lograron que completaramos el producto a tiempo."

Luego, él escribió un cliente de correo electrónico en Netscape, pero el equipo responsable de mostrar el mensaje nunca completó su componente. "Sólo había un gran rectángulo vacío en medio de la ventana dónde sólo podíamos mostrar texto simple. Estaban siendo extremadamente académicos con su proyecto. Estabán buscando una solución desde el punto de vista de DOM/DTD. 'Bueno, lo que tenemos que hacer es añadir otra capa de abstracción aquí y tener un delegado para este delegado para este delegado. Y eventualmente un carácter aparecerá en la pantalla.'"

Peter le preguntó a Zawinski, "la requete-ingeniería parece molestarte".

"Sin duda", dijo, "al fin de cuentas ¡completen la maldita cosa! Es maravilloso reescribir tu código y hacerlo más limpio y después de la tercera ronda se verá hasta bonito. Pero ese no es el punto - no estás aquí para escribir código; estás aquí para completar productos".

Mi héroe.

Zawinski no hacía muchas pruebas unitarias. "Suenan maravillosas en principio. Dado un paso de producción descansado, esa es definitivamente la forma de hacerlo. Pero cuando te enfrentas a 'tenemos que ir de cero a completo en seis semanas', bueno, no puedo hacer eso a menos de que elimine otra cosa. Y lo que voy a eliminar son las cosas que no son absolutamente críticas. Y las pruebas unitarias no son críticas. El cliente no se va a quejar si no hay una prueba unitaria".

Los programadores mañosos son prágmaticos. Zawinski popularizó el precepto de Richard Gabriel que proclama que Peor es Mejor. Una solución 50% buena en manos de la gente soluciona más problemas y sobrevive por más tiempo que una solución del 99% que nadie ha obtenido por que te la pasas incesantemente puliendo la condenada cosa. Completar el producto es uno de sus atributos. Un atributo sumamente importante. Tu producto debe tenerlo.

Un principio que los programadores mañosos entienden bien es que cualquier tipo de técnica de programación que es tan solo levemente complicada va a arruinar tu proyecto. Los programadores mañosos tienden a evitar C++, plantillas, herencia multiple, multi-hilos, COM, CORBA, y una gama de otras tecnologías que son totalmente razonables, cuándo piensas intensa y largamente acerca de ellas, pero que son, honestamente, simplemente un poquito muy difíciles para el cerebro humano.

Claro, no hay nada oficialmente' malo con tratar de escribir código multi-hilos en C++ en Windows usando COM. Pero está propenso a errores desastrosos, el tipo de errores que sólo ocurren bajo escenarios muy específicos, por que nuestros cerebros no son, honestamente, lo suficientemente buenos para escribir este tipo de código. Los programadores mediocres son, francamente, defensivos acerca de esto, y no les gusta admitir que no son capaces de escribir este código super-complicado, entonces dejan que los bravucones del equipo persistan con alguna condenada arquitectura de plantillas en C++ por que sino tendrían que admitir que no se sienten lo suficientemente inteligentes para usar lo que en otras circunstancias sería una técnica de programación perfecta PARA SPOCK. Los programadores mañosos les importa un carajo lo que pienses de ellos. Se limitan a herramientas simples, básicas y fáciles y usan la capacidad cerebral adicional que les dejan estas herramientas para escribir atributos más útiles para sus usuarios.

Una de las cosas con la que debes tener cuidado, sin embargo, es que los programadores mañosos en el mundo del software son el equivalente a los niños lindos... esos jóvenes impresionantemente apuestos que pueden saltar de la cama, sin afeitarse, sin peinarse, sin lavarse los dientes, y montarse en el metro con la ropa sucia de ayer y verse hermosos, por que asi son. Tu, mi amigo, no puedes salir al público sin peinarte. Asustarías a los niños. Los programadores mañosos requieren mucho talento para que les funcione este truco. Tienen que ser programadores los suficientemente buenos para completar su código y los perdonaremos si nunca escriben una prueba unitaria, o si utilizan disjunción exclusiva (xor) con los punteros "próximo" y "previo" de su lista enlazada para que compartan un sólo DWORD para ahorrar 32 bits, por que son lo suficientemente bellos, y lo suficientemente inteligentes, para que les funcione.

¿Ya compraste Coders at Work? ¡Ve! ¡Este fué tan sólo el primer capítulo!

Personal tools