pctroll { jorge palacios }

desarrollador de juegos, programador, investigador de IA

Correr en frío es saludable

sonic

¿Que correr en frío evita molestias? Capaz y estás pensando: –Jorge, mi médico y fisioterapeuta me dijeron lo contrario. ¿Pelón Confusión de “troll”?– Claro que sí es saludable, para tu mente.

A ver, lo que me lleva a escribir esta entrada es un poco de reflexión y re-aprendizaje. ¿Cómo es eso? En las últimas semanas he estado prestando particular atención a mi forma de programar y a los errores en mis programas (tanto los de compilación como en ejecución), esto con la finalidad de compensar y atacar ciertas deficiencias. Pero en fin, eso es harina de otro costal un tema aparte. El caso está en que varios de estos errores son, si se quiere, “tontos”.

Estos errores tienen un sencillo basamento y la mejor forma que se me ocurre para explicarlo, de manera resumida, es la siguiente: a veces estamos acostumbrados a realizar el algoritmo de manera natural y mental, que se nos olvida que la computadora debe recibir las instrucciones de forma detallada; para lo cual es importante ir realizando una comparación mental entre el algoritmo diseñado y el algoritmo escrito.  En Venezuela, eso se conoce como corrida en frío (según he leído mientras escribo esta entrada, en Español tradicional se conoce como realizar traza del algoritmo).

Lo cierto es que es bueno acostumbrarse a llevar a cabo este proceso desde el primer momento que comienzas los pasos en la programación. ¿Por qué? Porque luego da fastidio y re-aprender puede ser más difícil que aprender. Y en efecto, recordé el consejo de mi profesor de programación I, II y III cuando me lo dijo un par de veces en primer semestre; pero en definitiva es la propia experiencia la que te da el mejor aprendizaje.

¿Qué podemos hacer para mejorar eso? Una técnica que me funcionó en la universidad, y que estoy retomando, es tomar nota de los pasos del algoritmo. Si estos pasos están muy generalizados, se dividen en pasos más cortos y así sucesivamente; mientras más alto en nivel de especificidad, mejor. Esto nos acostumbra a no dejar por sentado pasos en algoritmo y estar más seguros en el orden de los mismos. Luego que estás bien claro con el algoritmo, escribes el código en tu lenguaje de preferencia. Probablemente debas agregar algunos pasos por aquello del nivel de especificidad al que llegaste anteriormente.

Si eres alguien más visual y con retentiva, igual puedes apoyarte en elementos gráficos para dar soporte a tu idea, tal como se muestra en la siguiente imagen, cortesía de un excelente programador y amigo:

diagrama idea

¿Calentamiento global por el uso indiscriminado de papel? Te puedo asegurar que estas notas y diagramas son más productivos y utilizan menos papel que los reportes de documentación que se imprimen y luego quedan archivados por meses/años, sólo para agarrar polvo (para el caso de las empresas) o las distintas entregas preliminares de los tomos físicos de tesis o trabajos especiales (en el caso de la academia). De todos modos, puedes ayudar al cambio. Tu sistema operativo debe traer un editor de texto, por más sencillo que sea, y para los diagramas existen herramientas de diagramación (algunas gratuitas).

Si se fijan, esto es algo tedioso; todo rudimento lo es. Sin embargo, como todo rudimento, tiene razón de ser. Así como un estudiante de artes marciales practica la técnica una y otra vez para lograr la perfección en su ejecución; así un programador debe practicar sus técnicas; y la corrida en frío es una de ellas, si no la más importante.

Todo esto nos lleva un poco más allá. ¿Qué es eso? Productividad. Un programador productivo, en mi experiencia, es aquel programador cuyo tiempo invertido en solución de bugs tiende a cero. Y muchos bugs provienen de pasar cosas por alto. Ciertamente somos humanos, es natural cometer errores (y son la razón de esta entrada); pero mientras que podamos hacer una buena inversión inicial de nuestro tiempo en evitar el fastidio de los bugs y revisar bien el algoritmo, mucho mejor.

Al final del día, por naturalidad, este proceso de tomar nota y subdivisión de tareas/procesos se hará un hábito y nuestros programas automáticamente estarán menos infectados. De hecho, auguro disminución en los tiempos de entrega y muy probablemente más tiempo para el esparcimiento.

Crédito imagen: Sonic the Hedgehog es propiedad de su respectivo autor.

5 Comentarios

  1. Señor Troll,

    Completamente deacuerdo con usted. La corrida en frío, no solo es una buena práctica, sino que ayuda a entender lo que se está haciendo realmente al programa. (Sin embargo, también es cierto que toma mucho tiempo y esfuerzo correr en frío aplicaciones muy grandes).

    Pero más que una ejecución formal, entiendo que lo que buscas es tener bien formulada la idea principal de la aplicación y luego ir refinando esa idea, hasta convertirla en código ejecutable de algún lenguaje. Siendo así, de verdad NO PODRÍA estar más deacuerdo. Hay incluso una teoría que gira en torno a ese concepto que se llama el cálculo de refinamiento (pero a esto se le pasa ya la mano de formal).

    ¡Keep on with the excelent posts man! 😀

    • Muchas gracias por el apoyo. Y buenísimo que deje en la mesa información adicional sobre temas más profundos tanto para crecimiento personal sobre las cosas que existen, como para aquellos lectores que también quieran profundizar y conocer cosas nuevas.

  2. Eso me recuerda a una conversacion que tuve hace poco con un buen amigo y profesor en mi sala de lectura, el dice que que el modo de trabajar de los programadores esta cambiando con el pasar del tiempo a causa de la facilidad de los compiladores y editores de texto que te indican los errores justo donde estan al haber un RunTimeException.

    El dice que en aquellas epocas de antaño uno no se podia poner a experimentar con las placas perforadas a punta de prueba y error, ya que cualquier error rompia la placa y el precio de estas era algo a considerar, asi que en aquel tiempo la corrida en frio no era una opcion, era la regla, y aunque mi profesor es muy actual dice que esa practica deberia seguirse manteniendo, principalmente por lo que expones en el post.

    Ademas opino que que al correr en frio un algoritmo lo estas aprendiendo, y entendiendo a fondo, y la proxima vez que lo hagas o hagas algo parecido te sera mucho mas facil, esto es importante ya que creo que para todo programador cada codigo nuevo programado son grandes cantidades de aprendizaje obtenido, o tal vez lo digo por mi falta de experiencia…

    Y tambien pasa que cuando uno tiene varios errores que uno considera una serie de bugs pueden resultar en ser simplemente un algoritmo completamente errado, osea en vez de ser bugs de un buen algoritmo en desarrollo sean la muestra de que no importa cuanto los ajustes simplemente el algoritmo esta malo.

  3. 5MissBrightside

    4 abril, 2012 at 3:10 pm

    Siempre he dicho que es bueno hacer el código en papel y pensar mejor las cosas, pero la gente se va por otro camino y al final, todo flojo trabaja doble.
    En el trabajo he conocido gente cuyos códigos tienen muchos errores por eso motivo, parecen no pensar.
    A veces desearía tener una basuca como Michael Douglas en Falling Down y hacer justicia con mis propias manos , pero no es posible 🙁 porque matar es malo. (OJO: es broma no soy genocida).
    Tristemente una de las grandes causas de estas fallas es la mala planificación en los proyectos que hace que los programadores actuen de forma reactiva y lancen flechas.
    Qué fino tu post! 😛

Deja un comentario