Crónicas del Buen Programador: Cero Excusas

“La mayor debilidad de las debilidades es el miedo a lucir débil.” – J.B. Bossuet, Politics from Holy Write, 1709.

Todo buen programador debe tomar responsabilidad de sus acciones y no debe tener miedo de admitir su ignorancia o sus errores. Este no es uno de los aspectos más placenteros de programar (o de cualquier carrera) pero siempre van a ocurrir errores, inclusive de parte de los mejores programadores en los mejores proyectos. A continuación algunos tips sobre cómo manejar estas situaciones.

Acababa de entrar en una empresa como contratista, estaba haciendo algunas tareas “entry-level” para un proyecto de manejo de datos masivos, me mandaron a actualizar unos componentes, estaba compilando unos fuentes y al parecer habían problemas de compatibilidad, yo el más novato y creativo, decidí agarrar una librería binaria de otra máquina (que sí era compatible) y remplazar nada más y nada menos que libc.so.x (una librería de la cual TODO el sistema depende) en un servidor en producción. ¡BAM! Rompí el servidor, terabytes de data inaccesible por clientes que pagaban decenas de miles de dólares mensuales por acceso a reportes en línea de nuestro sistema… ¿Dónde están de nuevo esas pastillas de chiquitolina?

Como ésta tengo muchas otras historias, en las que siempre es bueno admitir nuestras fallas, en ese caso por no admitir mi ignorancia y dármela de creativo cree un problema que pudo ser resuelto de otra forma, en fases, de manera más segura. Sin embargo, admití mi error, aprendí mi lección y en un par de horas pudimos de una forma entrar a un sistema que sólo reconocía los comandos de más bajo nivel (dado que nada que dependía de librerías de C funcionaba, fue horrible y no se me olvida). En ese caso, dada mi inexperiencia en aquel entonces no quedó otra que admitir mi falla  hacerme responsable, ir a mi superior y avisar inmediatamente del problema cosa de poder resolverlo.

Toma Responsabilidad

Uno generalmente toma la responsabilidad de realizar tareas, pero no tenemos la certeza de que podremos controlar todos los aspectos relacionados directamente con lo que hacemos. Además de intentar hacer las cosas lo mejor que puedas, trata de analizar los riesgos que están fuera de tu control, tienes el derecho de no ser responsable de situaciones imposibles.

Cuando aceptas la responsabilidad de un posible resultado no culpes a otros o a algo por tus fallas si no logras los resultados, tampoco inventes excusas, no culpes al lenguaje de programación, o al sistema operativo, simplemente enfócate en proveer soluciones.

Provee Opciones, No Inventes Excusas

Antes de perder el tiempo de otra persona para decirle que “no se puede”, “es demasiado tarde”, “se rompió”, detente y escúchate a ti mismo, háblale al monitor, al espejo, déjate un mensaje en el celular, a los lápices en tu escritorio, o a tu perro con esa misma excusa. ¿Suena razonable o estúpida tu excusa? Si tienes un jefe, ¿te hará sonar como un tonto? En corto lee el título del post, Cero Excusas.

Explica qué puede hacerse para salvar la situación, edúcate en el valor de refactorización (si utilizas Eclipse o un IDE que permita hacer refactors automáticos y no has aprendido a usar estos features, aprende ya, te ahorrarán mucho tiempo y te permitirán hacer tareas que antes te parecían extremadamente trabajosas en cuestión de minutos).

Crea código que sea fácil de probar (crea código y luego haz unit tests – pruebas unitarias -), piensa en la automatización y en cómo por hacer las cosas de forma manual puedes terminar introduciendo errores en procesos.

Automatización, Automatización, Automatización (un tema del cual quizás deberíamos escribir otro post)

Si no utilizas un lenguaje de scripting para las cosas que haces a diario una y otra vez, es hora que empieces. Python, Bash o el mismo PHP pueden ser muy útiles para la automatización de múltiples tareas, inclusive tareas que incluyan múltiples servidores. Trata siempre de reducir procesos complejos a la menor cantidad de pasos posibles, si estos procesos necesitan ser ejecutados de forma periódica tal reducción puede llegar a cero pasos si utilizas cronjobs que ejecuten scripts que reduzcan tus procesos a un paso.

Puede ser que te hagan falta recursos, o que necesites aprender o estudiar, en estos casos pide lo que necesites, busca problemas similares en foros o listas de correos (Google es tu aliado para encontrar soluciones a problemas técnicos sumamente rebuscados, también StackOverflow esta lleno de expertos en los temas más rebuscados de programación y administración de sistemas), en última instancia pregunta a tus peers, o si sabes que alguien estaba lidiando con situaciones similares en tu equipo tal vez vale la pena interrumpirlos si te encuentras en una emergencia. Por último, trata de documentar soluciones a problemas difíciles, en mi caso cuando encuentro problemas muy malditos siempre trato de documentarlos en mi blog, es satisfactorio ver otras personas encontrar una salvación gracias a un blog post tuyo. Si lo que estás haciendo es sumamente privado, intenta utilizar mecanismos internos en tu empresa para documentar estos problemas (wiki, blogs, jira, lista de correos).

La próxima vez que te encuentres en una situación donde sabes que tienes la culpa, imagínate que harías si tu banco, o tu mecánico te saliera con una excusa ridícula, ¿qué pensarías de ellos o de su empresa como resultado?

Sobre el Autor

Angel León (aka Gubatron) es un Ingeniero de Software Venezolano (UCAB) que ha desarrollado desde sencillos sistemas con bases de datos relacionales, servicios webs distribuidos para millones de visitantes mensuales, software p2p de uso masivo, hasta aplicaciones para dispositivos mobiles, todo esto empleando gran variedad tecnologías abiertas (Linux, Android, Java, Python, PHP, C++, Javascript).

Estas crónicas son inspiradas en el libro “The Pragmatic Programmer” (un libro que debería ser un texto obligatorio en todo curso de Ingeniería de Software) junto con las experiencias de Angel León durante los últimos 8 años desarrollando software en Venezuela y los Estados Unidos.

[ad#Gubatron-AmazonAd-PPBook-120×240]
  • Excelente documento, alguna de esas cosas me recordaron a prácticas que he realizado