martes, 7 de mayo de 2013

El Maestro Programador gana el Juego del Software - Parte 1

Desde casi 400 años en el pasado, un Samurai nos enseña lecciones para tener éxito en el desarrollo de software y ser un maestro, ya sea como programador, analista, diseñador o arquitecto de software, e incluso aplica a cualquier arte/ciencia/técnica. 


Miyamoto Musashi escribió el libro Go Rin No Sho (El libro de los Cinco Anillos) en el siglo 17, después de ganar batallas toda su vida y llegar -completo- a los 70 años. Alistair Cockburn en su libro Agile Software Development (Adison-Wesley 2007) incluso dedica un apéndice a citar las lecciones del Samurai. 

Puede ser sorpresa o no, pero la forma de pensar descrita en el libro de los cinco anillos aplica directamente al desarrollo de software y las he practicado por un tiempo ya, en la medida en que son efectivas. Claro que en nuestro caso, no siempre es una cuestión de vida o muerte con con las técnicas de batalla Samurai, pero aplican a Ganar el juego también 

He aquí algunas lecciones de Musashi, y mi reflexión de como se relaciona a nosotros los Programadores y Desarrolladores de Software, en una serie de artículos que tengo tiempo pensando en escribir. 

Lección 1
El campo de las artes marciales está particularmente plagado de exhibicionismo extravagante, con la popularización comercial y especulación por parte tanto de los que enseñan la ciencia como de los que la estudian. El resultado de esto debe ser, como alguien dijo, que "las artes marciales de aficionados son una fuente de graves heridas"...-Miyamoto Musashi, Go Rin No Sho, Siglo XVII
Esta es una de las lecciones mas obvias, mas fáciles de relacionar con nuestro campo de la programación. sin embargo puede haber otros comentarios necesarios.

 La programación de sistemas es una actividad económica  y como tal, esta sujeta a la competencia y a la mercadotecnia (y lo sabemos, porque de eso vivimos). 

El problema es cuando muchos intentan vender a como de lugar, el argumento de ventas probablemente mas típico es el de la "Bala de plata": la herramienta de desarrollo que sirve para todo y todo lo resuelve de una manera sublime y sin problemas. La "espectacular" técnica, metodología o patrón que dice adaptarse a
cualquier problema para convertirlo en solución. Incluso el desarrollador que dice saberlo todo y que siempre esta en posición de ataque/defensa para que no quede duda, con un curriculum con paginas llenas de palabritas clave y acrónimos que alguna vez vio en sus proyectos(o en los de la empresa donde trabajó) y presume de dominarlas todas y cada una.

Para el novato o no-tan-experto programador, incluso para experimentados con tendencias al fanatismo y a la cultura de la lotería, esto suena como algo que debería tener, una idea con que casarse, hacer vida juntos y tener muchos proyectos-hijos. Pero ¡Cuidado! ya que esto, en opinión compartida por su servidor, es una de las principales razones de "Graves Heridas", es decir, Proyectos fallidos, fuera de presupuesto, grandes derroches de recursos en herramientas que se dejan de mantener, altísimos costos de mantenimiento de sistemas heredados, e inclusive, de desencuentros entre colegas, y de despidos y renuncias con animadversión por ambas partes. 

Por el contrario, el pragmatismo sigue siendo una buena filosofía: "La verdad es solo lo que funciona, y lo que funciona es la verdad. Cuando no aplique, entonces es solo una verdad a medias". Esto significa que las Herramientas, aplicaciones, metodologías  técnicas, colaboradores y soluciones deben ser juzgadas por su verdadera utilidad, y saber lo mas pronto posible cuales son sus fallos, y entonces decidir de entre las opciones a la mano, cual podría resultar mejor. 

Claro que no es fácil retirar el exhibicionismo y la espectacularidad del camino, sobre todo para quien le gusta creer en los reyes magos todavía o que le gusta hacerse la vida fácil, pero recuerda que estas son solo una herramienta para llegar a un fin, que es un proyecto de software exitoso. 

Después seguiré exponiendo algunas otras lecciones de Musashi para el programador. Arigato.