Tengo la manía de querer recordarlo todo. Pero mi cerebro, como el de todos, está hecho más bien para analizar y componer ideas nuevas que para guardar un montón de información. Así que hago lo que casi todo el mundo ha hecho desde siempre: tomar notas. Es algo que, si no hago, creo que no estoy trabajando (o, peor todavía, que estoy trabajando sin organización y de forma poco efectiva). Puedes llamarme maniático, pero así de importante es para mí llevar un registro de lo que hago, lo que se me pasa por la cabeza, en qué empleo mi tiempo, etc.

¿Por qué quieres mantener un registro?

Se trata, en mi opinión, del elemento que más puede aumentar la eficacia de una persona con la mínima inversión de tiempo (y dinero) requerida: tomar notas y procesarlas correctamente. Desde que empecé a trabajar me di cuenta de que las personas que mejor hacían su trabajo, y a las que me gustaría parecerme, tomaban notas sin parar. Así que decidí ponerme a tomar notas (llegando a veces a excesos que llevaron a ganarme algún que otro mote gracioso). Esto es lo que hago.

Empezando por el principio: ponte a escribir

En mi opinión, el proceso consta de dos partes fundamentales: tomar notas  y procesarlas. No tendrás mucho que procesar si no has escrito nada. Así que el primer paso, y el más importante, es empezar a tomar notas durante tu vida ordinaria.
No te obsesiones con la forma en que deberías hacerlo, cómo organizarlas, qué estructura darles, etc. Eso no hará más que detenerte y que no empieces nunca. Además, no es importante cuando estás empezando (lo importante realmente es empezar). Al poco tiempo verás que ya has desarrollado una forma con la que te sientes cómodo y te resulta últil cuando estés revisándolas después. Así que empieza a escribir ya.

Cosas que van a ayudarte

Una vez has cogido algo de inercia y lo de coger notas se ha convertido en un hábito ordinario, empieza a mejorar la forma en que lo haces. En mi caso, considero que ayuda bastante hacer lo siguiente:
  • Dale un título descriptivo a tus notas. Basta con algo sencillo y no muy largo que te proporcione algo de contexto acerca de qué trata la anotación que viene a continuación.
  • Enumera las páginas. Así podrás localizar cualquier cosa rápidamente mediante un índice (explicado más adelante) o hacer referencias a otras notas.
  • Pon siempre la fecha de cuándo hiciste la anotación. Siempre que hagas la primera anotación del día, empieza poniendo la fecha.
  • Crea un índice. Reserva las primeras tres o cuatro páginas para el índice y ve rellenándolo conforme haces más y más anotaciones (esto lo suelo hacer una vez al día). Este índice debería contener, como mínimo, la página donde se encuentra la anotación, la descripción (título) y la fecha.
Siguiendo estas cuatro pautas ya tienes un cuaderno más organizado que el 90% de los que me he visto en mi vida. Creo, además, que resulta bastante sencillo: nada de usar distintos colores, poner pegatinas para marcar páginas especiales o dividir un cuaderno por temas. Sencillamente escribir siguiendo un orden cronológico manteniendo estos cuatro elementos.

Algunos detalles más

Usa símbolos para identificar notas especiales. A este respecto, intento que sean los mínimos necesarios: una exclamación para algo importante (!), algo que parezca una bombilla para una idea sobre la que quiero volver más adelante y un círculo para una tarea nueva que he pensado que tengo que hacer. Apunte: intento no utilizar la libreta para gestionar tareas, pero a veces es mejor escribirlas a mano que perderlas (sobre cómo gestiono mis tareas escribiré más adelante).
Otra cosa que ayuda es dejar un espacio (al menos una línea) al final de cada anotación. De esta forma podrás añadir alguna aclaración que se te ocurra posteriormente. En mi caso, lo más normal es que sea una referencia a una página posterior donde continúo tratando el mismo tema.

Olvídate de la tecnología y presta atención a los detalles

Quieres que el proceso de tomar notas sea rápido, que lo puedas hacer en cualquier momento y cualquier lugar y quieres que no te falle nunca: quieres papel y lápiz. No intentes tomar notas en utilizando una tablet o escribiendo directamente en tu ordenador portátil. No será ni la mitad de efectivo y la sensación de que tienes algo "definitivo" (ya no lo tienes "que pasar a limpio", ¿eh?- venga ya, chaval, que no estás en el instituto) hará que sea más difícil que vuelvas sobre tus notas más adelante. Y créeme, ésa es la parte donde esto se pone interesante, no te la puedes saltar.

Conclusión

Así es como termina la primera parte de esta serie. La próxima tratará de qué hacer con esa información que has estado recopilando. Ahí es donde esto cobra sentido pero, como dije antes, hay que empezar por el principio (y es mejor hacerlo bien).

Si tienes alguna técnica ninja especial y quieres compartirla, usa los comentarios. O, si lo prefieres, puedes criticar lo que he dicho si te parece que no sirve para nada. Escríbelo también: aquí no censuramos ni le decimos a la gente lo que tiene que pensar.


Cuando escribes código (o cuando lo estás probando) te encuentras realidades que tienen distintos efectos en tu trabajo: desde hacerte perder (un poco de) tiempo a convertir tu sistema en un auténtico infierno donde no quieres pasar ni un minuto más del estrictamente necesario.
Una variedad especial que se me ha repetido continuamente son las relacionadas con el tiempo. Por diversos motivos, tratar con el tiempo en un sistema puede llegar a ser extremadamente complicado. La cosa se complica todavía más cuando olvidamos tener en cuenta los detalles más básicos, lo que nos lleva a la motivación de este artículo.


Este post es un resumen, sin seguir ningún orden particular, de algunos de los descuidos, malentendidos y paradojas que me he encontrado al trabajar con sistemas que trataban con fechas, horas y el paso del tiempo.
Lo que sigue es bien conocido por todo el mundo y cualquiera podrá decir, con razón, que olvidar estas cosas es de tontos. Sin embargo, me he visto más de una vez empantadado en mi propio software por culpa de ellas.

No todos los meses tienen el mismo número de días

Es algo que todos saben y, sin embargo, no es infrecuente encontrarte código que, por ejemplo, cuando queremos saber qué día es exactamente dentro de un mes hacen cosas como sumar siempre 30 días a la fecha actual (o sumar siempre 31 días que, para el caso, es igualmente inválido con carácter general).
Y es que mayo tiene 31 días, junio tiene 30, julio tiene 31 y agosto tiene también 31. Y, por supuesto, tenemos febrero, que tiene 28 días, la mayoría de las veces aunque...

No todos los febreros tienen 28 días

Algo que normalmente se aprende en la escuela de pequeño y que se suele olvidar todavía con más frecuencia que el apartado anterior. Pero sí, resulta que, por una mezcla de cienca e historia, algunos meses de febrero tienen 28 días y otros tienen 29. Y, como, colorario...

No todos los años tienen 365 días

Por el mismo motivo por el que hay meses de febrero más largos que otros (y como consecuencia de ello), hay años que tienen 366 días. Se llaman bisiestos, ocurren cada cuatro años y hasta podemos hacer un sencillo cálculo para saber si un año es bisiesto.
Pero no siempre lo tenemos esto en cuenta y, más veces de las que deberíamos, damos por sentado que, por ejemplo, si tenemos que programar algo para que se ejecute automáticamente dentro de un año exactamente, podemos sumar 365 días a la fecha actual y tendremos la fecha en que queremos que nuestra tarea sea ejecutada (error).

Y no todos los minutos tienen 60 segundos

Y por eso hay que meter un segundo aquí y allá de vez en cuando -aunque nunca hayas tenido que tratar con este problema directamente, hay quien se lo toma muy en serio.
De acuedo, éste ha sido un poco más friki de la cuenta. Volvamos con algunos errores más ordinarios, por ejemplo, cuando tratamos con intervalos de tiempo. Empecemos por uno muy simple.

Un intervalo de tiempo de una hora no siempre empieza y acaba en el mismo día

Como ocurre, por ejemplo, con el intervalo de una hora que empieza a las 23:48 de hoy, que terminará mañana. Sencillo,¿ verdad? No sé por qué me he encontrado código que daba por hecho lo contrario (por ejemplo, asumiendo que al sumar una hora a la hora actual tendrías otra hora en el mismo día que tenías al principio).

Tampoco todos los intervalos de una hora empiezan y terminan el mismo mes

Si, por ejemplo, el intervalo que empieza a las 23:48 resulta que lo hace el 30 de abril. Así que, ya sabéis, sumar una hora a un instante de tiempo puede dar lugar a un instante de tiempo en otro mes distinto. Más aún...

No todos los intervalos de una hora ni siquieran empiezan y terminan el mismo año

Cuando el intervalo del que hablamos antes, en vez de ser el 30 de abril, es el 31 de diciembre, ya la hemos liado.
Bueno, creo que ya he explotado bastante el ejemplo y la idea se capta. Pero, ¡ah, recuerda!
  • No todas las semanas empiezan y terminan el mismo mes
  • Ni el mismo año -eso de que el uno de enero caiga en lunes es lo menos frecuente. De hecho, no volverá a ocurrir hasta el 2018.
Es momento ahora de ponerse un poco más técnico. La siguiente es obvia pero provoca bastantes problemas.

El reloj del sistema no siempre tiene la hora correcta

Y es que hay muchas formas de que te dé una hora equivocada. Por ejemplo cuando

El reloj del sistema está configurado como si estuviera en una zona horaria diferente

Y es que al que montó la máquina no le pareció importante asignar la zona horaria correcta cuando instaló el sistema operativo en el servidor de pruebas. Así que la hora parecerá la misma, y servirá para casi todo igual, pero llegará un momento en que tengas que tener en cuenta la zona horaria y, de repente, todo empezará a parecer que ocurre dos horas antes (o dos horas después, o lo que sea) que cuando debería ocurrir.
O también puede ser que sencillamente...

El reloj del sistema puede ser aleatoriamente inconsistente

No tiene sentido, pero ves que el sistema está configurado con un reloj exactamente adelantado 1 hora y 37 minutos y eso ha hecho que pierdas dos horas intentado encontrar la causa de que las horas de los cambios hechos en una tabla de tu base de datos sean incorrectas. Y entonces es cuando uno que pasa por ahí te dice que ayer cambió la hora del sistema porque quería ver si un proceso batch que normalmente se ejecuta a las seis de la tarde terminaba correctamente y se tenía que ir a casa a las cinco y cuarto.
Hablando de relojes cambiados, recuerda que:

La hora en tu servidor no tiene que coincidir con la hora que tienen los clientes

Y es que quien se conecta puede ser un mentiroso y haber cambiado su reloj para que parezca que solicitaron una oferta antes de que terminara el plazo en que expiraba.
O puede que sencillamente ellos viven en Sindey, tú en Madrid y tu servidor está en alguna parte de Irlanda. Lo que nos lleva a un subtipo especial.

Los relojes de tu servidor y de los clientes no siempre están en la misma zona horaria

Así que usa la differencia entre ambas zonas horarias para hacer tus cálculos. Y cuando los hagas, acuérdate también de tener en cuenta en qué día y qué mes estamos porque...

La diferencia entre regiones situadas en zonas horarias distintas no es siempre la misma

Puede variar a lo largo del año, por ejemplo, si en una zona aplican el horario especial de verano mientras que en otra, no.
Y es que trabajar con el tiempo nunca fue fácil y son muchas las cosas que hay que tener en cuenta, por lo que no es tan infrecuente que pasemos por alto algo que luego nos dará problemas. Espero que ahora que las he puesto por escrito no se me olviden más.