# El viaje del programador mediocre
## Cómo hemos llegado aquí

Tienes tu propia historia única de cómo has llegado hasta aquí como programador. Es posible que te hayas enterado de qué era eso de la programación cuando eras un niño curioso que quería ver lo que un ordenador podía hacer. O quizás es posible que hayas llegado como un adulto que escuchó sobre estas cosas llamadas computadoras que puedes programar. Sea cual sea tu caso, has tenido un viaje para llegar hasta este punto y aprendiste una cierta cantidad de cosas para llegar hasta aquí. Pasaste tu tiempo libre aprendiendo a escribir código, o tuviste la suerte de poder trabajar en la programación como parte de tu trabajo. Fuiste a la escuela para aprender más sobre programación o quizás tomaste clases de extras. Compraste libros o leíste artículos en Internet para aprender más sobre programación. Cualquiera que sea el camino que hayas tomado, iniciaste tu viaje como programador.

Y ahora te sientes estancado.

Miras a tu alrededor y te preguntas si alguna vez sabrás todo lo que deberías saber. Lees un artículo en un sitio y se despierta tu interés. Un amigo en Internet menciona esta cosa genial que ha encontrado y espera que aprendas más al respecto. Tu colega encontró algo que podría resolver un problema que tiene en un proyecto y ahora tienes algo más que aprender.

Casi todas las semanas surgen nuevos temas y tecnologías. Estas "cosas" se van introduciendo en nuestras discusiones de programación y en nuestro trabajo. Quizás encuentres estas cosas nuevas que aparecen en anuncios de trabajo que requieren un mínimo de más de 3 años de experiencia, y te preguntas cómo alguien podría tener ese nivel de experiencia. Tal vez elegiste ignorar estas cosas durante un tiempo y ahora se han convertido en un factor determinante en tu trabajo. Es como si alguien cambiara un simple bit de estado 0 a 1 y ahora ya no eres digno de ser llamado programador a menos que hubieras sido uno de los primeros en adoptar estas cosas.

Cada una de estas experiencias te hace sentir como si estuvieras incompleto sin aprender estas cosas nuevas. Nos muestran que no importa cuál sea nuestra experiencia actual, todavía hay lagunas en nuestro conocimiento que deben ser llenadas. Cuando miras hacia el horizonte, puedes ver las brechas que surgen entre el lugar donde estás y el lugar donde crees que deberías estar.

## La brecha

Elegí la palabra "brecha" (_Nota del traductor: en inglés usa la palabra "gap" que tiene distintos significados como brecha o hueco_) para describir la diferencia entre dónde estás ahora y dónde crees que deberías estar por una buena razón. Una brecha es algo impuesto por otros, ya sea por la fuerza o por negligencia. Si aparece un agujero en la cerca de tu jardín, significa que la cerca es más débil para proteger el jardín. Una brecha también puede ser algo que requiere nuestra atención. En inglés la expresión "Mind the gap" es una frase acuñada a finales de la década de 1960 por el metro de Londres para advertir a la gente sobre el espacio que hay entre la plataforma y los vagones del tren. Si las personas no tienen cuidado con ese espacio, podría generar una situación insegura.

La brecha en este caso es la distancia entre nuestras habilidades actuales y dónde pensamos que deberíamos estar. A veces las brechas son auto impuestas debido a nuestros propios deseos de mejorar, pero la mayoría de las veces las brechas son impuestas de manera externa.

Uno de los grandes creadores de brechas en nuestra profesión como programadores es el cambio. Como programadores estamos siempre alerta del ciclo de los cambios en la cultura de la programación. Estamos constantemente enfrentándonos a los cambios que nos llegan: cambios de tecnología, cambios de prioridades en el trabajo o incluso cambios en nuestra estrategia para tratar de mantenernos al día con las demandas que se nos piden.

El cambio también puede provenir de dentro de nuestra comunidad. En nuestra comunidad de programadores y usuarios puede cambiar a nuevos puestos de trabajo o nuevas tecnologías. Es posible que ya no obtengamos el apoyo que necesitamos para hacer nuestro trabajo y que nos enfrentemos a la posibilidad de que nosotros también necesitemos actualizar nuestras habilidades o nos quedemos atrás en una comunidad abandonada.

El cambio puede provocar estrés. Es común en el círculo de los programadores porque las cosas cambian a menudo. Lo que funcionaba el viernes por la tarde puede que ya no sirva el lunes por la mañana debido a un cambio en una biblioteca que estábamos utilizando. Nuestro entorno de desarrollo podría romperse debido a una actualización que no se aplicó de la manera correcta. El código en producción podría necesitar algunos parches de seguridad y esos parches significan que tenemos que volver a hacer una gran parte de nuestro software porque si no ya no funcionaría. Hay una gran variedad de maneras en las que estamos inmersos en ese ciclo del cambio.

No todo el cambio es malo. El software que utilizamos podría tener razones muy válidas para cambiar. Las nuevas funcionalidades que deben ser añadidas requieren nuevas formas de pensar nuestro código. Las correcciones a problemas de seguridad podrían significar que nuestros sistemas ahora serán más resistentes frente a ataques externos, pero requieren diferentes formas de utilizar ese sistema. Nuevas y mejores optimizaciones pueden llevar a que nuestro código se ejecute de una manera más rápida pero necesite algunos ajustes para que pueda beneficiarse de esa velocidad. Refactorizar una API puede llevarnos a interactuar con nuestros sistemas de una manera más limpia y concisa, pero puede introducir cambios que no son compatibles con el código actual.

El cambio puede ser positivo, pero el cambio requiere tiempo y esfuerzo para adaptarse a él. La brecha solo se puede cerrar si tenemos los recursos y el tiempo necesario para trabajar en ella. Si estamos luchando con nuestra carga de trabajo actual y alguien cambia la forma en que funciona algo, ahora tenemos que tener en cuenta nuestro tiempo para adaptarnos a ese cambio. Si nuestro músculo de memoria mental sabía cómo funcionaba algo y ahora se enfrenta a un cambio significativo, requiere que volvamos a entrenar ese músculo de memoria mental para que coincida con la forma en que funciona ahora. Y si ya sientes que no comprendes los sistemas y entornos en los que estás trabajando, añadir cambios adicionales pueden dejarte varado entre las brechas recién formadas de tu conocimiento.

## Cerrando la brecha

Me encantaría decirte que hay una manera de cerrar esa brecha, decirte que has aprendido todo y que ya te puedes sentir a salvo porque ya dominas la totalidad de la programación.

Desafortunadamente, yo no he encontrado una manera de cerrar las brechas.

Puedes seguir aprendiendo todo lo que hay que saber sobre cualquier tema sobre el que hayas escogido aprender. Puedes realizar todos los cursos disponibles. Puedes asistir a todas las charlas y debates, leer informes que traten del tema e incluso realizar tu propia investigación y aún así te puedes seguir sintiendo como que no has cerrado definitivamente esa brecha.

Así que, si no hay una manera de cerrar por completo la brecha ¿Qué puedes hacer?

Tienes tres posibles opciones disponibles:

La primera opción es no intentarlo. Asumir que siempre habrá algo más que aprender. ¿Por qué preocuparse? Es más sencillo auto convencerte de que nunca serás capaz de cerrar esa brecha del conocimiento. La mejor opción es, te dices a ti mismo, quedarte con lo que sabes y aguantar todo el tiempo que puedas.

La segunda opción es intentar hacerlo todo a la vez. Te lees cada libro, cada artículo de un blog, cada nuevo informe, vídeo, o lo que sea para intentar aprender sobre el tema. A continuación, te das cuenta que solo tienes una cantidad finita de tiempo para aprender sobre el tema y que no puedes consultar todo ese material a la vez. Revisas tu progreso y te desesperas porque tu aprendizaje no está progresando tan rápido como te gustaría. Culpas a los materiales de aprendizaje por tu falta de progreso y buscas algo más que te ayude a aprender mejor el tema. La frustración se instala cuando te culpas a ti mismo por no haber comenzado antes a cerrar esta brecha.

La tercera opción es el enfoque más mesurado. Empiezas poco a poco con pequeñas tareas y avanzas hacia la meta. En lugar de ver la brecha como algo que se deba cerrar, te das cuenta de que no puedes conocer la totalidad de cualquier tema que estés aprendiendo. Disfrutas del conocimiento que recibes en la búsqueda del aprendizaje del tema. Mantienes un ritmo constante para aprender tanto como puedas. En lugar de lamentarte por no haber comenzado antes, estás agradecido de haberlo hecho.

De estas tres opciones, la primera y la tercera son en las que encontrarás mayor satisfacción. La primera opción (no intentar) te permite acomodarte con el conocimiento que tienes. Pero hay una desventaja en simplemente permanecer en el lugar. Nuestra industria está en constante cambio y la tecnología sigue avanzando. Lo que solía ser la norma se convierte en algo ya obsoleto y lo que estaba a la vuelta de la esquina se convierte en lo que está siendo demandado.

Una de las habilidades más útiles de un programador es la capacidad de adaptarse a las nuevas tecnologías. A medida que cambia nuestro entorno tecnológico, nuestra capacidad para adaptarnos a esos cambios nos permite continuar como programadores. Máquinas más rápidas, diferentes tecnologías, diferentes dispositivos, diferentes requisitos, cada uno de estos nos trae desafíos emocionantes si los reconocemos. Pero también consumen tiempo para aprender y crean brechas en nuestro conocimiento. Confiar en nuestro conocimiento previo para llevarnos a través de estos cambios no será suficiente. Tenemos el desafío de adaptarnos al nuevo entorno.

La segunda opción (tratar de acapararlo todo y frustrarse) es el camino menos óptimo. Tratar de aprender con todos los recursos disponibles e incrustándolos en nuestros cerebros es un camino hacia la frustración, la fatiga y el agotamiento. Muchos desarrolladores intentan esto porque sienten la necesidad de adaptarse al nuevo entorno, pero es difícil hacer muchos cambios radicales de una sola vez. Es como tratar de desarrollar alas para volar porque llegas tarde a una cita: te sentirás frustrado por su incapacidad para desarrollar alas y aun así llegarás tarde a tu cita. La segunda opción también mide tu progreso en función de cuánto más crees que debes avanzar. Descarta el progreso hecho y crea un ciclo sin fin hacia una línea de meta en continuo movimiento.

De las tres opciones, la tercera opción es la que tiene más sentido. El tomar una decisión mesurada para cerrar las brechas de nuestro conocimiento nos permite disfrutar más del proceso de aprendizaje. Al conseguir pequeños pasos en nuestro viaje, esto nos concede pequeñas victorias en el camino recorrido. En vez de esperar una gran transformación nos permitimos cambios graduales para adaptarnos a nuestro entorno.

Con este acercamiento mesurado y gradual también obtenemos la sabiduría de que no tenemos que cerrar todas las brechas. Nos permitimos seguir aprendiendo en las áreas que necesitamos y de forma gradual vamos construyendo nuestras propias habilidades.

También nos podemos dar cuenta, que cerrar la brecha por completo es una ilusión. Mientras seamos personas vivas siempre habrá brechas, ya que surgen cosas nuevas cada día. Podemos escoger cómo de expertos podemos ser en cualquier tema que hayamos escogido aprender. Incluso podemos esforzarnos por aprender tanto como podamos, pero lo hacemos con una sensación de alegría en el proceso de aprendizaje, no por una necesidad perversa de tratar de recopilar la totalidad del conocimiento informático en nuestras cabezas.

## El viaje es la recompensa

El secreto para avanzar en nuestro viaje como programadores y desarrolladores es darnos cuenta de que cada paso que damos en ese camino es valioso y digno de nuestra atención. El hecho de que no hayamos aprendido la última tecnología en quince días no significa que debamos dejar de intentarlo. Tampoco aprender una tecnología solo para ver cómo se ve eclipsada por otra cosa, significa que nuestro tiempo de aprendizaje se haya desperdiciado. Cada desafío al que nos enfrentamos, cada tecnología que aprendemos y cada hora que dedicamos a programar es un paso más en nuestro viaje para convertirnos en mejores programadores. Cada error y giro equivocado nos presenta oportunidades para aprender de esos errores y crecer como programadores y desarrolladores. No existe un camino perfecto para mejorar en esto. Incluso si lo hubiera, estoy seguro de que podríamos señalar cualquier punto de nuestro pasado y decir que fue menos que perfecto. No es posible trazar el camino perfecto desde donde estamos hasta donde deseamos estar. Peor aún, es una ilusión que nos impide avanzar en nuestra práctica diaria de programación y desarrollo. Puede parecer trillado decir "el viaje es la recompensa", pero cada día que trabajamos como programadores y desarrolladores estamos un día más cerca de cerrar esas brechas en nuestro conocimiento y estar más contentos de ver cómo crecen nuestras habilidades.
