La Ley de Hofstadter: ¿Por qué los Programadores Nunca Terminan a Tiempo?

Contexto

¿Cuántas veces, como programador, has afirmado “Estoy a punto de terminar!”? Sin embargo, ese “casi” parece extenderse hasta el infinito. La explicación a esto podría residir en un concepto conocido como la Ley de Hofstadter.

La Ley de Hofstadter

La Ley de Hofstadter es mas un dicho/hipótesis que una Ley (aunque se experimente mucho) propuesta por el doctor Douglas Hofstadter. Esta ley sostiene que las tareas siempre requieren más tiempo del previsto, incluso cuando somos conscientes de nuestra tendencia a subestimar el tiempo necesario. Dicho de otra forma, las personas somos malísimas estimando tiempos y por eso creo que no deberíamos hacerlo.

La Ley de Hofstadter y la Programación

En el ámbito de la programación, la Ley de Hofstadter se manifiesta de formas peculiares y a veces humorísticas. ¿Alguna vez has estimado que un error te llevaría 10 minutos para solucionarlo y terminaste invirtiendo toda la tarde en él? ¡Eso es la Ley de Hofstadter en pleno apogeo!

Causas

Primero, la programación no es nada sencilla. Es como un rompecabezas gigante que tienes que armar, pero sin tener la imagen de la caja para guiarte. A veces, te encuentras con problemas que no esperabas. Imagina que estás armando tu rompecabezas y de repente te das cuenta de que algunas piezas no encajan o incluso faltan. Eso es lo que pasa cuando programas.

Además, a veces lo que necesitas hacer cambia en medio del camino. Es como si, mientras estás armando tu rompecabezas, alguien viene y te dice que la imagen ha cambiado y ahora tienes que hacer un paisaje en lugar de un retrato y lo que parecia la pieza correcta ya no lo es.

Otra cosa que complica la programación es la incertidumbre. No siempre sabes cómo se ve el problema, cómo se ve la solución, o incluso cuál es el verdadero problema que estás tratando de resolver. Es como tratar de armar un rompecabezas en la oscuridad. Por tanto cuanto menos oscuro menos incertidumbre.

Y por último, pero no menos importante, está el tiempo que se necesita para arreglar los fallos. Porque sí, siempre hay fallos. Es como si cada vez que pones una pieza en su lugar, tienes que revisar todas las demás para asegurarte de que todavía encajan.

Estrategias

Mira, aquí es donde la cosa se pone interesante. Imagínate que tienes un montón de tareas que hacer y no sabes por dónde empezar. Bueno, hay algunas estrategias que puedes usar para que no te sientas tan abrumado. Una de ellas es dividir las tareas en partes más pequeñas, algo así como cortar un pastel en pedazos. Así, en lugar de tener que comerte todo el pastel de una vez, puedes ir comiéndotelo poco a poco.

También, hay técnicas como la Programación Extrema que pueden ayudar a organizar mejor tu tiempo. En pocas palabras es algo que probablemente ya hagas si trabajas en siguiendo Agile. Se trata de establecer releases cortas para favorecer la producitividad y mantener el foco en lo importante.

Pero, si hay algo que de verdad es importante, es la comunicación. Imagínate que estás trabajando en un proyecto con un equipo y un cliente. Si no les cuentas a los demás cómo va el proyecto, podrían llevarse una sorpresa desagradable. Por eso, es importante que siempre mantengas a todos informados sobre cómo van las cosas. Así, si algo no va bien, todos estarán al tanto y podrán ayudarte a solucionarlo. Y si todo va bien, entonces todos estarán contentos y podrán celebrarlo juntos. Así que ya sabes, la comunicación es la clave.