26 KiB
Un día de viaje
Cabalgando hasta el amanecer
Como programadores siempre estamos tratando de encontrar nuevas formas de ser productivos. Hacemos ajustes en los editores de texto, ajustes en la compilación, creamos scripts y automatizamos tareas, la lista se extiende dependiendo de cómo los programadores quieran maximizar la productividad del tiempo que emplean en crear código. También pasamos tiempo haciendo ajustes al resto de nuestras vidas con la creencia que deberíamos siempre estar haciendo algo relacionado con el código. Cualquier momento que no estamos creando código es un momento en el que nuestros proyectos se retrasan. Y retrasarse con nuestro código puede desencadenar en otros problemas: plazos imcumplidos, que otras empresas lleven publiquen su programa en el mercado antes que nosotros, u otros casos que perdemos una oportunidad. Estamos constantemente preocupados por no estar haciendo lo suficiente para tener éxito.
Hemos escuchado historias de desarrolladores que se han despertado frente a sus equipos por un estraño pitido provocado porque se han quedado dormidos encima del teclado y la repetición automática de caracteres ya no podían gestionar más texto por que sus caras estaban apoyadas en las teclas. ¿No es así como deberían trabajar los desarrolladores?
Hay una tendencia a creer que como trabajamos con máquinas que no descansan y siempre están preparadas para trabajar más, necesitamos adaptarnos nosotros mismos a esas máquinas. Sentimos la necesidad de estar siempre en marcha y preparados para dar a la máquina más trabajo. La ociosidad se considera una pérdida de tiempo. Tratamos de llegar a ser como la máquina: sin descanso y siempre preparados para más trabajo.
Hay un problema con ese sentimiento de tener que estar siempre en marcha. Cuando sentimos que siempre tenemos que estar en marcha, no nos permitimos a nosotros mismos tener un momento de descanso. No nos permitimos periodos de ocio y descanso. Esto crea un patrón donde nos denegamos los momentos para sentarnos y centrarnos en lo que estamos haciendo. Nos forzamos a seguir en movimiento, a seguir programando sin importal el coste personal. Nuestros cerebros no tienen la habilidad de descansar, relajarse y cargarse de energía. Nuestras mentes están ocupadas y exahustas para procesar lo que aprendimos y guardar ese conocimiento a largo plazo. Cuando estamos exahustos empezamos a preocuparnos de que no estamos haciendo todo lo necesario. Esto no nos motiva, en vez de eso crea un círculo vicioso de miedo y pánico. Pasamos nuestro día precupados sobre que no estamos haciendo lo necesario mientras que nuestras mentes gritan un "¡suficiente!" de extenuación. Este cículo vicioso se miedo un extenuación puede llevarnos a un vórtice de agotamiento, depresión y el deseo de dejar la programación para siempre.
Hay un delicado equilibrio que debemos lograr entre nuestros deseos de estar conectados constantemente y nuestras necesidades de relajación y reflexión. Nuestro deseo de un desarrollo invencible e infatigable debe atemperarse con la realidad de que nuestros cuerpos y mentes tienen unos recursos finitos por día que deben asignarse adecuadamente. Piensa en esto como la administración de energía para una máquina compleja en la que el fabricante (actualmente) no te permite cambiar la batería cuando se agota. Ser consciente de qué procesos se están ejecutando, cuánta energía se está utilizando y cuánta energía queda es vital para garantizar que aún pueda funcionar hasta más tarde en el día. Ese es el nivel de conciencia que debemos tener sobre nosotros mismos.
¿Cómo equilibramos esos sentimientos de querer estar conectados todo el tiempo mientras nos permitimos a nosotros mismos el relajarnos y reflexionar en lo que estamos haciendo? ¿Cómo prestamos atención a las necesidades de esta "máquina de programar"?
Luces fuera
Primero, debemos ser conscientes de que no podemos estar conectados todo el tiempo. Quizá sabes esto de manera intuitiva y pensamos "claro, por supuesto" pero saber esto no es lo mismo que ponerlo en práctica. Necesitamos periodos donde no estemos programando ni pensando en programar. Deberíamos tener momentos donde poder apagar la parte del programador de nuestra personalidad. Estos periodos de no programación son vitales para nuestro propio bien estar y nos ofrecen oportunidades para explorar el ancho mundo y permitir a nuestras mentes descansar en los tiempos entre las sesiones de programción.
Esto puede ser complicado si sentimos que nos estamos retrasando en nuesto aprendizaje. ¿Cuando se supone que vamos a aprender todas esas cosas nuevas que están ocurriendo cada día? ¿Cuándo se supone que nos pondremos al día con toda esa deuda técnica que hemos ido acumulando a lo largo de los años? ¿Cuándo tendremos tiempo de conocer los entresijos de tecnologías que no forman parte de nuestro trabajo diario pero que nos siguen interesando?
Estos sentimientos que tenemos (que hay que hacer más y que necesitamos pasar cada momento en el que estamos despiertos haciendo cosas que no hagan que nos desfasemos) no son muy útiles cuandos nos comparamos con otros programadores que parece que son super productivos. Estos son los programadores que tienen una idea brillante por la mañana y un prototipo ya funcional por la tarde (mientras siguen gestionando normalmente su rutina de trabajo). Cuando nos comparamos a nosotros mismos con estos programadores nos preguntamos si ellos se toman algún momento libre fuera de sus ordenadores.
Podemos reconocer que tenemos sentimientos de querer esforzarnos para seguir aprendiendo y haciendo cosas. Podemos notar nuestros sentimientos cuando pensamos "solo una línea más de código antes de acostarnos" o convencernos a nosotros mismos "puedo leer algunos artículos o páginas más o [inserte la forma favorita de consumir más información aquí]". Podemos hacer una pausa y notar de dónde vienen estos sentimientos y pensamientos y entender por qué todavía nos esforzamos más allá del agotamiento.
Estos sentimientos generalmente provienen de una sensación de insuficiencia. Sentimos que no estamos a la altura de los ideales que tenemos, ya sea porque estos ideales son los que hemos creado o por que han sido creados de manera externa. Estos ideales provienen de analizar a otros programadores (colegas o personas a las que admiramos) y medir nuestro progreso en comparación con su trabajo. También provienen de nuestras propias ideas míticas de lo que hace a un programador perfecto.
De lo que debemos darnos cuenta es que esas ideas de lo que hacen los programadores buenos y perfectos son fantasías. Son una combinación de lo que creemos que debería ser un programador bueno y perfecto. No existen en el mundo real. Es cierto que podemos ver programadores que parecen despertarse con un teclado conectado a sus manos, pasan todo el día creando código y se van a dormir con sueños de formular más código en sus cabezas. Pero debemos darnos cuenta de que solo estamos viendo un lado de sus vidas. No estamos viendo la imagen completa de quiénes son. Necesitamos enfocarnos en nuestros propios cuerpos y mentes y darnos cuenta cuando estamos cansados y necesitamos descansar. No podemos convertirnos en otras personas, tenemos que trabajar con quiénes y qué somos.
Nuestros cuerpos necesitan tiempos de descanso para poder ser más efectivos. Necesitamos momentos donde podamos apartarnos del teclaco y permitirnos a nosotros mismos descansar y relajarnos. Nuestras mentes no están diseñadas para el trabajo constante, especialmente a los niveles que se requiere a un programador. Cuanto antes nos demos cuenta de que debemos dar un paso atrás y tomar descansos a lo largo del día para recargarnos, más felices (y más productivos) seremos.
Hacer un descanso
Hacer un descanso es algo más que simplemente cambiar a otro programa de tu ordenador. Mi tendencia mientras tomo un descanso es comenzar a revisar mi correo electrónico o abrir alguno de mis diversos programas de chat para ver qué ha pasado desde la última vez que lo abrí (normalmente desde el último descanso que me tomé). Esto realmente no es tomarse un descanso ya que estoy tratando de realizar múltiples tareas sentado en mi mesa. Los verdaderos descansos implican levantarse de delante de la pantalla del ordenador. No es necesario que sea un descanso largo, tomarse un descanso puede ser simplemente salir de la habitación donde estés trabajando a otra área. Necesitas moverte de delante de tu equipo para obtener un "cambio de contexto", donde tu mente puede sentir que no está en el mismo lugar donde estaba antes. El cambio de contexto le permite a tu mente cambiar por completo y eliminar el contexto del área en la que se encuentra. Permite que su mente se concentre en un nuevo contexto y una nueva situación.
Esto puede ser complicado en una oficina donde se espera de manera subyacente que uno debe permanecer en su espacio de trabajo para ser productivo. Y solo existen algunos "descansos biológicos" (descansos que están relacionados con la biología humana, también conocidos como ir al baño) que alguien puede tomarse en tales situaciones. ¿Cómo puedes darte esos cambios de contexto que tu mente necesita en tales situaciones?
También podrías ser capaz de obtener esos cambios de contexto apartando tu vista de la pantalla por unos momentos. Es una buena idea apartar la mirada de la pantalla de vez en cuando para dar a tus ojos un descanso. Dar a tu mente un descanso mientras das un descanso a tus ojos puede ser el incentivo para que realices ambos.
Cambiar de posición de sentado a estar de pie, también puede ser un buen cambio de contexto donde te permites un cambio en tu espacio físico de trabajo. Puede ser tan simple como levantarse y estirarse de vez en cuando, o tan complejo como levantarse y agacharse en tu escritorio. Diciéndote a ti mismo que hay dos contextos en tu escritorio: sentado y de pie, podría ser suficiente para darte un cambio de contexto y el descanso que tu mente necesita.
Si tu lugar de trabajo tiene una cultura en la que se te permite abandonar tu escritorio y cambiar de lugar eso sería un gran cambio de contexto. El añadir un componente físico (tanto como seas capaz) a tu cambio de contexto puede ayudar a tu mente a relajarse y retomar energías.
Tendrás que experimentar con algunos de estos ejemplos para determinar qué funciona. Como mínimo querrás que tu mente sienta que no necesita estár alerta todo el tiempo. Quieres que tu mente se tome unos periodos de respiro entre sesiones de escribir código para poder eliminar los restos de esa sesión de tu "caché" mental y almacenarlos en la memoria a largo plazo. Así cuando regreses a tu sesión de crear código, será más probable que recuerdes qué estaba pasando.
También es posible que descubras cuando te alejes de tu equipo por un momento que olvidarás lo que estabas haciendo previamente. Eso está bien. Lo que recomendaría es mantener un diario o registro de en qué estabas pensando con tanto detalle como necesites. Ya sea escribiéndolo de manera física en un papel o usando un archivo de texto para tener suficientes pistas para continuar el trabajo donde lo dejaste.
Pensamiento productivo
Lo siguiente, deberemos darnos cuenta que la productividad no es una constante. Hay días en los que nos encontraremos generando niveles notables de código y código de calidad y días en los que tendremos suerte si podemos unir una cadena coherente de palabras para un comentario en el código. Por día tenemos diferentes niveles de energía y enfoque mental disponibles. Depende de nosotros ser conscientes de estos niveles y comprender cómo podría ser nuestra productividad para el día.
Entender estas variaciones de productividad puede permitirnos evaluar si el día nos permitirá o no generar código que necesita ser generado, pero hay un nivel inferior que creo que es importante.
Ponemos mucho énfasis diariamente en completar tareas y cumplir plazos. Este énfasis puede crearnos fuertes vínculos con la teminación de las tareas y los plazos. A veces esto es debido a factores externos (la "ruta crítica" del proyecto requiere que lo hagamos en una fecha y hora determinadas). Pero muchos de nuestros plazos son plazos internos que fueron establecidos por nosotros mismos. Nos marcamos una meta de que seremos así de productivos al final del día. La condición no declarada de este plazo de productividad interna es que nos sentiremos culpables y avergonzados si no logramos el objetivo. Sentiremos que no estamos a la altura de nuestras expectativas y nos preguntaremos si somos dignos de la tarea que tenemos entre manos. Sentiremos que nuestro día ha sido desperdiciado y nos preguntaremos si somos capaces de hacer algo.
es mejor para nosotros el eliminar los plazos cuando sea posible. No podremos eliminar los externos donde los compañeros está esperando nuestras contribuciones (aunque es posible volver a negociar estos plazos si no son muy importante) pero podemos dejar de lado el deseo de conseguir esos niveles arbitrarios de productividad y plazos arbitrarios.
Las metas arbitrarias pueden funcionar para algunas tareas. Algunos ejemplos de esto son los concursos de programación de juegos que solo duran una semana, lo que hace que los equipos se centren en las piezas críticas del diseño y la implementación de su juego para lanzarlo en el tiempo asignado. Este puede ser un ejercicio divertido para centrar esfuerzos, perotambién conllevan mucho estrés y presión antes del fin de plazo del concurso. Si continuamente te sientes culpable e indigno porque parece que no puedes alcanzar las metas que te propusiste, entonces deberías reconsiderar si es útil usarlas.
Un truco que me ha ayudado es crear pequeños espacios de enfoque concentrado. Este truco se describe en la próxima sección.
Contenedores
Deberíamos reemplazar los plazos que no son estrictos (plazos que no se nos han impuesto de manera externa) con un compromiso de trabajar en un proyecto durante un periodo de tiempo. Un truco que he encontrado útil es la idea de "contenedor de enfoque cronometrado". Cuando realizo un contendor de enfoque cronometrado empiezo escogiendo en qué me centraré durante el tiempo que durará ese contendor. Una vez que está escogida la tarea a realizar, establezco un cronómetro en mi sitio de trabajo y después me centro en esa tarea con toda mi atención plena para el resto del tiempo que dure el cronómetro. He tenido buenos resultados usando 10 minutos pero sesiones de menos tiempo com 5 minutos o más largas como 30 minutos también pueden ser útiles. La tarea seleccionada al comienzo del contenedor es la única cosa en la que trabajo y trato de hacer lo posible para asegurarme de que no haya interrupciones (ya sean internas o externas) hasta que el contenedor sea completado. Cuando el trabajo se ha realizado finalizo la tarea con lo que sea que haya completado, anotando cualquiera de las siguientes acciones para esa tarea en mi lista dde próximas acciones y después me tomo un descanso rápido (normalmente sobre 5 minutos) antes de comenzar con el siguiente contenedor. El siguiente contenedor puede ser una continuación de la misma tarea o puedo seleccionar otra tarea, pero la idea es simple: solo me centro en la tarea que tengo delante de mí durante el tiempo asignado. Cuando mi mente trata de divagar o tengo la tentación de "solo comprobar una cosa", entonces hago una pausa por un momento y determino si eso es realmente importante. La mayoría de las ocasiones no es tan importante y entonces hago una nota rápida para comprobar lo que fuera cuando termine el contenedor.
Podemos utilizar estos contenedores para vencer nuestros deseos de realizar múltiples tareas a la vez. Solo nos enfocamos en una cosa cada vez. También podemos utilizar contenedores para permitir que la sesión fluya hacia donde quiera llevarnos. Cuando comenzamos un contenedor no lo comenzamos con la idea de finalizar una tarea en particular, en vez de eso vemos hacia dónde la sesión quiere llevarnos. No hay que judgar la calidad del trabajo en el contenedor, solo con la expectación de que trabajaremos durante la duración del contenedor. No hay expectativas por el trabajo que vayamos a realizar, solo que trabajaremos hasta que el contenedor hasta que acabe el contenedor. Si completamos la tarea antes de que acabe el contenedor ¡eso es genial! Así podremos seleccionar la tarea para el siguiente contenedor. Si el contenedor acaba y todavía estamos en medio de una tarea, Entonces podemos anotar qué nos queda y qué pasos vamos a dar para llegar allí. Entonces podemos seguir trabajando un poco más o podemos tomarnos un rápido descanso y después regresar al trabajo con un contendor de enfoque nuevo.
El concepto subyacente del contenedor de enfoque cronometrado es aceptar trabajar dentro de los límites del contenedor sin juzgar el trabajo realizado o el progreso realizado. Cuando realizamos el trabajo cerramos el contenedor reflejando qué hicimos y dónde necesitamos ir. Nos damos permiso para no preocuparnos en el moemento por nuestro progreso, pero nos permitimos momentos donde poder revisar nuestro progreso y anotar cuanto ha progresado nuestro viaje. Nos permitimos la libertad de trabajar simplemente en el momento sin temor a juicios, represalias o auto recriminaciones. El contenedor es un regalo de trabajo ininterrumpido (o al menos lo ininterrumpido que podamos gestionar) que nos damos. Hacemos de este el mejor regalo que podemos dar al cerrar otros programas, desactivar las notificaciones y darle a esta tarea toda la atención que merece.
Te invito a incorporar esta práctica de realizar contenedores focalizados cada día. Creo que son una excelente manera de darnos permiso para enfocarnos en una cosa a la vez sin la necesidad de preosuparnos de qué conseguiremos durante la duración del contenedor. Nos permite enfocarnos en una cosa a la vez y hacerlo ofreciendo lo mejor de nuestras habilidades. La limitación de trabajar en una cosa a la vez sin pensar sobre otros aspectos del trabajo que tenemos que hacer puede ser liberadora y espero que trabajar con estos contenedores te pueda dar una sensación de lo que se siente al realizar un trabajo completamente concentrado.
Todo este libro fue creado y editado utilizando esos contenedores de enfoque. Me llevó unos 10 minutos por contenedor escribir el borrador inicial y después utilicé contenedores de 10 minutos para editar el libro. Algunas veces se extendían hasta contenedores de 15 o 20 minutos pero fue porque estaba tan metido en la materia que no quería parar. Esto está en contraste con la forma en la que antes realizaba las tareas. Por lo general, necesito superar el obstáculo inicial de asignar media hora o más a la tarea. Esto significa que necesito sentir que tengo suficiente control sobre mi horario para despejar ese espacio. Como no tiendo a sentir que tengo ese nivel de control sobre mi horario, tiendo a postergar la tarea. Con un contenedor de enfoque, pienso para mí mismo: "Puedo tomarme 10 minutos para trabajar en esto", que es el tiempo suficiente para que mi mente no sienta que debería estar haciendo otra cosa. Con cada contenedor vi gradualmente cómo se desarrollaba el progreso de este libro. Eso luego retroalimentó mi deseo de seguir trabajando en este libro, lo que ayudó a reducir la fricción mental para seguir haciendo los contenedores para trabajar en el libro. Creó un ciclo de retroalimentación positiva en el que esperaba con ansias la próxima vez que pudiera hacer el contenedor y trabajar en el libro.
Distracciones
La vida está llena de distracciones. Muchas son las cosas que requieren nuestra atención y muchas de esas distracciones están fuera de nuestro control. Alguien llega a nuestro puesto de trabajo y necesita de nuestra atención en ese momento. Un tema que hemos tratado por correo electrónico que pensábamos que estaba resuelto se convierte en una discusión acalorada y llama nuestra atención. Algo sucede en casa y ahora nuestra mente se divide entre preocuparnos por nuestras tareas laborales o preocuparnos por lo que sucede en casa. Cualquiera que sea la causa, hay momentos en que nuestra atención no está donde queremos y nos sentimos atraídos en todas direcciones a la vez.
Es aquí cuando los contenedores son más útiles. Si algo interrumpe el contenedor podemos determinar si es más importante que el trabajo que estamos realizando. Si determinamo que es más importante que lo que estamos haciendo en ese momento podemos detener el contenedor con la idea de que regresaremos al trabajo una vez que hayamos resuelto la interrupción. Si la interrupción no es más importante entonces podremos llegar a un acuerdo (ya sea con quien nos haya interrumpido o con nosotros mismos) que nuestro enfoque necesita estar aquí en el trabajo hasta que finalice el contenedor. Podremos darle a esa interrupción toda nuestra atención cuando el contenedor haya acabado. No necesitamos dividir nuestra atención entre el trabajo y la interrupción, en vez de eso le daremos a ambos toda nuestra atención a su debido tiempo.
Este método crea una delimitación simple entre nuestro trabajo y el resto del mundo, pero solo porque sea simple no quiere decir que sea sencillo. Mantener esa delimitación entre nuestro trabajo y el mundo que nos rodea puede ser un reto, especialmente si la cultura en la que te mueves es la de resultados inmediatos.
I don't have good answers if the culture you're in demands your attention at all times. The best I can offer is a containerized approach that gives you at least some periods of undisturbed concentration. If you feel on-guard all the time because something might happen at any moment then you're going to remain less effective than if you can shut the world off for a bit. I'd also challenge you to examine whether that perception is really true; are you constantly being ambushed by interruptions? Testing that theory may be in order. Keep a log (whether it's a sheet of paper, text file, spreadsheet, or database is up to you) of when you did a focus container and if that container was interrupted or not. If you find that you are getting interrupted more often than not then you need to determine what is causing the interruption and assess if it's something that you can control. There are many ways to handle and minimize workplace distractions that I won't go into here, but being aware of the distractions and determining where they are coming from will be key to figuring out how to mitigate them in the future.
Also be aware of the self-imposed distractions you've added to your life. Do you need immediate notification that someone liked something you shared? Is the funny anecdote you just remembered important enough to warrant switching out of your current context so you can post it to your friends and colleagues? Do you really need something to pop up in your field of view to let you know that your music player changed a track? Are you willing to sacrifice your attention and flow throughout the day because a program detected a change in your environment, regardless of the importance of that change?
We add these distractions into our lives because we worry that we might miss something important. Programs also come configured with most of their notifications turned on so a user can be reminded of the status of the program at all times. Perhaps it's useful, but for me they are very distracting. In my career I've sat at the desks of many other folks and have cringed at the number of notifications they receive in the short I period was there (a span of ten minutes or less). I've seen folks interrupt their current line of thinking because a notification for a message unrelated to the current task distracted them. What happened to the original thought? They had to mentally switch back to it and remember where they left off, usually at great mental effort.
I challenge you to turn off as many notifications as you can and get a taste of what your experience is like without them. That may be as simple as closing out an application when you're done with it, or may be as complex as changing the settings so an application doesn't notify you when new messages arrive. You'll need to play with this and see what works best for your needs and concentration. A good rule of thumb is "what does this thing track that is important enough for me to drop my important work and focus on this thing?." If you can scale your notifications so that only the most time-critical notifications reach you at the appropriate time then you'll be better able to relax and focus into your work. You won't have to parse the notifications to determine if what you're seeing is important or not.
One of the reasons I've heard for folks keeping their notifications on is that they feel they might receive something that requires an immediate response. We've created cultures where we feel a need to respond to messages the moment we receive them. I'd argue that most of the messages you receive during the day don't require the attention you're giving them, and certainly not the level of attention that warrants interrupting what you're doing to view and respond to them. You may be better served by scheduling several periods of the day where you do nothing but check and respond to your messages. Schedule these as infrequently as you can. Some folks recommend two or three times a day, but even setting a limit where you check your messages once an hour can make a vast improvement over how many times you're already checking your messages. You'll need to judge how often you check your messages based on your needs and your work culture. Also consider the person to whom you're responding. Does it make sense to give this person a quick, semi-thought-out response, or does this message require more time to simmer in your mind before you respond? Giving yourself time to think about a your response may give you additional insights into a problem that might not be readily apparent in the moment. This could mean the difference between one well thought out response versus a deluge of half-thought-out back-and-forth brainstorming via your messaging application. Responding to everything as it's received is very stressful and requires huge amounts of attention that could be better used in your programming work.
It may seem challenging and foreign to live without notifications and without the need to respond to every message and notification, but our attention is finite and limited. Maintaining focus throughout the day is challenging and stressful. If we can limit the number of distractions we receive throughout the day we then give ourselves the freedom to not have to work as hard to keep our attention attuned to our programming tasks. We get to say "not right now" to our distractions and handle them at a more appropriate time.