elprogramadormediocre/build/html/el_programador_mediocre.html

3382 lines
216 KiB
HTML

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="Craig Maloney" />
<title>El programador mediocre</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
<link rel="stylesheet" href="css/el_programador_mediocre.css" />
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
</head>
<body>
<header id="title-block-header">
<h1 class="title">El programador mediocre</h1>
<p class="author">Craig Maloney</p>
</header>
<nav id="TOC" role="doc-toc">
<ul>
<li><a href="#introducción" id="toc-introducción">Introducción</a>
<ul>
<li><a href="#el-programador-mediocre"
id="toc-el-programador-mediocre"><span
class="toc-section-number">0.1</span> ¿El programador mediocre?</a></li>
<li><a href="#por-qué-este-libro" id="toc-por-qué-este-libro"><span
class="toc-section-number">0.2</span> ¿Por qué este libro?</a></li>
<li><a href="#descargo-de-responsabilidades"
id="toc-descargo-de-responsabilidades"><span
class="toc-section-number">0.3</span> Descargo de
responsabilidades</a></li>
<li><a href="#de-esta-traducción" id="toc-de-esta-traducción"><span
class="toc-section-number">0.4</span> De esta traducción</a></li>
</ul></li>
<li><a href="#el-viaje-del-programador-mediocre"
id="toc-el-viaje-del-programador-mediocre"><span
class="toc-section-number">1</span> El viaje del programador
mediocre</a>
<ul>
<li><a href="#cómo-hemos-llegado-aquí"
id="toc-cómo-hemos-llegado-aquí"><span
class="toc-section-number">1.1</span> Cómo hemos llegado aquí</a></li>
<li><a href="#la-brecha" id="toc-la-brecha"><span
class="toc-section-number">1.2</span> La brecha</a></li>
<li><a href="#cerrando-la-brecha" id="toc-cerrando-la-brecha"><span
class="toc-section-number">1.3</span> Cerrando la brecha</a></li>
<li><a href="#el-viaje-es-la-recompensa"
id="toc-el-viaje-es-la-recompensa"><span
class="toc-section-number">1.4</span> El viaje es la recompensa</a></li>
</ul></li>
<li><a href="#compañeros-de-viaje" id="toc-compañeros-de-viaje"><span
class="toc-section-number">2</span> Compañeros de viaje</a>
<ul>
<li><a href="#programadores-famosos"
id="toc-programadores-famosos"><span
class="toc-section-number">2.1</span> Programadores famosos</a></li>
<li><a href="#entre-bastidores-frente-a-la-actuación-final"
id="toc-entre-bastidores-frente-a-la-actuación-final"><span
class="toc-section-number">2.2</span> Entre bastidores frente a la
actuación final</a></li>
<li><a href="#el-atractivo-del-post-mortem"
id="toc-el-atractivo-del-post-mortem"><span
class="toc-section-number">2.3</span> El atractivo del
<em>post-mortem</em></a></li>
<li><a href="#clasificación-de-programadores"
id="toc-clasificación-de-programadores"><span
class="toc-section-number">2.4</span> Clasificación de
programadores</a></li>
<li><a href="#midiendo-el-rendimiento-del-programador"
id="toc-midiendo-el-rendimiento-del-programador"><span
class="toc-section-number">2.5</span> Midiendo el rendimiento del
programador</a></li>
<li><a href="#compañeros-de-viaje-1"
id="toc-compañeros-de-viaje-1"><span
class="toc-section-number">2.6</span> Compañeros de viaje</a></li>
</ul></li>
<li><a href="#los-errores-a-lo-largo-del-camino"
id="toc-los-errores-a-lo-largo-del-camino"><span
class="toc-section-number">3</span> Los errores a lo largo del
camino</a>
<ul>
<li><a href="#vaya" id="toc-vaya"><span
class="toc-section-number">3.1</span> ¡Vaya!</a></li>
<li><a href="#evitar-los-errores" id="toc-evitar-los-errores"><span
class="toc-section-number">3.2</span> Evitar los errores</a></li>
<li><a href="#hacer-un-modelo" id="toc-hacer-un-modelo"><span
class="toc-section-number">3.3</span> Hacer un modelo</a></li>
<li><a href="#máquinas-del-tiempo" id="toc-máquinas-del-tiempo"><span
class="toc-section-number">3.4</span> Máquinas del tiempo</a></li>
<li><a href="#aprender-de-los-errores"
id="toc-aprender-de-los-errores"><span
class="toc-section-number">3.5</span> Aprender de los errores</a></li>
<li><a href="#llevar-un-registro-de-nuestros-errores"
id="toc-llevar-un-registro-de-nuestros-errores"><span
class="toc-section-number">3.6</span> Llevar un registro de nuestros
errores</a></li>
</ul></li>
<li><a href="#las-posadas-en-las-que-nos-hospedamos"
id="toc-las-posadas-en-las-que-nos-hospedamos"><span
class="toc-section-number">4</span> Las posadas en las que nos
hospedamos</a>
<ul>
<li><a href="#compañeros-de-viaje-2"
id="toc-compañeros-de-viaje-2"><span
class="toc-section-number">4.1</span> Compañeros de viaje</a></li>
<li><a href="#encontrar-una-buena-comunidad"
id="toc-encontrar-una-buena-comunidad"><span
class="toc-section-number">4.2</span> Encontrar una buena
comunidad</a></li>
<li><a href="#la-dificultad-de-encontrar-una-buena-comunidad"
id="toc-la-dificultad-de-encontrar-una-buena-comunidad"><span
class="toc-section-number">4.3</span> La dificultad de encontrar una
buena comunidad</a></li>
<li><a href="#cosas-que-buscar-en-una-buena-comunidad"
id="toc-cosas-que-buscar-en-una-buena-comunidad"><span
class="toc-section-number">4.4</span> Cosas que buscar en una buena
comunidad</a></li>
</ul></li>
<li><a href="#un-día-de-viaje" id="toc-un-día-de-viaje"><span
class="toc-section-number">5</span> Un día de viaje</a>
<ul>
<li><a href="#cabalgando-hasta-el-amanecer"
id="toc-cabalgando-hasta-el-amanecer"><span
class="toc-section-number">5.1</span> Cabalgando hasta el
amanecer</a></li>
<li><a href="#luces-fuera" id="toc-luces-fuera"><span
class="toc-section-number">5.2</span> Luces fuera</a></li>
<li><a href="#hacer-un-descanso" id="toc-hacer-un-descanso"><span
class="toc-section-number">5.3</span> Hacer un descanso</a></li>
<li><a href="#pensamiento-productivo"
id="toc-pensamiento-productivo"><span
class="toc-section-number">5.4</span> Pensamiento productivo</a></li>
<li><a href="#contenedores" id="toc-contenedores"><span
class="toc-section-number">5.5</span> Contenedores</a></li>
<li><a href="#distracciones" id="toc-distracciones"><span
class="toc-section-number">5.6</span> Distracciones</a></li>
</ul></li>
<li><a href="#el-mapa-no-es-el-territorio"
id="toc-el-mapa-no-es-el-territorio"><span
class="toc-section-number">6</span> El mapa no es el territorio</a>
<ul>
<li><a href="#el-panorama-cambiante-de-la-programación"
id="toc-el-panorama-cambiante-de-la-programación"><span
class="toc-section-number">6.1</span> El panorama cambiante de la
programación</a></li>
<li><a href="#aprender-a-aprender" id="toc-aprender-a-aprender"><span
class="toc-section-number">6.2</span> Aprender a aprender</a></li>
<li><a href="#cómo-escoger-qué-aprender"
id="toc-cómo-escoger-qué-aprender"><span
class="toc-section-number">6.3</span> Cómo escoger qué aprender</a></li>
<li><a href="#resistencia-y-el-contenedor"
id="toc-resistencia-y-el-contenedor"><span
class="toc-section-number">6.4</span> Resistencia y el
contenedor</a></li>
<li><a href="#trazado-de-objetivos-a-largo-plazo"
id="toc-trazado-de-objetivos-a-largo-plazo"><span
class="toc-section-number">6.5</span> Trazado de objetivos a largo
plazo</a></li>
<li><a href="#fracaso-y-aprendizaje"
id="toc-fracaso-y-aprendizaje"><span
class="toc-section-number">6.6</span> Fracaso y aprendizaje</a></li>
<li><a href="#callejones-sin-salida-y-topografía-cambiante"
id="toc-callejones-sin-salida-y-topografía-cambiante"><span
class="toc-section-number">6.7</span> Callejones sin salida y topografía
cambiante</a></li>
<li><a href="#acércate-con-curiosidad"
id="toc-acércate-con-curiosidad"><span
class="toc-section-number">6.8</span> Acércate con curiosidad</a></li>
</ul></li>
<li><a href="#la-lucha-interna" id="toc-la-lucha-interna"><span
class="toc-section-number">7</span> La lucha interna</a>
<ul>
<li><a href="#las-emociones-de-la-programación"
id="toc-las-emociones-de-la-programación"><span
class="toc-section-number">7.1</span> Las emociones de la
programación</a></li>
<li><a href="#desgastes-emocionales"
id="toc-desgastes-emocionales"><span
class="toc-section-number">7.2</span> Desgastes emocionales</a></li>
<li><a href="#ser-conscientes-de-nuestro-estado-emocional"
id="toc-ser-conscientes-de-nuestro-estado-emocional"><span
class="toc-section-number">7.3</span> Ser conscientes de nuestro estado
emocional</a></li>
<li><a href="#nuestra-historia" id="toc-nuestra-historia"><span
class="toc-section-number">7.4</span> Nuestra historia</a></li>
<li><a href="#la-conciencia-en-acción"
id="toc-la-conciencia-en-acción"><span
class="toc-section-number">7.5</span> La conciencia en acción</a></li>
<li><a href="#hallar-nuestros-sentimientos"
id="toc-hallar-nuestros-sentimientos"><span
class="toc-section-number">7.6</span> Hallar nuestros
sentimientos</a></li>
<li><a href="#separación-y-selección-emocional"
id="toc-separación-y-selección-emocional"><span
class="toc-section-number">7.7</span> Separación y selección
emocional</a></li>
<li><a href="#agotamiento" id="toc-agotamiento"><span
class="toc-section-number">7.8</span> Agotamiento</a></li>
<li><a href="#buscar-ayuda" id="toc-buscar-ayuda"><span
class="toc-section-number">7.9</span> Buscar ayuda</a></li>
<li><a href="#renunciar" id="toc-renunciar"><span
class="toc-section-number">7.10</span> Renunciar</a></li>
</ul></li>
<li><a href="#epílogo" id="toc-epílogo"><span
class="toc-section-number">8</span> Epílogo</a></li>
<li><a href="#agradecimientos" id="toc-agradecimientos"><span
class="toc-section-number">9</span> Agradecimientos</a></li>
<li><a href="#mi-viaje" id="toc-mi-viaje"><span
class="toc-section-number">10</span> Mi viaje</a></li>
</ul>
</nav>
<h1 class="unnumbered" id="introducción">Introducción</h1>
<h2 data-number="0.1" id="el-programador-mediocre"><span
class="header-section-number">0.1</span> ¿El programador mediocre?</h2>
<p>Afrontémoslo: no queremos ser programadores mediocres. ¡Queremos ser
programadores <code>[geniales,increíbles,superlativos]</code>! Queremos
ser los programadores a los que llaman cada vez que están en un aprieto,
y queremos ser los programadores que se sumergen en bases de código
desconocidas y producen código perfecto en cuestión de minutos. Código
que estaría en el Louvre como una obra de arte, estudiado por
generaciones de programadores por su belleza intrínseca y funcionalidad
excepcional.</p>
<p>¿Por qué íbamos a querer ser programadores mediocres? ¿No es mediocre
lo opuesto a genial? ¿No deberíamos esforzarnos por ser grandes
programadores?</p>
<p>Por supuesto, deberíamos esforzarnos por ser grandes programadores a
largo plazo, pero para llegar a ser grandes programadores primero
debemos pasar por la etapa de ser programadores mediocres.</p>
<p>Los programadores mediocres saben que no son (todavía) grandes
programadores. Los programadores mediocres ven la distancia entre donde
se encuentran actualmente y la grandeza que quieren en sus trabajos de
programador. Son conscientes del trabajo que implica ser un gran
programador y creen que si hacen el trabajo también llegarán a ser
grandes programadores.</p>
<p>Pero también ven sus propias faltas y carencias. Ven el historial de
su navegador lleno de búsquedas en internet de sintaxis y conceptos
básicos. Ven sus archivos de correo electrónico de preguntas que han
hecho a otros programadores. Se estremecen ante su código de hace varios
meses y se preguntan si alguna vez llegarán a ser grandes programadores
con todos estos errores y traspiés. Ven la brecha entre ellos y los
grandes programadores, y se siente como si la brecha se ensanchara a
cada paso del camino.</p>
<p>Los programadores mediocres se preguntan si vale la pena. Se
preguntan si deberían hacer algo más con sus vidas además de programar
computadoras. Tal vez no sean tan buenos como creían, o tal vez les
falte ese talento especial que tienen los grandes programadores. Tal vez
sientan que aprendieron cosas equivocadas al principio de sus viajes, o
tal vez piensen que deberían haber comenzado antes.</p>
<p>Ven que otras personas que tienen un gran éxito como programadores y
se preguntan si estuvieron ausentes el día en que se entregaron los
grandes genes programadores.</p>
<p>La verdad es que todos somos programadores mediocres de alguna forma.
Seguimos realizando preguntas y teniendo que echar un vistazo a sintaxis
y conceptos en nuestro día a día cuando programamos. Las computadoras
continúan evolucionando y los programadores continúan añadiendo
complejidad cada día a las tareas de programación. Conlleva mucho ancho
de banda mental mantener todos esos conceptos frescos en nuestra
mente.</p>
<h2 data-number="0.2" id="por-qué-este-libro"><span
class="header-section-number">0.2</span> ¿Por qué este libro?</h2>
<p>Este libro trata de ayudarte en tu viaje como programador mediocre.
Juntos descubriremos algunos conceptos erróneos comunes que tenemos
sobre la programación, el fracaso y el crecimiento. Entenderemos que el
acto de programar y desarrollar es algo que hacemos todos los días.
Todos los días podemos mejorar en pequeñas cosas. Son estos pequeños
cambios los que nos transforman de programadores mediocres en mejores
programadores.</p>
<p>Hay muchos libros sobre cómo convertirse en un mejor programador.
Tienden a tener listas de verificación y otros consejos que el autor
considera lo suficientemente importantes como para que los hagas a fin
de convertirte en un mejor programador. Suelen centrarse en mejoras
específicas, como por ejemplo elegir el mejor editor, escribir mejores
casos de prueba o beber mucha agua. Esos libros tienen muchos consejos
útiles, pero se leen como una lista de cosas que debes hacer todas a la
vez para tener éxito. Este libro intentará no cargarte con más trabajo
(probablemente ya tengas suficiente). Más bien, discutiremos lo que se
siente siendo un programador. Hablaremos de las emociones que aparecen
mientras programamos, los sentimientos de frustración, culpa, ira e
insuficiencia. Trataremos de las dificultades para aprender cosas nuevas
y mantener tus habilidades actualizadas. Hablaremos de esos momentos en
los que tienes ganas de darte por vencido y alejarte de la informática y
si esos sentimientos provienen de un lugar de amor o de una preocupación
por no está al día.</p>
<p>Este libro es un viaje personal para ambos. Es una memoria de mi
tiempo como programador y mis sentimientos a lo largo del camino. He
pensado muchas veces en rendirme y encontrar una carrera diferente, pero
hacer otra cosa que no sea programador de computadoras me asusta aún
más. ¿Significa eso que estoy atrapado en un uróboro (<em>N. del
traductor: un símbolo que muestra a un animal con forma de serpiente que
engulle su propia cola y que forma un círculo con su cuerpo. El uróboro
simboliza el ciclo eterno de las cosas</em>) perverso de autocompasión y
dudas? Difícilmente. Significa que necesito profundizar más para
comprender por qué elegí el camino de ser programador y darme cuenta de
que me costó mucho llegar aquí y que me llevará mucho más llegar a donde
quiero estar. Es un compromiso de ver las cosas como son ahora y seguir
adelante desde donde estoy parado.</p>
<h2 data-number="0.3" id="descargo-de-responsabilidades"><span
class="header-section-number">0.3</span> Descargo de
responsabilidades</h2>
<p>No soy doctor ni terapeuta. No tengo cualificación para darte un
consejo médico. Soy programador. Toda la información de este libro está
dada desde la perspectiva de un programador con dificultades y no debe
tomarse como un consejo médico. Si necesitas ayuda de un profesional
médico, por favor busca a una persona que pueda ayudarte. (Hay un
capítulo entero sobre buscar ayuda de otras personas casi al final de
este libro).</p>
<p>Comencemos nuestro viaje averiguando dónde estamos y recordando qué
nos llevó a este lugar.</p>
<h2 data-number="0.4" id="de-esta-traducción"><span
class="header-section-number">0.4</span> De esta traducción</h2>
<p>No recuerdo cómo conocí el texto de Craig Maloney, quizás dí con él
porque le sigo en Mastodon y desde ahí conocí su proyecto. Cuando lo
conocí, antes de leerlo, quizás pensé que sería un montón de recursos y
consejos técnicos para las nuevas personas que llegaran a esto de la
programación, pero me resultó curioso el título.</p>
<p>Después de leerlo, me dí cuenta que no. Que no se hablaba de nada
técnico sobre programación, que lo que aquí se cuenta tiene que ver más
con el aspecto psicológico y mental en lo referente a la programación
que con aspectos técnicos.</p>
<p>Yo, sin ser programador, encontré en el libro algunos consejos y
trucos interesantes para aplicar en mi día a día en algunos aspectos de
mi faceta digital (mi blog, traducciones, colaboraciones, etc).</p>
<p>Y como siempre, de ese interés personal nació esta traducción que hoy
tienes delante, después de pedir el correspondiente permiso al autor
original. Me gustó lo que se contaba y la traducción “me obligaba” a
tener que leer el texto y comprenderlo para realizarla y poder
compartirla con todo el mundo.</p>
<p>Si tu trabajo tiene que ver de alguna manera con la programación y en
algún momento te has sentido una persona perdida, frustrada o fuera de
lugar, este texto te ayudará a saber que es algo común y el autor
compartirá contigo sus visiones de su propio viaje en el mundo de la
programación y cómo consiguió ir pasando etapas en ese viaje. Tu tendrás
tu propio camino en el viaje de la programación, pero tomar como
referencia lo que otras personas han sentido quizás te sirva como ayuda
en los momentos bajos del camino, espero que sea así.</p>
<p>Pero si no eres programador, también es un texto interesante, este es
un relato en el que el autor revela sus puntos flacos, y comparte
algunos de los recursos que le han ayudado a conseguir sus metas. Quizás
tu puedas aplicarlas a tu día a día en otras facetas, a mí me han
servido.</p>
<p>La traducción la he realizado en un repositorio git hospedado en <a
href="https://codeberg.org/victorhck/elprogramadormediocre">Codeberg</a>
donde tienes disponible todos los capítulos y el código original que
utiliza el autor para generar su página web.</p>
<p>Si este u otro contenido que creo te resulta interesante, siempre
puedes agradecérmelo mediante una donación en <a
href="https://es.liberapay.com/victorhck/">Liberapay</a>. Pero tanto si
donas como si no, todo el contenido que creo estará libre para que lo
disfrutes.</p>
<h1 data-number="1" id="el-viaje-del-programador-mediocre"><span
class="header-section-number">1</span> El viaje del programador
mediocre</h1>
<h2 data-number="1.1" id="cómo-hemos-llegado-aquí"><span
class="header-section-number">1.1</span> Cómo hemos llegado aquí</h2>
<p>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.</p>
<p>Y ahora te sientes estancado.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<h2 data-number="1.2" id="la-brecha"><span
class="header-section-number">1.2</span> La brecha</h2>
<p>Elegí la palabra “brecha” (<em>Nota del traductor: en inglés usa la
palabra “gap” que tiene distintos significados como brecha o hueco</em>)
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.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<h2 data-number="1.3" id="cerrando-la-brecha"><span
class="header-section-number">1.3</span> Cerrando la brecha</h2>
<p>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.</p>
<p>Desafortunadamente, yo no he encontrado una manera de cerrar las
brechas.</p>
<p>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.</p>
<p>Así que, si no hay una manera de cerrar por completo la brecha ¿Qué
puedes hacer?</p>
<p>Tienes tres posibles opciones disponibles:</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<h2 data-number="1.4" id="el-viaje-es-la-recompensa"><span
class="header-section-number">1.4</span> El viaje es la recompensa</h2>
<p>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.</p>
<h1 data-number="2" id="compañeros-de-viaje"><span
class="header-section-number">2</span> Compañeros de viaje</h1>
<h2 data-number="2.1" id="programadores-famosos"><span
class="header-section-number">2.1</span> Programadores famosos</h2>
<p>A lo largo de la historia de la computación ha habido personas que
han demostrado increíbles capacidades a la hora de crear código. Residen
en el panteón de los grandes programadores informáticos: Ada Lovelace
(la primera programadora de computadoras), Dennis Ritchie (el creador
del lenguaje de programación C), Rear Admiral Grace Murray Hopper
(creadora de COBOL y acreditada por encontrar el primer “error”
informático documentado). (<em>N. del traductor: un error informático en
inglés es llamado “bug” que también se puede traducir como bicho o
insecto</em>) y muchos más. También tenemos desarrolladores en nuestras
propias comunidades, que tienen un cierto grado de notoriedad, ya sean
las personas que escribieron el lenguaje de programación que usamos
actualmente, las personas que mantienen el sistema operativo que usamos
o alguien que saltó a la fama en nuestra comunidad preferida. Puede ser
intimidante cuando nos comparamos con estas grandes personas. Después de
todo, cualquier cosa en la que estemos trabajando actualmente podría no
estar a la altura de lo que estas personas hayan hecho. Peor aún,
podemos estar trabajando en algo similar y sentir que cualquier cosa en
la que estemos trabajando nunca estará a la altura de lo que estas
personas han logrado. Incluso podemos ser amigos de programadores que
parecen resolver las cosas mucho más rápido y de una manera más elegante
que nosotros y maravillarnos de cómo parecen tener todo ese conocimiento
al alcance de la mano que posiblemente no podamos entender.</p>
<h2 data-number="2.2"
id="entre-bastidores-frente-a-la-actuación-final"><span
class="header-section-number">2.2</span> Entre bastidores frente a la
actuación final</h2>
<p>Uno de los mejores consejos que he recibido sobre compararnos con los
demás, es darnos cuenta de que la comparación es entre nuestra vida
entre bastidores <em>versus</em> la actuación final que ven los
espectadores. La metáfora se basa en el teatro, donde los artistas saben
todo lo que no está bien sobre la actuación de su propio grupo de teatro
y lo comparan injustamente con la actuación final de otro grupo de
teatro. Esta metáfora es útil en nuestro caso porque tendemos a comparar
todas las cosas que sabemos (las largas horas de crear código
improductivas, las dificultades para aprender, etc.) con el producto
final de otra persona. No vemos su lucha para hacer que las cosas
funcionen, o sus innumerables horas haciendo prototipos de mierda y
proyectos sin terminar antes de hacer lo que admiramos. Permítete tener
un lugar entre bastidores desordenado y hacer muchos ensayos, y
comprende que se necesita esfuerzo y práctica para realizar una buena
actuación.</p>
<h2 data-number="2.3" id="el-atractivo-del-post-mortem"><span
class="header-section-number">2.3</span> El atractivo del
<em>post-mortem</em></h2>
<p>Hay una tradición en algunos proyectos de programación (especialmente
en proyectos de desarrollo de juegos donde hay un final claro para el
proyecto cuando se envía el producto) de hacer una autopsia del
proyecto. Lo que hace la autopsia, es permitir que los desarrolladores
de un proyecto indiquen lo que salió bien y lo que no salió bien. Las
mejores autopsias tienden a ser relatos sinceros de los éxitos y
fracasos de un proyecto.</p>
<p>La autopsia puede ser una mirada fascinante al desarrollo de un
proyecto. Me he encontrado leyendo muchas de estas, en busca de
información sobre el proceso de desarrollo. Pero hay una trampa sutil en
la autopsia: son un recuerdo de eventos desde el punto de vista de un
proyecto exitoso (o fallido). Son un recuerdo de alguien que trabajó en
un proyecto que fue lo suficientemente exitoso, como para que tu
dediques tiempo a leer sobre los altibajos de ese proyecto. Están
escritos desde una perspectiva en la que el éxito del proyecto es una
conclusión inevitable (o están escritos sobre proyectos que se
destacaron por cómo fallaron o no cumplieron con las expectativas de los
involucrados). Puede llevar a la creencia de que en lo que estás
trabajando no es tan importante como las cosas en las que están
trabajando otras personas. Pero no sabemos la importancia de nuestro
proyecto en tiempo real. Incluso la gente en la autopsia no sabía si su
proyecto funcionaría o tendría éxito mientras trabajaban en él. Es
posible que nuestros proyectos nunca vean la luz del día o que sean algo
que cambie el mundo. No podemos saber el valor de aquello en lo que
estamos trabajando mientras lo hacemos (aunque podemos tener una idea de
si <em>sentimos</em> que nuestro trabajo es importante o no).</p>
<p>Una autopsia también tiene el beneficio de la retrospectiva. Las
decisiones que eran claras y definitivas en ese momento podrían no tener
mucho sentido cuando se las compara con los datos obtenidos más adelante
en la vida útil del proyecto. También hay un problema con la “memoria
selectiva” en la que es posible que algo no se recuerde con la misma
claridad o se combine con otros eventos. Declaraciones confiadas como
“Sabíamos que esto no habría funcionado” en realidad podrían haber sido
“No estábamos seguros de si esto funcionaría, así que probamos varias
cosas. Todas no funcionaron”. Debes considerar a cualquiera que escriba
sobre su pasado como un narrador poco confiable. Cierto, pueden ser los
mejores y más informados narradores que tenemos, pero no tienen una
perspectiva objetiva de lo que sea que estaban creando. Tienen sus
propios prejuicios y razones para las historias que presentan en una
autopsia. Debes tratar estas autopsias como tratarías una autobiografía
de una persona famosa: una fuente primaria con una agenda para mostrar
el tema de la mejor manera posible.</p>
<p>No hay nada de malo en leer una autopsia sobre un proyecto, podemos
aprender mucho sobre cómo se ejecuta un proyecto (o no se debe ejecutar)
y qué peligros debemos tener en cuenta si seguimos un camino similar,
pero hay que comprender que estás leyendo un informe (ya sea de una
persona o de un equipo de personas). Tienen la perspectiva de alguien
profundamente involucrado en el conflicto. Estás mirando sus recuerdos
de tácticas, no la estrategia general que los trajo al lugar.</p>
<h2 data-number="2.4" id="clasificación-de-programadores"><span
class="header-section-number">2.4</span> Clasificación de
programadores</h2>
<p>Hay muchas medidas que la gente usa para clasificar a los
programadores. Es probable que hayas visto que estas medidas se
manifiestan de diferentes maneras: sitios de competencia, números de
<em>commits</em> en un proyecto, medidas de productividad, tiempo para
entregar el código y los buenos sentimientos viscerales que podamos
sentir, como se hacía antiguamente. Nos lo hacemos a nosotros mismos y a
los demás. Comparamos nuestro trabajo con el trabajo de nuestros
compañeros y gente que admiramos, pero eso puede llevarnos a hacer
comparaciones que no son objetivas o no se basan en todos los datos.
Puedo compararme con personas que hacen programación de bajo nivel y
encontrar que no estoy a la altura en ese ámbito. No importa que no haya
hecho mucha programación de bajo nivel, la comparación es válida. O
puedo compararme con personas que fueron asesoradas por programadores
cuyos nombres son legendarios en su campo. Encontraré brechas entre mi
conocimiento y el de ellos, porque no tuve acceso a esos mentores (o
peor aún: no aproveché los mentores a los que podría haber accedido.
¡Ups!). Comparaciones como estas no ayudan y nos llevan a castigarnos
por no ser otra persona. Nuestra evaluación de nuestros proyectos e
historia nos da la conclusión de que no somos esa otra persona, ni
podríamos ser nunca esa otra persona.</p>
<p>El mayor problema con la clasificación de programadores (o en
cualquier caso, clasificación de cualquier cosa) es que los sistemas de
clasificación están basados en una serie de criterios. No hay un
estándar real para clasificar programadores. Los sitios donde se
clasifica y puntúa programadores en base a un número de problemas
resueltos o la dificultad de los problemas resueltos solo han
determinado que hay una serie de programadores que realmente disfrutan
resolviendo esa clase de problemas. También han reunido a un grupo de
programadores que dedicarán tiempo y esfuerzo a resolver estos problemas
y serán competitivos mientras los resuelven. Nos dice poco sobre las
habilidades del programador fuera de esa materia.</p>
<p>También hay otras medidas para clasificar a los programadores. Una
medida clásica es revisar cuántas líneas de código usó un programador
para resolver un problema (esto a veces se denomina “código de golf”,
donde cuanto menor sea el número de líneas de código, mejor será la
solución). Podemos argumentar acerca de cómo de “limpia” es la solución
(limpia es otro término algo nebuloso y poco concreto). Podemos
determinar la “notación Big O”, una notación utilizada para describir el
rendimiento o la complejidad de los algoritmos que utilizó un
programador en su código. Podemos hacer una prueba de <em>estrés</em> o
de esfuerzo del código para determinar lo bien que se adapta el código a
diversas circunstancias. Podemos contar la cantidad de ciclos que
requiere un código en particular para ejecutarse y compararlo con un
código similar. Muy poco de esto nos dice algo sobre un programador en
particular. Lo que sí nos dice es que el programador tiene experiencia
que lo lleva a esa solución en particular. Nos dice que el programador
ha visto este tipo de problemas antes y se preocupó lo suficiente por el
problema como para pensar lo suficiente sobre cómo hacer una mejor
solución. Aprendemos que el programador dedicó tiempo y energía a
practicar este tipo de problemas. Lo que no nos muestra, es una medida
general de las habilidades o capacidades del programador. Es similar al
cuento apócrifo de un profesor brillante. Este profesor era un genio
absoluto en su campo y era una de las personas a las que acudir para
obtener respuestas sobre su tema, pero a pesar de su brillantez, no
sabía cómo cambiar la rueda de un automóvil. ¿Significa eso que el
profesor no era tan brillante como la gente decía que era? Difícilmente.
Significa que el profesor pasó más tiempo pensando en su profesión que
pensando en cambiar ruedas de automóvil. Lo mismo es cierto también para
los programadores. Si un programador pasa la mayor parte de su tiempo
resolviendo un conjunto particular de problemas, eventualmente se
volverá experto en ese tipo de problemas. Pero si ese programador se
atasca con un tipo diferente de problemas, eso no descarta sus
habilidades generales, simplemente señala las áreas en las que podrían
querer trabajar.</p>
<h2 data-number="2.5" id="midiendo-el-rendimiento-del-programador"><span
class="header-section-number">2.5</span> Midiendo el rendimiento del
programador</h2>
<p>También hay una tendencia a medir la productividad del programador
mediante cuántas contribuciones puede hacer el programador a un
proyecto. Bajo ciertos sistemas de control de versiones, estos se
denominan <em>commits</em>. Enumeran un conjunto de cambios que el
programador desea realizar en el código. En una era en la que existen
sitios para escribir código de manera colaborativa y social como Github
o Gitlab, podemos revisar fácilmente los <em>commits</em> que están
realizando otros programadores. Dado que podemos medir la cantidad de
<em>commits</em>, podemos usar esta medida para sentir que no estamos
generando la misma cantidad y frecuencia de <em>commits</em> que otros
programadores. Y a diferencia de las medidas de antaño (líneas de código
en particular, que mide cuántas líneas de código añade un programador a
un programa), podemos revisar la calidad de sus <em>commits</em> con un
proyecto. Puede ser desalentador ver una gran cantidad de trabajo de
calidad realizado por nuestros compañeros. También puede ser fuente de
frustración y sentimientos de insuficiencia. Nos preguntamos “¿Por qué
no puedo ser tan productivo o contribuir como esta otra persona?”</p>
<p>Es incluso todavía más frustrante cuando otras personas utilizan
estas medidas para judgar la productividad y las contribuciones con
código. Podemos encontrarnos siendo criticados por nuestros resultados
(o la falta de estos).</p>
<p>Los <em>commits</em> y las líneas de código son las medidas más
visibles de la productividad al crear código, pero no muestran mucho
sobre la práctica real de la programación. No podemos medir la cantidad
de tiempo que dedicamos a pensar en el problema con solo mirar un
<em>commit</em>. No vemos las montañas de material de referencia que usó
el programador para encontrar una solución y ciertamente no sabemos si
este <em>commit</em> es el resultado de una tarde de trabajo o de muchos
días de trabajo (a menos que se hagan <em>commits</em> con más
frecuencia). Incluso podríamos descubrir que esta persona está actuando
como el punto central de una organización y está integrando el trabajo
de varias personas en sus <em>commits</em>.</p>
<p>Medirnos a nosotros mismos basándonos en la cantidad de la producción
de otras personas es fácil y muy seductor pero no es útil para hacerse
una idea de cómo mejorar nosotros mismos en nuestra tarea de crear
código (a no ser que sea “generando más <em>commits</em>”). Esa forma de
pensar puede llevarnos a creer que no estamos dedicando el tiempo
suficiente a la “programación real” y provocar exceso de trabajo, estrés
y agotamiento.</p>
<h2 data-number="2.6" id="compañeros-de-viaje-1"><span
class="header-section-number">2.6</span> Compañeros de viaje</h2>
<p>Hay momentos en los que es útil compararnos con otros programadores.
A veces podemos aprender sobre nuevas tecnologías o nuevas metodologías
mirando el trabajo de otras personas, pero es fácil caer en la trampa de
pensar que porque no estamos al nivel de otros programadores somos de
alguna manera inferiores a ellos. En lugar de ver a otros programadores
como competencia, deberíamos verlos como compañeros. Todos estamos en
esta profesión trabajando para mejorar nuestros respectivos proyectos.
Con el software libre y de código abierto tenemos una oportunidad única
de ver cómo otras personas hacen su trabajo en público. Podemos aprender
del código de otras personas de la misma manera que los científicos
pueden mirar los artículos de otros científicos para ver qué funcionó (y
pueden mejorar la validez del artículo con una réplica y repetición).
Ningún programador está completamente aislado del trabajo de los demás.
(Es raro que un programador haya creado el código de todo su entorno de
programación desde cero sin el trabajo de otras personas). Todas las
personas aprendemos unas de otras, pero en lugar de intimidarnos por el
trabajo de otras, podemos desarmarlo y aprender de él. Si tenemos
suerte, podemos aprovechar la oportunidad para preguntarles cómo
funciona el código y por qué eligieron escribir el código de esa
manera.</p>
<p>Es valioso hacer preguntas a nuestros compañeros programadores.
Tendemos a pasar por alto hacer preguntas por miedo a que vamos a hacer
algo obvio o hacer una pregunta que nos haga sentir incómodos por
haberla realizado. Hacer preguntas es muy útil cuando no entendemos qué
está pasando con una idea o una pieza de código en particular. Hay
programadores a los que no les importa responder preguntas, y espero que
los encuentres. De acuerdo, hay algunos programadores que están muy
ocupados y es posible que no tengan el tiempo o la predisposición para
responder preguntas, pero si realmente estamos atascados y hemos agotado
todas las demás vías, tal vez podamos hacerles preguntas que no
requieran mucho de su tiempo y esfuerzo. Incluso pueden estar
agradecidos por la pregunta porque les da una idea de una perspectiva
que de otro modo no tendrían. Cuando hacemos preguntas iniciamos un
intercambio de ideas en ambas direcciones.</p>
<p>Hacer preguntas es todo un arte y puede ser frustrante cuando las
personas no responden nuestras preguntas o nos responden con otras
preguntas o sugerencias que no son útiles. Esto se manifiesta en
intercambios donde la persona A pregunta: “Me gustaría saber cómo hacer
X” y las personas B y C responden “Yo en tu lugar haría Y”. Es
frustrante cuando la gente no responde a nuestras preguntas de manera
directa. También es fácil verse envuelto en intercambios con la gente
sobre los méritos de hacer Y, donde Y fue sugerido por otra persona que
no tiene nada que ver con la pregunta original sobre X. Pero si volvemos
a enmarcar la experiencia como “esta persona está tratando de ayudarme,
tal vez haya algo en esta recomendación que pueda ser útil”, entonces
podemos tener una mejor conversación. Quizás lo que estamos preguntando
no es la mejor manera de hacer algo y hacer una pausa para escuchar
puede ayudarnos a comprender mejor por qué hicieron su sugerencia.</p>
<p>El sacar nuestros egos de la pregunta nos permite estar más abiertos
a las respuestas que recibimos. Cuando las personas no entienden nuestra
pregunta, es fácil tomarla como algo personal y protestar pensando “no
me entienden” o “no me escuchan”. Al abstraernos de la pregunta nos
permite tomar la respuesta proporcionada “tal cual” y nos da la
capacidad de cambiar la pregunta según sea necesario para obtener
mejores respuestas.</p>
<p>Por supuesto, hay personas que no responderán pensando en lo mejor
para ti y solo están interesadas en imponerte su propia visión del
mundo. En lugar de responder a tu pregunta, cuestionan por qué estás
haciendo eso y en su lugar sugieren que deberías usar su metodología.
Puede requerir mucha energía enfrentarse con estas personas y decirles
“no, realmente tenía la intención de aprender más sobre X”. Me gustaría
tener buenas respuestas sobre cómo manejar a este tipo de personas.
Muchas de estas personas, sienten que cualquier cosa que estén haciendo
es el único camino correcto y aquellas personas que se desvían de su
camino elegido son anatema para su mundo. Mi mejor sugerencia es
agradecerles su tiempo y pedir ayuda a alguien más. Tal vez puedan ser
útiles en el futuro cuando tenga preguntas sobre lo que sea que sea
parte de su agenda, pero por ahora conviene ser lo más amable posible y
desearles lo mejor en su viaje de programación. Los espacios
tecnológicos tienen mucha gente que ha estado trabajando con
computadoras durante mucho tiempo y se ha formado opiniones sólidas
sobre sus herramientas y tecnologías. Mi esperanza es que puedas
encontrar a las personas que también son amables y están dispuestas a
compartir lo que saben y no acosarte con sus creencias arraigadas. Con
el tiempo, también formarás tus propias creencias sobre lo que funciona
y lo que no funciona y transmitirás ese conocimiento a los demás.
Reconocer a las personas que están ahí para ayudar a educar y a las que
están ahí para hacer proselitismo es parte de nuestro proceso de
crecimiento.</p>
<p>Si vemos a otros programadores como compañeros de viaje en esta
travesía, como colegas en nuestra práctica a la hora de crear código,
entonces nos daremos cuenta que estamos en esto todos juntos. Incluso
alguien con muchos más años de experiencia que nosotros es tu colega.
Tienes conocimientos y experiencia que ellos no tendrán y ellos tienen
experiencias y conocimientos que tu no tienes. Si nos despojamos de las
barreras del estatus que percibimos y de la meritocracia de esas
personas podremos entendernos mejor y aprender unos de otros.</p>
<p>El viaje para llegar a ser un programador mejor es largo y duro.
Necesitamos los mejores compañeros que podamos encontrar para ayudarnos
en este viaje. Necesitamos algo más que únicamente compañeros que tengan
muy buenos conocimientos técnicos, también necesitamos compañeros con
los que podamos hablar cuando la jornada termina. Necesitamos compañeros
con los que podamos sentarnos alrededor de la fogata proverbial e
imaginaria donde juntos podamos reír y compadecernos de nuestras
luchas.</p>
<h1 data-number="3" id="los-errores-a-lo-largo-del-camino"><span
class="header-section-number">3</span> Los errores a lo largo del
camino</h1>
<h2 data-number="3.1" id="vaya"><span
class="header-section-number">3.1</span> ¡Vaya!</h2>
<p>Tiene que pasar: algo que pensabas que era una buena idea no funcionó
de la manera que lo habías planeado, y ahora te das cuenta de que has
cometido un terrible error. A veces es algo que se podría haber evitado
fácilmente (por ejemplo: realizar un <em>commit</em> de un código
destinado a la depuración). A veces es una cascada de errores, cada uno
de los cuales se basa en las consecuencias del error anterior. Está el
error de ignorar los efectos secundarios de un módulo cuando se usa de
una manera que no estaba prevista, o darse cuenta de que has diseñado un
módulo pequeño y estrechamente acoplado y después descubrir que tu
módulo será parte de una pieza de software más grande y tu código no
está diseñado para hacer una transición sin problemas. ¡Vaya!</p>
<p>Sin embargo, los errores que realmente me asustan son los que no
esperaba, aquellos en los que las consecuencias no deseadas corren
desenfrenadas por todo el sistema como una reacción en cadena. Esos
errores son los que me quitan el sueño por la noche.</p>
<p>Los programadores cometen errores. La naturaleza de nuestros trabajos
requiere que seamos conscientes de lo que sucede en múltiples secciones
de código. Perdemos la noción del estado de nuestro programa y del
código que ya hemos realizado. Intentamos salpicar nuestro código con
comentarios y recordatorios de lo que sucede en una sección del código,
pero los comentarios se vuelven obsoletos y aumentan nuestra
distracción. Nos apresuramos y confiamos que el músculo de nuestra
memoria tome el relevo. Nos negamos áreas en las que podemos probar el
código adecuadamente porque sentimos que debemos apresurarnos para hacer
las cosas rápidamente.</p>
<p>Entramos en pánico, y cuando entramos en pánico cometemos
errores.</p>
<h2 data-number="3.2" id="evitar-los-errores"><span
class="header-section-number">3.2</span> Evitar los errores</h2>
<p>Vamos a hablar con claridad: no hay manera de evitar o eliminar los
errores. El software es demasiado complejo para estar completamente
libre de errores. Sin embargo, lo que podemos hacer es crear lugares en
los que podamos detectar tantos errores del código como sea posible
antes de mostrarlo a los demás. Podemos comprender mejor nuestro código
y lo que está haciendo cuando tenemos la capacidad de depurar y probar
nuestro código en un entorno seguro. Podemos ver cómo se comportará bajo
ciertas circunstancias. La creación de un modelo similar al del sistema
de destino nos permite probar nuestro código con versiones más pequeñas
de la realidad del sistema del destino y ver cómo se comporta en esas
condiciones.</p>
<p>Ponemos mucho énfasis en evitar errores, tanto en la programación
como en la cultura de la programación. Hay historias de terror de cómo
pequeños errores en un programa causaron grandes dolores de cabeza a las
personas involucradas. La moraleja de estas historias es que los errores
simples pueden ser costosos y debemos ser doblemente cuidadosos para
evitar errores. Estas anécdotas se cuentan con la esperanza de asustar a
los desarrolladores para que sean más cautelosos, pero pueden tener el
efecto contrario. Pueden hacer que los programadores se vuelvan
paranoicos acerca de poder cometer cualquier error, y cuando operamos en
un modo basado en el miedo, comenzamos a entrar en pánico. Decirle a los
programadores que no cometan errores es similar a decirle a alguien que
no tenga miedo: tienen más miedo de tener miedo.</p>
<p>La mejor (y quizás la única) forma en que aprendemos, es cometiendo
errores. Aprender cometiendo errores es una forma efectiva de
permitirnos ser curiosos y ver qué causó que el programa fallara. Cuando
nos privamos de la libertad de cometer errores, nos privamos de las
oportunidades de aprendizaje al cometer esos errores. Eso no significa
que tengamos que cometer todos los errores que otros desarrolladores han
cometido antes que nosotros (eso serían montones de errores). Tampoco
significa que debamos introducir el caos en nuestro proceso de
desarrollo para aprender mejor. Lo que significa es que debemos cometer
nuestros propios errores a nuestra manera, para seguir aprendiendo y
descubrir dónde existen lagunas en nuestra comprensión.</p>
<h2 data-number="3.3" id="hacer-un-modelo"><span
class="header-section-number">3.3</span> Hacer un modelo</h2>
<p>Necesitamos entornos donde los programadores puedan aprender de una
manera segura de sus propios errores. Necesitamos espacios donde los
programadores puedan sentirse bien y seguros a la hora de probar cosas
nuevas. Necesitamos lugares donde los desarrolladores puedan probar sus
ideas y que esos cambios no se extiendan a otros sistemas no
relacionados. Esta es la mejor forma, con la que los desarrolladores
pueden aprender y ser valientes en su proceso de aprendizaje.</p>
<p>Estos entornos deben replicar los sistemas de destino y deben estar
lo más cerca posible de esos sistemas de destino. Eso no significa que
haya que hacer copias exactas de entornos de producción costosos, pero
sí se necesita crear modelos de entornos de producción que prueben la
mayoría de las piezas con las que tu código entrará en contacto. Tener
modelos o réplicas que reflejen los sistemas de producción significa que
cuando muevas tu código a producción, introducirá menos cambios con
consecuencias no deseadas. Tus cambios ya habrán existido en un entorno
de producción. Puedes estar tranquilo sabiendo que los cambios que
provoquen en estos modelos serán los mismos cambios que aparecerán en el
sistema de destino.</p>
<p>En la situación más ideal, necesitarás tener un entorno como este, en
una máquina que controles. Esto significa que no estás compitiendo con
otros programadores de tu organización que también están siendo
valientes con sus cambios. También querrás asegurarte de que tu entorno
se mantenga actualizado con sus cambios (y cualquier cambio de
producción) para que tu modelo de desarrollo coincida con lo que está en
el sistema de destino y lo que estará en el sistema de destino. Un buen
modelo es aquel que se mantiene actualizado con lo que se está
modelando. Es lo mismo que un mapa de una ciudad: es mejor cuando
coincide con el área de su modelo y se mantiene actualizado con los
cambios que ocurren en esa ciudad. Un buen mapa de la ciudad podría
informarte sobre las obras recientes que se están realizando en tu ruta.
Un mapa inútil es aquel que ni siquiera muestra tu ruta porque no se
había construido esa ruta cuando se creó el mapa. Si nuestro modelo de
producción se está quedando atrás constantemente con respecto a lo que
está en producción, dedicaremos más tiempo a rectificar los cambios que
estamos haciendo con los cambios entre nuestro modelo y el que está en
producción.</p>
<p>Esto también significa que deberíamos tener un entorno que se pueda
reconstruir rápidamente y replicar según sea necesario. Tener un modelo
que se convierte en su propia realidad separada se convierte en un
sistema más para mantener. Este modelo debe ser algo que se pueda
eliminar y reconstruir a voluntad para eliminar cualquier experimento
anterior. Es mejor pensar en él como una copia efímera de tu entorno de
destino que tiene un uso limitado y puede desecharse cuando ya no sea
necesario. Este entorno de pruebas debe ser rápido a la hora de volverlo
a replicar para que haya poca fricción a la hora de crear nuevos
entornos para probar. Eso quizás puede significar crear secuencias de
comandos para el proceso de construcción de estos entornos. La forma en
que decidas hacer esto depende de ti, pero ten en cuenta que quieres
algo que sea lo más simple posible y que requiera la menor cantidad
posible de nuestra atención para replicarlo.</p>
<p>De nuevo, no tiene que ser perfecto, sólo es un modelo, pero necesita
ser lo bastante similar al original para que tu código se comporte de
una manera similar entre el modelo creado y el entorno real.</p>
<h2 data-number="3.4" id="máquinas-del-tiempo"><span
class="header-section-number">3.4</span> Máquinas del tiempo</h2>
<p>Hay un buen número de personas que te hablarán sobre los beneficios
de un sistema de control de revisiones (y muchas de esas personas te
mostrarán los pasos exactos para configurar un sistema de control de
revisiones). Los sistemas de control de revisiones como
<code>git</code>, <code>svn</code>, o <code>cvs</code> y similares han
ayudado a los programadores a coordinar lanzamientos de publicaciones y
mantener un registro de qué trabajos se han añadido a sus proyectos.
Tener un buen sistema de control de revisiones te permite crear áreas
donde puedas probar código nuevo sin tener que añadir estas pruebas a
código ya en producción. Un buen control de revisiones te permite crear
un espacio (o también llamados ramas o <code>branch</code> por su nombre
en inglés cuando estamos hablando de <code>git</code>) basado en un
código ya existente que puedes utilizar para experimentar y desarrollar.
También te permite realizar <em>commits</em> en ese espacio y divagar
tanto como necesites para poder explorar a fondo los cambios que estás
realizando. Sin embargo, lo que es más importante es que un buen sistema
de control de revisiones también te permitirá abandonar ese espacio si
lo necesitas, no estás forzado a añadir esos cambios a tu código en
producción. Esto te permite ver si algo podría funcionar o abandonar
esos cambios si no lo hace. Un buen control de revisiones brinda a los
programadores la capacidad de ramificarse desde cualquier punto en el
tiempo y explorar lo que sucedió en el código base. En cierto sentido,
son máquinas del tiempo y universos infinitos, lo que te permite jugar
con distintos escenarios “¿y si?” con tu código y avanzar y retroceder
en el tiempo en el código. Esto es vital para tu aprendizaje porque
puedes sentirte seguro probando y probando cosas y rebobinando esos
cambios (o eliminándolos por completo) sin afectar el trabajo de otras
personas.</p>
<p>Aprender cómo funciona tu sistema de control de revisiones te dará
libertad para cometer errores. Muchos de estos sistemas pueden parecer
complejos al principio, pero con la práctica continua y paciencia,
comprenderás lo que hace el sistema de control de revisiones y cuáles
son sus posibilidades. Podrás juzgar cuántos riesgos puedes tomar con tu
código y tener más confianza con los riesgos que tomas.</p>
<p>El control de revisiones también puede desempeñar un papel importante
al poder ver el desarrollo del código de otras personas. Puedes disponer
de una ventana a su proceso de desarrollo y ver cómo se desarrollan
ciertas características a medida que se añaden. Esto puede ayudarte a
aprender sobre una base de código desconocida y mostrarte la dirección
que tomaron para hacer el código de la manera que es. Puede brindarte
una ventana a la historia de un proyecto y lo que se hizo para que
sucediera. El control de revisiones puede ser una máquina del tiempo en
la historia de un proyecto y puede ayudarte a comprender que la
programación es un proceso. No todos los proyectos vienen completamente
ya formados de la mente de los programadores.</p>
<h2 data-number="3.5" id="aprender-de-los-errores"><span
class="header-section-number">3.5</span> Aprender de los errores</h2>
<p>A veces fallamos. A veces, el código que escribimos no está a la
altura de las realidades del sistema en el que se implementa. Enviamos
código que hace algo inesperado y como resultado, los sistemas se
rompen. Podemos perder la noción de dónde estamos en nuestro código y
hacer cambios que entren en conflicto con otros cambios, lo que luego
hace que dediquemos tiempo a deshacer esos cambios. Todos estos casos
causan malestar, ya sea para nosotros, las personas a las que ayudamos o
las personas con las que trabajamos.</p>
<p>No voy a mentir: el fracaso apesta. Nos hace sentir que somos menos
personas porque fallamos. Nos sentimos incómodos y nos preguntamos qué
pensarán los demás de nosotros. ¿Tendrán los demás una mala opinión
sobre nosotros? ¿Hemos dañado nuestra relación con aquellas personas que
usan lo que sea que hayamos programado? ¿Hemos defraudado a nuestro
equipo? Todas estas preguntas surgen de dos deseos: el deseo de hacer lo
mejor posible y el deseo de no hacer daño a los demás. Queremos que los
demás piensen bien de nosotros y de nuestras habilidades. El fracaso va
en contra de esos deseos y amplifica cualquier sentimiento de
insuficiencia que podamos tener. Esos sentimientos pueden incluir
preguntarse si deberíamos programar o si nuestros talentos deberían
usarse en otras áreas. Nos preguntamos si deberíamos rendirnos.</p>
<p>No solemos pensar en el fracaso como parte del proceso de
aprendizaje. El fracaso a menudo se ve como el punto final del viaje. En
la escuela, una nota baja se considera una castigo. No lo vemos como:
“necesito practicar esto un poco más”, en cambio, sentimos que nos hemos
causado vergüenza e incomodidad a nosotros mismos y a nuestros seres
queridos. Nos perjudicamos gravemente a nosotros mismos, si no nos damos
cuenta de que el fracaso es una parte natural del proceso de aprendizaje
y que está bien fracasar. No todo lo que hagamos será perfecto. Los
errores se infiltrarán en el mejor código que escribamos. Nos
equivocaremos y desplegaremos el código en el sistema equivocado.
Nuestros errores causarán malestar a los demás. Aceptar esto nos da la
libertad de darnos cuenta que, a pesar de nuestros mejores esfuerzos, no
seremos perfectos. En lugar de ver el fracaso como una limitación,
podemos usarlo como parte de nuestro proceso de crecimiento.</p>
<p>Cuando nos damos cuenta de que vamos a cometer errores, podemos
cambiar nuestro enfoque sobre cómo y dónde los cometemos. Antes mencioné
sobre la creación de modelos de nuestros entornos. ¿Qué mejor manera de
permitirnos cometer errores que en un entorno donde esos errores se
pueden contener o revertir? La creación de modelos nos permite practicar
y probar nuestras suposiciones en entornos que nadie más tiene que ver.
Es similar a un lugar de ensayo para músicos, donde pueden repasar su
material sin necesidad de tocarlo bien a la primera. Pueden resolver las
partes problemáticas y cometer errores hasta que tengan confianza en su
ejecución.</p>
<p>Los errores sirven para aprender qué funciona y qué no funciona. Son
una parte integral de nuestro proceso de aprendizaje. Tenemos tendencia
a recordar las lecciones de aquello que no funcionó bien, mejor que
aquellas que sí funcionaron. Los errores nos ayudan a reforzar aquellas
áreas donde nos faltan conocimientos y nos ayudan a comprender las
brechas que aún tenemos que cerrar.</p>
<p>Los errores también actúan como un recordatorio para hacer una pausa
por un momento y no dejarse llevar por la urgencia de las cosas. Mis
propios errores tienden a surgir cuando me apresuro a cumplir con una
fecha límite (ya sea real o auto impuesta). Mis peores errores suceden
cuando estoy cansado y apurado, cuando prácticamente estoy golpeando el
teclado tratando de hacer que algo (¡cualquier cosa!) funcione. Cuando
me permito hacer una pausa por un momento, reflexionar sobre lo que
estoy tratando de hacer y sentir la incertidumbre en el momento, puedo
tomar medidas para recalibrar y reenfocarme en el momento. Me doy la
libertad de corregir el rumbo y comprender que no estoy dando lo mejor
de mí y necesito hacer algo diferente. Puede ser algo pequeño como darle
un poco de descanso a mi cerebro o algo grande como revisar las
suposiciones que hice sobre lo que estoy haciendo. Hacer la pausa me
permite determinar si quiero continuar haciendo lo que estoy haciendo y
entender si ese es el mejor camino.</p>
<h2 data-number="3.6" id="llevar-un-registro-de-nuestros-errores"><span
class="header-section-number">3.6</span> Llevar un registro de nuestros
errores</h2>
<p>Es interesante no cometer los mismos errores dos veces, pero incluso
si repetimos el mismo error aún puede ser útil. Saber que hemos repetido
el mismo fallo es útil porque nos da un patrón que podemos entender.
Esos patrones nos muestran que hacer esto en particular conduce a un
resultado erróneo que se vuelve a repetir. Luego podemos determinar qué
causó el error y planificar cómo mitigarlo. Esto es parte del proceso de
aprendizaje, siempre y cuando no caigamos en una espiral de
auto-recriminación cuando nos demos cuenta de que hemos vuelto a cometer
el mismo error.</p>
<p>Un truco que yo mismo debería usar con más frecuencia es escribir un
registro en un diario. Llevar un diario de lo que ocurrió y cómo lo
solucionamos es una forma de explicarle a otra persona (a menudo a
nosotros mismos) lo que sucedió. Explicar lo sucedido nos permite
convertirnos en maestros para nosotros mismos y para los demás. Refuerza
nuestro proceso de aprendizaje. Escribir lo que sucedió de una manera
que otros puedan entender, nos permite organizar los pensamientos en
nuestra cabeza de una manera clara y comprensible. Cuando articulamos
nuestros propios pensamientos sobre lo que sucedió y los transcribimos,
comenzamos a comprender nuestros propios pensamientos y podemos
liberarnos de otras ideas sobre cómo solucionar este y otros problemas.
Nos damos la pausa que necesitamos para comprender completamente lo que
sucedió y cuál es la mejor manera de avanzar. Nos convertimos en nuestra
propia caja de resonancia de ideas sobre la mejor manera de
proceder.</p>
<p>No se trata de mantener un registro para la posteridad para que
podamos mirar hacia atrás en una lista de fallos y castigarnos por el
pasado (si eres como yo, eso sucede automáticamente). Es una manera de
enseñarnos a nosotros mismos y maximizar el proceso de aprendizaje. Se
trata de darnos la libertad de ser el instructor de nuestro yo futuro
para que podamos ser más conscientes cuando un error está a punto de
ocurrir y comprender cómo corregirlo. Esto nos permite concentrarnos
ahora mismo el tiempo suficiente para comprender qué sucedió, qué
hicimos para corregirlo y cuál es la mejor manera de proceder a partir
de aquí. También nos ayuda a ubicar dónde están nuestras lagunas de
aprendizaje y las “próximas acciones” que debemos tomar para llenar esas
brechas.</p>
<p>Hablaremos más sobre el proceso de llevar un registro en capítulos
posteriores pero recomiendo encarecidamente el hábito de llevar un
diario, aunque únicamente sea por la razón que le brinda un aprendiz
dispuesto a enseñar, incluso si ese aprendiz eres tu mismo.</p>
<h1 data-number="4" id="las-posadas-en-las-que-nos-hospedamos"><span
class="header-section-number">4</span> Las posadas en las que nos
hospedamos</h1>
<h2 data-number="4.1" id="compañeros-de-viaje-2"><span
class="header-section-number">4.1</span> Compañeros de viaje</h2>
<p>Siempre que pensamos en programadores tendemos a pensar en una
persona sentada frente a un ordenador escribiendo código, con el brillo
del monitor reflejándose en su cara. Normalmente el programador está
solo (aunque hay algunas metodologías en las que participa más de un
programador a la vez, “programación en pareja” o “pair-programming” por
ejemplo). Durante esas sesiones de escribir código, no hay mucho
contacto con otros programadores y puedes sentirte aislado al estar en
compañía únicamente de ti mismo. De acuerdo, esta puede ser una
sensación agradable (hay momentos en los que realmente disfruto de la
soledad junto al ordenador, completamente ocupado y centrado), pero hay
otros momentos en los que necesitamos sentir que no estamos solos. Esto
es especialmente cierto cuando estamos aprendiendo y adentrándonos en un
territorio incómodo. Encontrar a otras personas en situaciones similares
nos puede ayudar en nuestro proceso de aprendizaje. Otras personas nos
pueden ayudar respondiendo a nuestras preguntas y revisando nuestro
progreso. Encontrar una buena comunidad que nos apoye en nuestro
aprendizaje es esencial en nuestro viaje en la programación. Cuando
tenemos una gran comunidad, tenemos un lugar donde poder aprender y
ayudar a que otras personas aprendan. Podemos crecer en la comunidad y
encontrar apoyo.</p>
<p>Una buena comunidad es aquella que nos fortalece a nosotros y a
quienes nos rodean. Nos nutre y nos proporciona refugio. Es un lugar
seguro donde no tenemos que mantener la guardia alta de los ataques a
nosotros mismos y a los demás. En ella las personas se rinden cuentas
entre sí. Podemos confiar en los miembros de la comunidad y sentir que
la confianza es recíproca. Las buenas comunidades existen sin
competencia ni ego, donde los miembros pueden expresarse abiertamente y
aceptar a los demás tal como son.</p>
<h2 data-number="4.2" id="encontrar-una-buena-comunidad"><span
class="header-section-number">4.2</span> Encontrar una buena
comunidad</h2>
<p>Hay un montón de buenas comunidades ahí fuera que están dispuestas a
ayudarte a ser un mejor programador, pero ¿cómo encontrarlas?</p>
<p>Esa es una pregunta complicada.</p>
<p>La mayoría de lenguajes de programación tienen algún tipo de
comunidad que se ha formado entorno a ellos. Algunas usan las listas de
correo u otros canales de comunicación a los que te puedes unir y en los
que participar. Desafortunadamente, los lenguajes de programación más
populares tienen espacios que son complicados de seguir, especialmente
cuando estás tratando de aprender. Lo sé porque me uní al canal
principal de comunicación de un lenguaje de programación muy popular y
me sentí abrumado por las múltiples conversaciones que se llevaban a
cabo a la vez. Las listas de correo diseñadas para ayudar a los
principiantes pueden tener una gran cantidad de tráfico de correos y ese
tráfico puede ser abrumador si estás tratando de entender los aspectos
básicos del lenguaje de programación mientras tratas de estar al día con
la avalancha de correos que llegan a tu bandeja de entrada. Leer los
correos antiguos en los archivos de las listas de correo o en un chat
puede ayudarte a determinar si estás preparado para ese nivel de tráfico
y si las conversaciones en la lista son el tipo de conversaciones que te
gustan. Recuerda: esto es para ayudarte en el viaje. Lanzarte a una
habitación abarrotada, en la que te veas inundado por una gran cantidad
de conversaciones y ruido solo hará que te sientas más aislado y sentir
que no eres bienvenido.</p>
<p>Algunos lenguajes de programación tienen grupos de usuarios locales.
Estos al principio pueden parecen intimidantes, especialmente si el
grupo ya tiene un largo recorrido. Lo sé, porque me sentí intimidado
antes de asistir a mi primer grupo local de usuarios, por miedo a lo que
podría encontrarme allí. Lo que encontré fue un grupo de personas que
estaban interesadas en los temas en los que también yo estaba
interesado. He hecho amistades duraderas en esos grupos locales de
usuarios y te animo a comprobar si también a ti te funciona.</p>
<p>Si no sabes cómo encontrar el grupo adecuado (quizás te encuentres en
un área en la que sientes que eres la única persona que comparte tus
intereses), podrías considerar iniciar tu propio grupo o formar uno
nuevo a partir de un grupo ya existente. Mi amigo Rick y yo abrimos un
grupo local llamado <em>Coffee House Coders</em> donde los programadores
se reúnen una vez a la semana durante unas horas para sentarse y
programar. Todo lo que hicimos fue publicar las horas y los lugares en
los que nos íbamos a reunir y les dijimos a las personas que simplemente
se presentaran con su portátil para escribir código. Por el camino hemos
conocido a algunas personas increíbles y hemos mantenido al grupo en
marcha durante muchos años. Empezar un grupo es un acto de valentía. Ha
habido muchas noches en las que me he sentado solo en una cafetería
esperando a ver si aparecían otras personas. Está bien. La gente está
ocupada y los intereses se desvanecen y cambian con el tiempo. Lo
importante es crear el espacio para que nosotros y los demás nos
sintamos bienvenidos. Para nosotros, eso significaba encontrar una
cafetería local que estuviera abierta hasta altas horas de la noche y
tuviera un amplio espacio para colocar nuestros portátiles. También
ayuda encontrar un lugar en el que haya suficientes tomas de corriente
para conectarse a la energía eléctrica, para que la gente pueda cargar
las baterías de sus equipos si es necesario.</p>
<p>Hay muchas maneras de ser creativo a la hora de comenzar una
comunidad. La llegada de las herramientas en la red permite que puedas
construir comunidades con personas de todo el mundo. El acercar esas
personas y reunirlas para hablar y discutir ideas y ofrecer ayuda es
genial cuando ocurre. A veces, puede ser tan simple como crear una sala
de chat sobre intereses comunes. Explora lo que existe ahí fuera y si lo
que hay no satisface tus necesidades no dudes en crear una tu mismo.</p>
<h2 data-number="4.3"
id="la-dificultad-de-encontrar-una-buena-comunidad"><span
class="header-section-number">4.3</span> La dificultad de encontrar una
buena comunidad</h2>
<p>Reconozco que cualquiera no puede unirse a una comunidad o crear una
propia. Los espacios existentes en la red tienen la reputación de no ser
lugares acogedores para las personas que llegan y los encuentros en
persona pueden agotar tus recursos mentales. Me llevó tiempo encontrar
el valor necesario para asistir a mi primer encuentro en persona y tuve
una mala experiencia con alguien con el que trabajaba y que pensé que
estaría en aquel encuentro. (No estoy seguro si esa persona alguna vez
asistió a alguno de aquellos encuentros). Pero estoy muy agradecido de
haber asistido a aquellos primeros encuentros. Asistir a esos eventos me
trajo amistades, oportunidades y otros “compañeros de viaje” para mi
propio viaje. Hizo que cambiara a uno de mis lenguajes de programación
favoritos (Python) y me llevó a varios trabajos. También me ayudó a
sentir que no estaba solo con mis intereses y me presentó a otras
personas en las que podía confiar. Me dio un sentimiento de
pertenencia.</p>
<p>Superar el obstáculo inicial es difícil. Nuestro miedo al rechazo y
nuestro miedo a hacernos vulnerables a los extraños puede desgastarnos.
Superar ese miedo requiere mucha energía mental y puede quitarnos el
deseo de ser parte de otra comunidad más. No puedo decir que será fácil,
pero puedo señalar algunos de los beneficios que tuvo en mi vida. Espero
que tu puedas encontrar también esos beneficios.</p>
<p>Una alternativa a las comunidades en persona son las comunidades en
la red. Las comunidades en la red pueden ser una excelente manera de
encontrar a otras personas. Reúnen a personas de diferentes países y las
reúnen en un área común. Una parte de las razones que hicieron que
cambiara a encuentros en persona fue por las buenas experiencias que
tuve con estas personas en salas IRC (Internet Relay Chat). Disfruté de
la compañía de estas personas a través de interacciones por la red y me
sentí cómodo cuando las encontré en persona.</p>
<p>Los bajos requisitos de entrada para muchas comunidades en línea,
puede permitirnos ver de qué temas se trata en la comunidad. ¿Cuáles son
sus prioridades? ¿Son amables con las personas que están comenzando?
¿Tienen un patrón de conducta de ayuda a personas como nosotros o
tienden a ofenderlas? ¿Tienen miembros que nutren a sus compañeros o se
están interrumpiendo unos a otros?</p>
<p>Desconozco si hay una estrategia óptima para determinar si una
comunidad es útil o dañina. Requiere esfuerzo seguir una comunidad y
formarse una idea de quiénes son. Desgasta emocionalmente el ponernos en
situaciones donde somos vulnerables, para comprobar si otras personas
son respetuosas con nosotros. Las comunidades están formadas por
personas y las personas somos criaturas inconstantes e irracionales. Lo
que puede ser una gran comunidad para una persona puede ser un entorno
tóxico para otra. Aunque no tengo una estrategia, tengo algunas ideas de
los elementos clave que forman una comunidad.</p>
<h2 data-number="4.4" id="cosas-que-buscar-en-una-buena-comunidad"><span
class="header-section-number">4.4</span> Cosas que buscar en una buena
comunidad</h2>
<p>Hay una serie de características que yo buscaría en una comunidad.
Aunque esta no es una lista definitiva de todas las cosas que hacen una
buena comunidad, ofrece un listado de las pautas que creo que son
importantes:</p>
<ul>
<li><strong>Código de conducta</strong>: Las buenas comunidades tienen
pautas para las cosas que la comunidad aceptará, tolerará o impedirá.
Debe ser visible para todos los miembros de la comunidad, y cada miembro
de la comunidad debe ser responsable de esas pautas. También se deben
hacer cumplir. Si observas situaciones en las que el código de conducta
se aplica de manera colectiva contra ciertos miembros, debes tener
cuidado de permanecer dentro de esa comunidad.</li>
<li><strong>Moderadores</strong>: Se necesita que haya una persona (o un
grupo de personas) en la comunidad que pueda calmar las situaciones de
conflicto y aplicar castigos significativos cuando las personas se
extralimiten. Los moderadores deberían ser imparciales y consecuentes
con sus decisiones. Deberían demostrar que también siguen el mismo
código de conducta con el ejemplo de sus acciones en la comunidad. Un
buen moderador debería estar siempre disponible, pero no ser
autoritario. Deberías sentirte cómodo con la presencia de un moderador y
sentirte libre de preguntar a los moderadores si tienes alguna duda
sobre la comunidad.</li>
<li><strong>Espacios para preguntas y pautas para realizar buenas
preguntas</strong>: Debería existir un lugar donde las personas puedan
preguntar cuestiones relacionadas con la comunidad. Las personas
deberían sentirse seguras al preguntar sobre el tema y la comunidad
necesita ser clara sobre lo que considera una pregunta apropiada e
idónea. ¿Es el sitio adecuado para preguntas de recién llegados? Si no
lo es, ¿se podría crear un sitio así? ¿Qué clases de preguntas estaría
la comunidad feliz de responder y qué tipos de preguntas molestarían a
la comunidad? Esto necesita estar claramente definido para que las
personas recién llegadas puedan hacerse una idea de qué será bienvenido
por la comunidad y qué no tolerará.</li>
<li><strong>Disfrutar</strong>: ¿Disfrutan las personas que forman la
comunidad al discutir las cosas? ¿Cual es el tono de las conversaciones?
¿Interactúan las personas de una manera positiva con otras o recurren a
los insultos y las faltas de respeto? ¿Se celebran las nuevas preguntas
planteadas o son rechazadas e ignoradas? Si no se disfruta al ser parte
de la comunidad, entonces se reducirá el número de personas que se
queden en ella.</li>
<li><strong>Compasión y empatía</strong>: ¿Permite la comunidad que la
gente cometa errores? Cuando algo sale mal, ¿la comunidad trata de
ayudar? ¿La comunidad recuerda cómo era ser principiante y actúa con
compasión, o espera que todos tengan más experiencia antes de
participar?</li>
<li><strong>Amabilidad</strong>: Este es el factor más importante, ¿la
comunidad se comporta de una manera amable con los demás o se divide en
facciones y tratan de reducirse entre sí? ¿Ven a la gente nueva como
amigos o como extraños que deben probarse a sí mismos? Esto se relaciona
con la compasión y la empatía anteriores, pero tendemos a ver actos de
bondad antes de ver la compasión y la empatía. La amabilidad se
manifiesta cuando los miembros de la comunidad comprenden que las
personas no sepan todo de inmediato y actúan con amabilidad en lugar de
adoptar un enfoque severo. Les hacen saber a las personas que ellos
también han tenido problemas y sugieren formas de trabajar juntos para
suavizar las cosas para las próximas personas que puedan experimentar el
mismo problema. Actúan de una manera que no antepone su ego y, en
cambio, se comportan como si les hubieran dado un regalo que es mejor
compartir con los demás.</li>
</ul>
<p>Hablaremos más sobre la amabilidad en próximos capítulos.</p>
<p>Estos son solo unos ejemplos de lo que he encontrado en buenas
comunidades. No dudes en añadir más a esta lista cuando tu propia
experiencia vaya creciendo y házmelo saber, así podré actualizar esta
lista para futuros lectores.</p>
<h1 data-number="5" id="un-día-de-viaje"><span
class="header-section-number">5</span> Un día de viaje</h1>
<h2 data-number="5.1" id="cabalgando-hasta-el-amanecer"><span
class="header-section-number">5.1</span> Cabalgando hasta el
amanecer</h2>
<p>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 <em>scripts</em> 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 de 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 incumplidos, que otras empresas publiquen su programa en el
mercado antes que nosotros, u otros casos en los que perdemos una
oportunidad. Estamos constantemente preocupados por no estar haciendo lo
suficiente para tener éxito.</p>
<p>Hemos escuchado historias de desarrolladores que se han despertado
frente a sus equipos por un extraño pitido provocado porque se han
quedado dormidos encima del teclado y la repetición automática de
caracteres ya no podía gestionar más texto por que sus caras estaban
apoyadas en las teclas. ¿No es así como deberían trabajar los
desarrolladores?</p>
<p>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.</p>
<p>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
importar el coste personal. Nuestros cerebros no tienen la habilidad de
descansar, relajarse y cargarse de energía. Nuestras mentes están
ocupadas y exhaustas para procesar lo que aprendimos y guardar ese
conocimiento a largo plazo. Cuando estamos exhaustos 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 preocupados porque no estamos haciendo lo necesario mientras
que nuestras mentes gritan un “¡suficiente!” de extenuación. Este
círculo vicioso de miedo y extenuación puede llevarnos a un vórtice de
agotamiento, depresión y el deseo de dejar la programación para
siempre.</p>
<p>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 en el suministro de energía para una máquina compleja
(nuestro cuerpo y mente) en la que el fabricante (todavía) 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 más, hasta el
final del día. Ese es el nivel de conciencia que debemos tener sobre
nosotros mismos.</p>
<p>¿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”?</p>
<h2 data-number="5.2" id="luces-fuera"><span
class="header-section-number">5.2</span> Luces fuera</h2>
<p>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 programación.</p>
<p>Esto puede ser complicado si sentimos que nos estamos retrasando en
nuestro 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?</p>
<p>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 cuando nos
comparamos con otros programadores que parece que son súper 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 se toman algún momento
libre lejos de sus ordenadores.</p>
<p>Podemos reconocer que tenemos sentimientos de querer esforzarnos para
seguir aprendiendo y haciendo cosas. Podemos notar nuestros sentimientos
cuando pensamos “solo una línea de código más antes de acostarnos” o
convencernos a nosotros mismos pensando: “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é incluso nos esforzamos
más allá del agotamiento.</p>
<p>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.</p>
<p>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 de cuándo estamos cansados y necesitamos descansar. No podemos
convertirnos en otras personas, tenemos que trabajar con quienes somos y
lo que somos.</p>
<p>Nuestros cuerpos necesitan tiempos de descanso para poder ser más
efectivos. Necesitamos momentos donde podamos apartarnos del teclado 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 le 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.</p>
<h2 data-number="5.3" id="hacer-un-descanso"><span
class="header-section-number">5.3</span> Hacer un descanso</h2>
<p>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 a otra área diferente de donde estés trabajando. 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 tu
mente se concentre en un nuevo contexto y una nueva situación.</p>
<p>Esto puede ser complicado en una oficina donde se espera de manera
implícita que las personas deben permanecer en su espacio de trabajo
para ser productivas. 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?</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>Tendrás que experimentar con algunos de estos ejemplos para
determinar qué te funciona a ti. Como mínimo querrás que tu mente sienta
que no necesita estar 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.</p>
<p>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.</p>
<h2 data-number="5.4" id="pensamiento-productivo"><span
class="header-section-number">5.4</span> Pensamiento productivo</h2>
<p>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. En el mismo día tenemos diferentes niveles
disponibles de energía y enfoque mental. Depende de nosotros ser
conscientes de estos niveles y comprender cual podría ser nuestra
productividad para el día.</p>
<p>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.</p>
<p>Ponemos mucho énfasis diariamente en completar tareas y cumplir
plazos. Este énfasis puede crearnos fuertes vínculos con la terminació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.</p>
<p>Es mejor para nosotros el eliminar los plazos cuando sea posible. No
podremos eliminar los externos en los cuales los compañeros están
esperando nuestras contribuciones (aunque es posible volver a negociar
estos plazos si no son muy importantes) pero podemos dejar de lado el
deseo de conseguir esos niveles arbitrarios de productividad y esos
plazos arbitrarios.</p>
<p>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, pero tambié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.</p>
<p>Un truco que me ha ayudado es crear pequeños espacios de enfoque
concentrado. Este truco se describe en la próxima sección.</p>
<h2 data-number="5.5" id="contenedores"><span
class="header-section-number">5.5</span> Contenedores</h2>
<p>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 contenedor de enfoque cronometrado empiezo escogiendo en qué me
centraré durante el tiempo que durará ese contenedor. 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
durante resto del tiempo que dure el cronómetro. He tenido buenos
resultados usando 10 minutos pero sesiones de menos tiempo con 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 de próximas acciones y después me
tomo un descanso rápido (unos 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 “únicamente 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 sea cuando termine el contenedor.</p>
<p>Podemos utilizar estos contenedores para vencer nuestros deseos de
realizar múltiples tareas al mismo tiempo. 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 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 contenedor de enfoque nuevo.</p>
<p>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 momento por nuestro
progreso, pero nos permitimos momentos donde poder revisar nuestro
progreso y anotar cuánto 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 todo lo ininterrumpido que podamos
gestionar) que nos damos. Nos hacemos un gran favor al cerrar otros
programas, desactivar las notificaciones y darle a esta tarea toda la
atención que merece.</p>
<p>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
preocuparnos sobre 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.</p>
<p>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 reservar ese tiempo. 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.</p>
<h2 data-number="5.6" id="distracciones"><span
class="header-section-number">5.6</span> Distracciones</h2>
<p>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 reclama 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.</p>
<p>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 determinamos 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) en el 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.</p>
<p>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.</p>
<p>No tengo buenas noticias para ti si la cultura en la que trabajas
demanda tu atención todo el tiempo. Lo mejor que puedo ofrecer es un
sucedáneo de contenedor que al menos te pueda ofrecer algunos periodos
de concentración sin distracciones. Si te sientes siempre en tensión
porque algo podría ocurrir en cualquier momento, continuarás siendo
menos efectivo a diferencia de si pudieras silenciar el mundo por un
momento. También te reto a examinar si esa sensación es realmente cierta
¿estás siendo constantemente siendo acechado por interrupciones? Probar
esa teoría puede ser una buena práctica. Mantén un registro (ya sea en
una hoja de papel, un archivo de texto, una hoja de cálculo o una base
de datos, eso depende de tus gustos) de cuando hiciste un contenedor de
atención y si ese contenedor fue interrumpido o no. Si al final
encuentras que está siendo más veces interrumpido que no, entonces
necesitas determinar qué es lo que está causando las interrupciones y
evaluar si es algo que puedes controlar. Hay muchas maneras de manejar y
minimizar las distracciones en el lugar de trabajo en las que no voy a
entrar aquí, pero ser consciente de las distracciones y determinar de
dónde vienen será la clave para saber cómo mitigarlas en el futuro.</p>
<p>Se también consciente de las distracciones auto impuestas que has
añadido a tu vida. ¿Necesitas la notificación inmediata de que a alguien
le ha gustado algo que compartiste? ¿Es la anécdota tan divertida como
para cambiar tu contexto actual para así poder compartirla con tus
amigos o colegas? ¿Realmente necesitas algo que emerja de repente en tu
campo visual, para saber que tu reproductor de música ha cambiado de
canción? ¿Estarías dispuesto a sacrificar tu atención y tu flujo de
trabajo en el día a día porque un programa detectó un cambio en tu
entorno, independientemente de la importancia de ese cambio?</p>
<p>Añadimos estas distracciones en nuestras vidas porque nos preocupa
que nos perdamos algo importante. Los programas también vienen
configurados con sus notificaciones activadas, así el usuario puede
recordar el estado del programa todo el tiempo. Quizás es útil, pero
para mí es muy molesto. En mi vida laboral me he sentado en escritorios
de otras personas y me he sorprendido por el número de notificaciones
que recibían en el periodo que estuve allí (en un lapso de diez minutos
o incluso menos). He visto a personas interrumpir su línea actual de
pensamiento porque una notificación de un mensaje de una cosa que nada
tenía que ver con la tarea actual que desarrollaban les distraía. ¿Qué
pasó con el pensamiento original? Tienen que regresar mentalmente a él y
recordar dónde lo habían dejado, normalmente eso conlleva un gran
esfuerzo mental.</p>
<p>Te reto a desactivar todas las notificaciones que puedas y disfrutar
de la experiencia que es estar sin ellas. Eso puede ser tan simple como
cerrar una aplicación cuando has acabado con ella o puede ser tan
complejo como cambiar la configuración de una aplicación para que no te
notifique cuando llegue un mensaje. Necesitarás probar este método y ver
qué es lo que mejor funciona con tus necesidades y concentración. Una
buena regla general es “¿qué es lo que comprueba esta cosa que es lo
suficientemente importante como para dejar mi importante trabajo y
concentrarme en esta cosa?”. Si puedes valorar tus notificaciones para
que solo las notificaciones más críticas te lleguen en el momento
adecuado entonces disfrutarás de un mayor relax y concentración en tu
trabajo. Así no tendrás que analizar la notificación para determinar si
lo que estás viendo es importante o no.</p>
<p>Una de las razones que he escuchado de compañeros para mantener
activas sus notificaciones es que sienten que podrían recibir algo que
requiriera una respuesta inmediata. Hemos creado una cultura donde
sentimos la necesidad de responder a los mensajes en el momento que los
recibimos. Me atrevería a decir que la mayoría de los mensajes que
recibes durante el día no requieren de la atención que les estás dando y
seguro que tampoco el nivel de atención que justifique la interrupción
que realizas para verlos y responderlos. Sería mejor programar varios
periodos del día en el que no hagas otra cosa que comprobar y responder
a los mensajes. Organiza esto con la frecuencia más baja como puedas.
Algunas personas recomiendan 2 o 3 veces al día, pero incluso
estableciendo un límite donde compruebes tus mensajes una vez a la hora,
puedes conseguir una gran mejora frente a la cantidad de veces que
actualmente compruebas tus mensajes. Necesitarás judgar por ti mismo la
frecuencia con la que comprobar tus mensajes basándote en tus
necesidades y en tu ambiente de trabajo. También considera la persona a
la que estás respondiendo. ¿Tiene sentido darle a esta persona una
respuesta rápida y semi-pensada, o este mensaje requiere más tiempo para
darle vueltas en tu mente antes de responder? Darte tiempo para pensar
en la respuesta puede brindarte información adicional sobre un problema
que podría no ser evidente en el momento. Esto podría significar la
diferencia entre una respuesta bien pensada frente a una avalancha de
tormenta de ideas de ida y vuelta a medio pensar utilizando tu
aplicación de mensajería. Responder a todo inmediatamente es muy
estresante y requiere una gran cantidad de atención que podría
utilizarse mejor en tu trabajo de programación.</p>
<p>Puede parecer desafiante y extraño vivir sin notificaciones y sin la
necesidad de responder a cada mensaje y notificación, pero nuestra
atención es finita y limitada. Mantener el enfoque a lo largo del día es
desafiante y estresante. Si podemos limitar la cantidad de distracciones
que recibimos a lo largo del día, nos daremos la libertad de no tener
que trabajar tanto para mantener nuestra atención en sintonía con
nuestras tareas de programación. Podemos decir “ahora no” a nuestras
distracciones y resolverlas en un momento más apropiado.</p>
<h1 data-number="6" id="el-mapa-no-es-el-territorio"><span
class="header-section-number">6</span> El mapa no es el territorio</h1>
<h2 data-number="6.1"
id="el-panorama-cambiante-de-la-programación"><span
class="header-section-number">6.1</span> El panorama cambiante de la
programación</h2>
<p>La única constante en el campo de la programación, es que siempre
está en constante cambio. Los lenguajes de programación llegan a tener
mucho renombre y después desaparecen con el paso del tiempo. Lo que una
vez fue tomado como un hecho ahora está considerado obsoleto (o incluso
“considerado dañino” como señalan algunos ensayos).</p>
<p>Cuando me gradué en la universidad, aprendí Pascal, Modula2 y Ada.
Desafortunadamente esos lenguajes empezaron a decaer en popularidad en
favor de C. Cuando comencé en mi primer trabajo de programación como
“profesional”, Perl era el lenguaje de elección (en parte porque Perl
podía ser transformado de manera sencilla en scripts CGI de la época y
era considerado superior a herramientas para realizar scripts como
<code>awk</code> y los tradicionales scripts para la shell). En el
momento de escribir esto estoy utilizando Python como mi lenguaje de
desarrollo principal y preveo que tendré que buscar otros lenguajes de
programación para expandir mi carrera como programador.</p>
<p>Programar requiere flexibilidad. Es difícil aprender solo una manera
de hacer las cosas y mantener eso de manera relevante durante 20 años.
Recuerda cual era la tecnología actual hace 20 años y no tendrás ninguna
duda en darte cuenta que las cosas eran bastante diferentes entonces. Si
quieres poner en práctica un ejercicio divertido, busca artículos
describiendo la tecnología puntera de hace 20 años y ver en ellos cuanto
de aquello reconoces.</p>
<h2 data-number="6.2" id="aprender-a-aprender"><span
class="header-section-number">6.2</span> Aprender a aprender</h2>
<p>Aprender metodologías y tecnologías específicas no es una buena
estrategia a largo plazo para los programadores. Es más recomendable si
aprendemos a aprender y, lo que es más importante, cómo aprendemos
nosotros mismos. Eso suena simple: una vez que hayamos descifrado cómo
aprender de manera efectiva, seremos programadores efectivos.
Desafortunadamente, no existe una manera infalible de aprender que
funcione para todas las personas. Personas diferentes, aprenden de
maneras diferentes. Todos tenemos estilos de aprendizaje que funcionan
mejor cuando se enfatizan ciertas cosas. Algunas personas aprenden mejor
en el aula de una clase, mientras que otras aprenden mejor con el
estudio auto dirigido (libros, grabaciones de vídeo, etc.). Algunas
pueden leer un libro y entender perfectamente la materia, mientras que
otras pueden necesitar enfoques más visuales. Si tienes el lujo de poder
probar varias metodologías diferentes para aprender, te animo a que uses
todas las que puedas para descubrir cuál funciona mejor en tu caso.
Comprender lo que funciona para ti, será clave para ayudarte a progresar
y crecer.</p>
<p>He encontrado que algunos principios sencillos funcionan mejor en mi
caso. El primero es la repetición. Aprendo mejor cuando hago algo de
manera diaria, una y otra vez, en pequeñas dosis. La segunda manera es
teniendo una pequeña meta que pueda conseguir. Así que para mí tener una
práctica diaria en un proyecto donde pueda trabajar y conseguir un
objetivo es lo que mejor me funciona. Cuando estaba aprendiendo Python
me uní a la PyWeek, una competición de una semana de duración de
programación de un juego, donde el tema a tratar se anuncia al comienzo
y toda la programación transcurre en una semana. Durante esa semana
entera encontré tiempo para completar mi juego y al final de la semana
había aprendido más sobre Pygame (la biblioteca que utilicé para mi
juego) y Python que lo que había conseguido en semanas anteriores al
PyWeek. Realizar una semana de duración de esta <em>game jam</em> (como
lo llaman) es un poco extremista, pero me dio un objetivo claro (un
juego funcional completo) y un tiempo dedicado para conseguirlo (una
semana). Con el paso del tiempo he aprendido más sobre Python con varios
proyectos (tanto profesionales como personales) que tenían una práctica
diaria y objetivos claramente definidos.</p>
<p>Necesitarás experimentar para ver qué es lo que mejor funciona en tu
caso. El principio que subyace es que el proceso de aprender debería ser
algo que tu puedas utilizar para cualquier lenguaje o concepto en
programación. También debe ofrecer la menor cantidad de resistencia a su
aprendizaje. Tu capacidad para aprender y adaptarte será vital para tu
experiencia como programador, así que entender tu propio proceso de
aprendizaje y qué funciona mejor en tu caso te ayudará en este
proceso.</p>
<p>Como mínimo, reserva 10 minutos al día para un contenedor (consulta
el capítulo anterior) para una lectura y el aprendizaje enfocados. Hay
mucho que aprender en programación y crear un hábito de aprendizaje te
ayudará a mantenerte al día. Recuerda, sin embargo, mantener tu
aprendizaje contenido en pequeños fragmentos. Mucha información puede
abrumarte y hacerte pensar que no puedes aprenderlo todo. Tienes razón,
no puedes aprenderlo todo de una sola vez. Si alguien te dijera que
bebieras uno de los Grandes Lagos de una sola vez, sería difícil
completar la tarea (nota: ¡no intentes esto!). Sin embargo, si llenaras
un vaso de agua varias veces al día de uno de los Grandes Lagos y lo
bebieras (10 minutos cada vez), comenzarías a hacer una mella apreciable
en la reducción de ese lago a lo largo de tu vida. (Claro, puede que no
parezca mucho desde el exterior, pero ese es el cruce donde la realidad
y las metáforas se rompen).</p>
<p>Cada día tienes una oportunidad de aprender sobre más sobre
ordenadores y su programación. Realizar una pequeña parte cada día para
aprender un poco más, te ayudará en tu viaje.</p>
<h2 data-number="6.3" id="cómo-escoger-qué-aprender"><span
class="header-section-number">6.3</span> Cómo escoger qué aprender</h2>
<p>Hay muchas oportunidades para aprender, ya sea mediante libros,
tutoriales, vídeos o cursos a distancia con tu ordenador. También hay
una gran variedad de temas sobre los que aprender. ¿Cómo decides qué es
lo más importante para aprender? ¿Cómo gestionas lo que estás
aprendiendo? ¿Cómo conseguir evitar sentirse abrumado con las opciones
disponibles?</p>
<p>Esto nos vuelve al tema de centrarse en una cosa cada vez y entender
cómo aprendes de una manera eficiente. Esta retroalimentación te ayudará
a decidir qué será lo próximo a aprender. Una manera puede ser pensando
en las cosas que más te apasionan ahora mismo, ¿qué te motiva en este
momento? Si hay algo por lo que estás ansioso por aprender empieza por
eso. Si tienes múltiples cosas que te apasionan o te interesan entonces
colócalos en una lista y observa si estás más interesado en unos temas
que en otros. Si aún tienes problemas para decidir de los temas de la
lista entonces escoge uno al azar (lanza un dado o crea un generador de
números aleatorios para seleccionar uno, eso podría ser en sí mismo un
proyecto).</p>
<p>Si tienes problemas para pensar en algo para aprender y estás
luchando para encontrar un elemento que te resulte interesante, entonces
date permiso para navegar por la red y encontrar qué hay disponible.
Observa las conversaciones de otros programadores y descubre de qué
están hablando. Acude a una reunión de programadores para seguir las
discusiones de lo que están hablando. O, si realmente estás atascado,
explora algunas listas de ofertas de trabajos para averiguar qué es lo
que buscan las personas que ofrecen trabajo y observa si algo de eso te
despierta algún interés.</p>
<p>Esto no trata de escoger lo más útil o la cosa más importante, aunque
tu situación actual puede hacer que algunos temas tengan más relevancia
sobre otros, se trata de averiguar qué capta tu atención y dónde
enfocarte. No te preocupes con realizar la elección perfecta que te
proporcionará tu siguiente trabajo o impulsará tu carrera. Este
ejercicio trata sobre hacer una elección para aprender algo interesante
y que te enganche el tiempo suficiente para aprender más sobre ello.</p>
<p>Una vez que hayas escogido qué quieres aprender es el momento de
centrarte en aprenderlo. Si tienes una metodología preferida (libros,
vídeos, tutoriales, clases, etc) entonces dedica un tiempo (no más de
una hora) a buscar qué recursos hay disponibles. Algunos temas tienen
recursos disponibles para los principiantes que enumeran las cosas que
la comunidad cree que son útiles para los programadores que están
empezando, mientras que para otros puede ser necesario preguntar a la
comunidad por dónde comenzar. A menudo algo tan simple como un tutorial
puede ser una buena manera de comenzar con este ejercicio.</p>
<p>¡Si puedes encontrar algunos recursos en un corto periodo de tiempo
será genial! Comienza tu proceso de aprendizaje con esos recursos. No te
preocupes si son los recursos adecuados o quizás te lleven por un camino
equivocado, simplemente comienza con ellos y ya los evaluarás más tarde.
Por ahora es más interesante simplemente comenzar.</p>
<p>Una de las trampas en la que soy culpable de caer, es en tratar de
encontrar los mejores recursos para aprender un tema. Paso horas
buscando el libro perfecto, los vídeos adecuados, los cursos idóneos, lo
que sea, trato de encontrar los mejores materiales disponibles. Quiero
reducir la cantidad de comienzos en falso cuando aprendo de un tema.
Esto que parece una una búsqueda correcta (después de todo, ¿por qué no
ibas a querer los mejores materiales que haya disponibles?) es una
trampa que puede llevarte a pasar más tiempo buscando sobre cómo estás
aprendiendo en vez de estar ya aprendiendo. Incluso peor, si el material
comienza a confundirte (lo que es altamente probable cuando estás
aprendiendo algo nuevo) pasarás tu tiempo de aprendizaje pensando si
escogiste la decisión adecuada escogiendo este material. Te preguntarás
si escogiste el material idóneo y continuarás buscando el mejor material
(quizás esas buenas y excelentes críticas realmente no sabían después de
todo de lo que estaban hablando). Esto disminuye tu habilidad para
aprende sobre el tema porque estás más enfocado en tratar de discernir
la calidad de lo enseñado y no en dedicar tiempo en la enseñanza
actual.</p>
<p>Después de unos días de sesiones prácticas date la oportunidad de
comprobar y ver cómo estás aprendiendo. ¿Te sientes atraído o no estás
disfrutando de esto? Si no te sientes atraído (el material no está
organizado, el instructor es confuso, los ejemplos no funcionan, el
material asume que ya estás familiarizado con otro tema, etc) entonces
date permiso para buscar un material mejor o un tema diferente que te
interese más. Incluso si la experiencia de aprendizaje no fue óptima,
tendrás una mejor idea de lo que buscar cuando escojas algo nuevo.
Tendrás un conocimiento de cuales son tus lagunas con este tema y
tendrás un mejor conocimiento de lo que estás buscando en los materiales
de aprendizaje.</p>
<p>Si encuentras que el tema que estás tratando de aprender ya no te
interesa, date un momento para reflexionar sobre el motivo de esto. ¿Es
un tema complicado? ¿Te sientes preparado para ese tema? ¿Estás
actualmente sobrecargado con otros proyectos y te sientes cansado para
abordar este tema? A veces creemos que estamos preparados para aprender
sobre un tema, solo para darnos cuenta que hay algo más que necesitamos
saber antes de poder entender por completo ese tema. Está bien buscar
recursos adicionales y enfocarte en ellos antes de abordar este tema.
Simplemente se consciente de tus luchas y tu diálogo interno. Se honesto
contigo mismo sobre el motivo por el que quieres cambiar a algo
diferente. Obsérvate en la dificultad y se consciente si estás queriendo
huir porque es difícil o si realmente no estás preparado para ello o no
estás interesado en este tema. Observa si puedes ahondar más con la
dificultad y siente cuándo comienzas a sentirte sobrepasado por ella.
Date permiso para apegarte a la dificultad tanto como puedas y presta
atención a tus sentimientos e impulsos mientras practicas con ella.</p>
<p>Trata tu aprendizaje como un proceso iterativo, con periodos
regulares en los que comprobar tu progreso. Piensa en cómo te sientes
cuando estás aprendiendo. ¿Te sientes emocionado y comprometido o te
sientes cansado y retraído? ¿Procrastinas cuando piensas en este tema?
¿Cuando te centras en tu aprendizaje tu mente divaga? Se consciente de
estos sentimientos a medida que ocurren durante la sesión centrada y
reflexiona sobre ellos cuando pienses en tu proceso de aprendizaje. Más
tarde puedes reflexionar sobre estos sentimientos y ver los patrones en
tu proceso de aprendizaje. Si te sientes cansado mientras estás
aprendiendo podrías intentar cambiar cuando realizas tus sesiones de
aprendizaje. Quizás necesites dormir más o necesites encontrar otros
materiales que sean más estimulantes. Si te sientes abrumado quizás
necesites empezar con algo más básico antes de afrontar este proyecto
más difícil. Si estás confundido quizás haya alguien a quien puedas
plantearle preguntas para obtener más claridad sobre el tema. Estas
respuestas pueden no ser evidentes mientras estás en viviendo ese
momento (quizás estás muy ocupado sintiéndote frustrado para entender de
dónde viene esa frustración), pero con la práctica tendrás más recursos
para observar tus sentimientos. Cuando eres consciente de estos
sentimientos podrás usarlos para aprender cómo funciona tu mente y
entender qué necesita para mantenerte comprometido con tu
aprendizaje.</p>
<h2 data-number="6.4" id="resistencia-y-el-contenedor"><span
class="header-section-number">6.4</span> Resistencia y el
contenedor</h2>
<p>Cada vez que aprendemos cosas nuevas nos colocamos en un lugar
vulnerable e incómodo. Tomamos las cosas con las que estamos
familiarizados y las aplicamos a medida que nos adentramos en nuevos
territorios. Nos volvemos inseguros con el resultado, ¿será un éxito o
será un fracaso? ¿Será este tema difícil de aprender? ¿Nos ayudará o nos
perjudicará? ¿Hemos escogido la opción equivocada para aprender y eso
nos costará oportunidades a largo plazo?</p>
<p>La incomodidad y la incertidumbre son sin duda una parte del
aprendizaje, pero en vez de pensar en ellas como algo a ser evitado
pensemos en ellas como faros. Unas balizas que nos indica el camino y
nos iluminan cuando estamos en territorios desconocidos. Cuando nos
sentimos inseguros sobre lo que estamos haciendo, ese sentimiento
significa que estamos entrando en un nuevo territorio. En vez de
evitarlo o desear comodidad, podemos disfrutar por estar en un
territorio desconocido y sentir esas breves punzadas de miedo y duda.
Podemos decir: “Voy a aprender algo nuevo. Estoy asustado y no sé dónde
me llevará esto, pero está bien. Estoy dispuesto a ver a dónde lleva
esto y disfrutar del viaje.”</p>
<p>Estamos condicionados a pensar en lo desconocido como algo a lo que
temer. Estas emociones nos han sido útiles. Nos han impedido
aventurarnos demasiado de nuestra zona de confort y explorar lo
desconocido. Cuando vives en un bosque o en cuevas, lo desconocido puede
albergar todo tipo de peligros. Tiene sentido no provocar esos peligros
apareciendo delante de sus puertas. Pero programar no es lo mismo que
aventurarse en un bosque oscuro o asomarse a una cueva húmeda, programar
apenas conlleva la cantidad de peligro que le otorgamos. En vez de eso,
debemos darnos cuenta que no estamos en ningún peligro mortal. Nuestros
miedos simplemente nos están haciendo saber que estamos aventurándonos
en los territorios inexplorados de la ignorancia. Depende de nosotros
dar a conocer a nuestros miedos que esto está bien y que al explorar
estos territorios solo encontraremos conocimiento.</p>
<p>Steven Pressfield en <em>La guerra del arte</em> denominó a estos
sentimientos como “Resistencia”. Considera la Resistencia como una
especie de ser mitológico que vive en cada uno de nosotros para frustrar
los actos creativos. A medida que el trabajo progresa la Resistencia
aumenta la presión para detenernos introduciendo los sentimientos de
miedo y ansiedad que he mencionado anteriormente. Pienso en la
Resistencia como algo que también ocurre cuando estamos aprendiendo,
especialmente si estamos aprendiendo sobre herramientas que nos ayudan
en nuestras actividades creativas. Pressfield limitó su definición a las
personas creativas que estaban trabajando para finalizar un trabajo
creativo (libros, pinturas, juegos, etc.) pero yo estoy expandiendo su
definición al propio proceso de aprendizaje. En nuestro caso la
Resistencia aparece cuando estamos aprendiendo las herramientas que nos
ayudarán a ser más creativos. La Resistencia es lo que nos dice que no
somos suficientemente buenos para aprender esas cosas, o cuando estamos
inseguros sobre los beneficios que nos acarreará. Trata de mantenernos
seguros con lo que ya conocemos.</p>
<p>Este es el motivo por lo que el “contenedor focalizado” es tan
importante: nos da pequeñas dosis de incomodidad y dificultad en
porciones manejables. Podemos guiarnos a través de pequeñas cantidades
de incomodidad diarias y seguir aprendiendo a pesar de nuestra
incomodidad. Nos ayuda a trabajar a pesar de nuestra tendencia a evitar
y ocultar situaciones difíciles. Si nos centramos en una sola cosa cada
vez podemos mantenernos apartados de las distracciones sobre si esta es
o no la cosa en la que deberíamos estar trabajando. Lo que sea en lo que
estemos trabajando en este momento es exactamente en lo que deberíamos
estar trabajando. Cualquiera que sea el material de aprendizaje que
tengamos delante es lo que deberíamos estar aprendiendo. Podemos estar
seguros de saber que todo lo que estamos haciendo durante la duración
del contenedor es exactamente lo que debería de ser. Cuando finalice el
contenedor podemos volver a evaluar cómo fue y qué retos se presentan
por delante.</p>
<h2 data-number="6.5" id="trazado-de-objetivos-a-largo-plazo"><span
class="header-section-number">6.5</span> Trazado de objetivos a largo
plazo</h2>
<p>A medida que progresas en tu proceso de aprendizaje empezarás a ver
que muchas de las cosas que llamamos programación están interconectadas.
Los lenguajes de programación se prestan muchas cosas unos a otros y las
ideas que parecían nuevas e innovadoras tienen sus raíces en conceptos
que se remontan a los orígenes de la computación. En vez de disuadirnos,
esto debería animarnos a abrir las puertas de la programación
aprendiendo conceptos simples y transferibles. La pregunta es ¿cuales
son?</p>
<p>La respuesta más simple es “todos ellos”, pero eso es difícil de
satisfacer o imposible. Una respuesta menos descarada sería “los
suficientes para empezar a ver cómo surgen patrones” pero eso suena más
a una idea de perogrullo que a algo que podamos utilizar para comenzar a
realizar nuestras metas a largo plazo para el aprendizaje.</p>
<p>En vez de darte un consejo específico sobre qué conceptos te serán
más útiles en tu búsqueda de llegar a ser un programador mejor, voy a
sugerirte una técnica que podría ayudarte a identificar lo que podría
ayudarte.</p>
<p>Los lenguajes de programación mencionarán conceptos que comparten.
Cada vez que estés aprendiendo y veas una mención a alguno de estos
conceptos, haz una nota de ello y siguen enfocado en lo que estás
aprendiendo ahora. Cuando hayas completado el periodo de aprendizaje
diario, revisa la lista de estos otros conceptos y haz una búsqueda para
ver qué muestran. Si hay otras cosas que aparecen entonces escríbelas en
tu lista. Estos conceptos podrían no tener sentido en el momento pero
tener una lista disponible y a los que se refieran podría ayudarte a
hacer conexiones sobre programación que podrías no haber notado de otra
manera.</p>
<p>Cuando aprendí JavaScript me dí cuenta que alguien mencionaba que
JavaScript derivaba de otros lenguajes como Scheme. Scheme es un
lenguaje funcional basado en Lisp y que fue creado como lenguaje de
enseñanza para programación funcional y recursividad. Así que tomé un
pequeño rodeo para aprender Scheme, personalmente porque me era más
interesante que JavaScript. Llámalo “procrastinación activa”, si te
sientes benévolo. Lo que aprendí mientras aprendí Scheme, motivó mi
interés en otros lenguajes funcionales y la programación funcional. Esto
a cambio me ayudó a entender algunos paradigmas de la programación
funcional que se estaban convirtiendo muy populares en Python (listas de
comprensiones, lambdas, etc). Al tomar un breve rodeo en mi aprendizaje
de JavaScript aprendí más sobre toda una familia de lenguajes y ahora
siento que entiendo JavaScript y Python con una mayor claridad que
cuando empecé.</p>
<p>No estoy sugiriendo que todo el mundo debería seguir los pasos de la
“procrastinación activa” como hice yo (mientras escribo esto, todavía
estoy en el proceso de aprender JavaScript), pero ayuda el realizar
notas de los conceptos que vas encontrando y ahondar un poco más en
ellos.</p>
<p>Esta es una manera de trazar los objetivos del aprendizaje (darse
cuenta de las otras conexiones que aparecen mientras estás aprendiendo y
ser curioso sobre cómo interactúan entre ellas), pero quizás necesitas
una técnica diferente. Quizás estás bajo presión para aprender algo que
te mantenga en el mercado laboral o necesites adquirir algún
conocimiento para tu trabajo que necesita ser aprendido rápidamente.
¿Cómo trazas esas metas?</p>
<p>La presión de aprender rápidamente puede hacer que cualquier tarea
parezca insuperable, especialmente si no sabes cuál es la mejor manera
de proceder. Es posible que sientas la tentación de apresurarte en este
proceso y confiar en retener el conocimiento que has aprendido. Este
enfoque no conduce a la comprensión, conduce al estrés y al agotamiento.
El enfoque que estoy esbozando está diseñado para ayudarte a aprender
cómo aprender. La mejor forma de aprender algo rápidamente es entender
cómo encajan otros conceptos con lo que estás aprendiendo. Esto es
genial cuando tienes experiencia con muchos lenguajes y conceptos
diferentes, pero para aquellos que aún no tienen mucha experiencia, se
sentirán como si estuvieran tratando de empujar un elefante a través de
un pequeño embudo. Aquí es donde te ayudará practicar el aprendizaje
todos los días. Te ayudará a dividir los objetivos de aprendizaje más
grandes en partes más pequeñas y te ayudará a reconocer el miedo y la
incomodidad por lo que realmente son: el reconocimiento de que estás
expandiendo tus habilidades a un nuevo territorio.</p>
<p>Las metas a largo plazo son simplemente metas que deben ser divididas
en metas a corto plazo. Enfocarse en metas a corto plazo y permitirte
corregir el rumbo y seguir algunas conexiones cuando sea necesario.</p>
<h2 data-number="6.6" id="fracaso-y-aprendizaje"><span
class="header-section-number">6.6</span> Fracaso y aprendizaje</h2>
<p>Una de las cosas a las que tememos cuando estamos aprendiendo, es al
fracaso. Nos preocupamos porque no aprender el tema rápidamente o al
completo. Escogemos material que comienza de manera simple pero luego se
vuelve muy complejo, y luchamos por mantener el ritmo. Intentamos
escribir código de ejemplo en nuestros editores y nos encontramos
necesitando ayuda para que funcionen. No logramos comprender el material
y nos preguntamos si alguna vez aprenderemos lo que estamos tratando de
aprender.</p>
<p>El fracaso es parte del aprendizaje. Si ya conocieras la materia no
estarías aprendiendo.</p>
<p>Una de las razones para aprender practicando utilizando los
contenedores, es porque así nos damos esos breves momentos de fracaso y
repetición. La repetición es como mejoramos en cualquier cosa que
estemos aprendiendo. El fracaso nos permite corregir el curso de nuestro
aprendizaje para que podamos determinar la mejor manera de abordar esto
la próxima vez que hagamos un intento.</p>
<p>A menudo sentimos que el fracaso es algo que debemos evitar, pero
mientras estamos aprendiendo es inevitable. Nuestro proceso de
aprendizaje requiere que fallemos para mejorar en lo que estamos
aprendiendo. Ese es el objetivo del aprendizaje: volver a moldear
nuestros cerebros para que finalmente puedan comprender los conceptos
que estamos tratando de aprender.</p>
<p>Parte del aprendizaje es tener la mentalidad correcta para aprender.
En lugar de sentir que estás constantemente fallando y luchando por
mantenerte al día, es posible que desees abordarlo con una perspectiva
diferente. En lugar de pensar “No puedo hacer esto. Es demasiado
difícil”, acércate a ello con una mirada más curiosa “Todo esto es nuevo
para mí. Es por eso que estoy practicando para aprender esto”. Darte una
mentalidad más positiva te ayudará a evitar que te rindas cuando tengas
problemas con el material.</p>
<h2 data-number="6.7"
id="callejones-sin-salida-y-topografía-cambiante"><span
class="header-section-number">6.7</span> Callejones sin salida y
topografía cambiante</h2>
<p>A veces nos encontraremos a nosotros mismos aprendiendo algo que es
un callejón sin salida. Observamos nuestro progreso y no vemos una
mejora real. No encontramos el tema tan atractivo o excitante como
habíamos imaginado. Nos damos cuenta que lo que estamos aprendiendo es
un callejón sin salida evolutivo en el campo de la programación. ¿Ahora
qué?</p>
<p>Parte de nuestro proceso de aprendizaje es entender que nuestras
expectativas sobre cómo algo evolucionará pueden ser completamente
diferentes a cómo las cosas evolucionan de verdad. Visionamos toda clase
de recompensas y clichés que nunca llegan. ¿Significa eso que estamos en
un callejón sin salida? Yo creo que no. Podría suceder que lo que
esperábamos que íbamos a hacer con nuestro recién adquirido conocimiento
no está funcionando. Podríamos encontrar que nuestras expectativas sobre
lo rápido que íbamos a aprender el tema no se están cumpliendo. También
incluso podríamos esperar que nuestra carrera profesional se iba a ver
respaldada por el tema de aprendizaje, pero el mercado de trabajo aún no
ha reconocido nuestras recién adquiridas habilidades con ofertas de
trabajo o más dinero.</p>
<p>Nuestro compromiso está relacionado con nuestras expectativas. La
programación requiere una cierta cantidad de diversión y recompensa y si
no encontramos la experiencia divertida y gratificante entonces es poco
probable que queramos continuando seguir aprendiendo sobre ese tema.
Nuestras mentes están esperando algo más que nos atraiga y comenzamos a
anhelar cualquier otra cosa en vez de continuar con el proceso de
aprendizaje. Después de todo ¿no deberíamos estar disfrutando de esto?
Si no hay compromiso y no disfrutamos, entonces el aprendizaje se
convierte en una losa. Nos distraemos más fácilmente mientras estamos
intentando aprender y nuestras mentes se dispersan en vez de enfocarse
en nuestra experiencia de aprendizaje.</p>
<p>También está el problema de aprender sobre temas que son callejones
sin salida evolutivos. El mundo de la informática está lleno de restos
de tecnologías y metodologías que ya no son relevantes o están
consideradas “pasadas de moda”. Lo que una vez fue algo vanguardista
ahora está considerado moribundo y la comunidad creada alrededor de esa
tecnología o metodología se pasa a nuevas tecnologías o metodologías y
abandona su trabajo previo como un pueblo fantasma tecnológico. Cuando
mencionamos que estamos aprendiendo sobre esos temas, caen sobre
nosotros miradas curiosas de otros desarrolladores: “¿Por qué aprender
sobre eso? Hemos cambiado a esta otra cosa”. Es como si hubiéramos oído
que hay una fiesta y cuando llegamos a la fiesta, solo vemos a las
personas que están recogiendo la basura y desmontando la mesa y las
sillas. Nos sentimos como si nos hubiéramos perdido la mejor parte y nos
preguntamos si tiene sentido seguir hacia adelante o encontrar otro
tema.</p>
<p>Todo esto puede plantear sus propios problemas para aprender, pero
depende de nosotros tener una visión más crítica de por qué empezamos
todo este proceso de aprendizaje. ¿Qué nos trajo hasta aquí?</p>
<p>En cada uno de estos casos trajimos nuestras expectativas de cómo
progresaría el aprendizaje. Trajimos la expectativa de que siempre sería
divertido, atractivo y relevante. A veces nuestras expectativas de
aprendizaje se cumplen, pero cuando no lo hacen nos sentimos sin ánimos
y decepcionados.</p>
<p>En vez de sentirnos incómodos sobre cómo nuestras expectativas de
aprendizaje con esta tecnología o metodología no se están cumpliendo,
podemos adoptar un enfoque más consciente. Nos podemos observar a
nosotros mismos en nuestros momentos de aprendizaje y notar si estamos
tratando de aportar más que únicamente una atención focalizada al
contenedor de aprendizaje. Podemos ser conscientes de que aprender está
relacionado con cambiarnos a nosotros mismos y el cambio no siempre es
divertido, atrayente o placentero. Podemos dejar a un lado nuestras
expectativas y concentrarnos en el propio aprendizaje.</p>
<p>Eso no significa que no debamos ser conscientes de nuestros
sentimientos. Sin duda deberíamos reconocer sentimientos como
aburrimiento, ansiedad, desilusión, etc. Pero también deberíamos ser
conscientes de dónde se originan esos sentimientos. ¿Estamos realmente
aburridos o es solo nuestra mente tratando de decir que debemos parar
para así poder hacer algo más divertido? ¿No nos apasiona este material
porque no lo encontramos relevante o nos estamos simplemente
distrayendo? ¿Es esto realmente un callejón sin salida en nuestro
aprendizaje o simplemente nos estamos sintiendo atascados? Identifica
cuándo aparece el sentimiento y se curioso sobre lo que originó el
sentimiento. Nota cuándo obtienes ese sentimiento y dónde lo sientes más
en tu cuerpo. Permanece con ese sentimiento durante unos segundos y
sigue sintiéndolo. Después, continua tu trabajo. Mientra estás
trabajando sigue notando todos esos sentimientos que estás teniendo y
repite el proceso de permanecer y notar tus sentimientos. Cuando acabes
puedes reflexionar más sobre esos sentimientos y determinar qué indican
esos sentimientos. A través de este proceso puedes determinar qué está
causando estos sentimientos y notar si son solo una resistencia a
aprender nuevo material o un deseo de escaparse a las distracciones o a
algo más familiar.</p>
<p>Sin embargo, si te das cuenta que realmente no estás disfrutando
mientras estás aprendiendo sobre ese tema, si sientes que estás
invirtiendo más tiempo en auto convencerte de aprender que realmente
aprender, entonces necesitarás tener una discusión honesta contigo mismo
sobre porque estás aprendiendo sobre este tema. ¿Es el tema todavía
relevante para ti o el tema se ha vuelto irrelevante? ¿Estás aprendiendo
sobre esto por una obligación auto impuesta o impuesta por otras
personas y esa obligación todavía está presente? ¿Estás tratando de
aprender lo que sea porque estás preocupado por quedarte desfasado
personal o profesionalmente? Reflexiona sobre lo que te indujo a
comenzar a aprender sobre ese tema y determina si la situación ha
cambiado. Si alguien se te acercara y te preguntara si te gustaría
aprender sobre ese tema en los próximos días ¿lo considerarías?</p>
<p>Necesitarás reconsiderar tus verdaderas motivaciones para aprender
sobre el tema y ver si todavía encajan con lo que quieres hacer con tu
profesión como programador. También necesitas ser honesto contigo mismo
sobre el motivo por el que estás aprendiendo este tema y por qué es
importante para ti. Hay muchas cosas para aprender que son grandes
salidas profesionales, pero si no tienes interés sobre el tema o solo
estás aprendiendo “para que te contraten”, entonces tendrás más
dificultades para aprender el tema que si lo hubieras escogido por un
interés genuino por él. También tendrás que determinar si esto es
simplemente una resistencia al aprendizaje. Tu reto será determinar tus
verdaderos sentimientos sobre el tema y descubrir si verdaderamente has
perdido el interés o simplemente estás luchando contra él.</p>
<p>Ha habido muchos temas en mi carrera profesional que he tratado de
aprender, pero han sido muchos más sobre los que no he aprendido. Parte
de los motivos por los que no los he aprendido es porque el panorama
informático cambió mientras los estaba aprendiendo. En la escuela
aprendí el lenguaje Pascal. Era razonablemente bueno en ello, pero con
el tiempo mis conocimientos de Pascal fueron desapareciendo. Ahora mismo
existe una escasa demanda de programadores competentes de Pascal, así
que haber continuado desarrollando mis conocimientos de Pascal hubiera
sido simplemente para mi propio disfrute. Encuentro que hay otros temas
relacionados con la informática más interesantes, así que mis
conocimientos sobre Pascal permanecen inactivos. Si Pascal emergiera de
su estado moribundo, podría volver a retomar la decisión de reforzar mis
conocimientos sobre Pascal, pero por ahora estoy contento por haber
tomado la decisión correcta. En un punto de mi carrera profesional el
lenguaje Java saltó a la fama. Pasé muchas sesiones aprendiendo Java
hasta que me dí cuenta que no me gustaba el lenguaje. Me pareció muy
engorroso y las direcciones que tomó no fueron las que quería seguir.
Así que después de algunas reflexiones abandoné el aprendizaje de Java.
¿Fue todo esto tiempo perdido? Durante mis sesiones aprendí más sobre la
Programación Orientada a Objetos y cómo los objetos encajan entre ellos.
Aprendí más sobre recursividad mientras estaba tratando de resolver un
problema para uno de mis proyectos. Estos conocimientos trascienden a
Java, así que cuando empecé con Python fui capaz de transferir mis
conocimientos sobre cómo funcionan los objetos de Java a Pytnon. Utilicé
ese conocimiento para entender qué estaba haciendo Python y cómo era de
diferente respecto a Java. Si surge la necesidad puedo repensar mi
decisión de dejar de aprender Java y ver si esto me interesa otra
vez.</p>
<p>Está bien renunciar a aprender algo. Depende de ti determinar qué
quieres aprender y durante cuanto tiempo. Somos seres complejos y
nuestros intereses se transforman y cambian. También estamos en una
industria compleja de caprichos y tecnologías cambiantes. Lo que era
interesante y necesario al comienzo del año, podría convertirse en algo
carente de interés o innecesario al final del año. No debemos sentirnos
presionados para aprender sobre algo solo porque otras personas lo estén
aprendiendo o porque el mercado de trabajo parezca que lo requiera. Date
permiso para escuchar tus propios deseos. Si estos coinciden con lo que
quiere esta industria voluble ¡entonces genial! Ve y aprende todo lo que
puedas. Pero si no coinciden y te encuentras a ti mismo pasando semanas
tratando de encontrar la motivación necesaria para aprender sobre el
tema, entonces estás haciendo un flaco favor tanto a ti mismo como a tu
oficio. Deja que el tema repose inactivo durante un tiempo y date tiempo
para aprender sobre otra cosa. No tiene mucho sentido el sentirte
miserable por complacer a otras personas.</p>
<p>Si sientes la necesidad de retomar el tema más adelante entonces
permítete el regresar de nuevo a él. También deberías permitirte
regresar a ese tema sin el bagaje y las expectativas de los intentos
anteriores. El decir “ya intenté esto antes, así que veamos si funciona
esta vez” pone a tu mente a la expectativa de que volver a abandonar de
nuevo. Date permiso para acercarte a este tema como si estuvieras
experimentando la experiencia por primera vez, sin expectativas sobre
cómo resultará. Se amable contigo mismo y experimenta el tema de nuevo
pero desde tu perspectiva actual.</p>
<h2 data-number="6.8" id="acércate-con-curiosidad"><span
class="header-section-number">6.8</span> Acércate con curiosidad</h2>
<p>Cuando eramos principiantes nos acercamos a las computadoras con
curiosidad y entusiasmo. No sabíamos qué esperar y no teníamos ni idea
del tiempo que iba a llevar. Simplemente aprendimos tanto como pudimos y
tomamos todo al pie de la letra. A medida que continuamos aprendiendo
cambiamos nuestra curiosidad por certezas y nuestro entusiasmo por
expectativas. La emoción que sentíamos al aprender se convirtió en un
sentimiento de monotonía al sentir que siempre deberíamos estar
aprendiendo. Podemos volver a capturar aquel espíritu del principiante
viendo cada oportunidad de aprender como una nueva experiencia. Podemos
dejar de lado nuestras expectativas sobre cómo progresará nuestro
aprendizaje y en vez de eso acercarnos a cada sesión de aprendizaje con
curiosidad por lo que aprenderemos durante la sesión. Podemos reavivar
la llama que teníamos cuando eramos principiantes con infinitas
posibilidades. Esa llama nos guiará cuando atravesemos periodos de
incertidumbre.</p>
<p>Podemos volver a sentir pasión por aprender. Con cada contenedor de
enfoque podemos acercarnos a nuestro aprendizaje de una manera fresca,
sin nociones preconcebidas de cómo y cuándo acabará, y ser curiosos por
aquello que encontraremos cuando ahondemos más y más en lo que estamos
aprendiendo. Cada sesión nos acerca un paso más en nuestro viaje por
cerrar las lagunas de conocimiento. Hay mucho que explorar en nuestro
campo. Espero que siempre encuentres algo nuevo y excitante que te ayude
en tu viaje.</p>
<h1 data-number="7" id="la-lucha-interna"><span
class="header-section-number">7</span> La lucha interna</h1>
<h2 data-number="7.1" id="las-emociones-de-la-programación"><span
class="header-section-number">7.1</span> Las emociones de la
programación</h2>
<p>Existe el estereotipo del programador sin emociones sentado frente a
su equipo. El programador estereotipo se sienta, introduce líneas de
código de manera silenciosa, como si las transcribiera desde su memoria.
Si eres programador o has tenido contacto con programadores entonces
deberías saber que el estereotipo debería ser el de un compositor
frustrado. Por supuesto, nos sentamos delante de nuestros ordenadores en
largos periodos en silencio y concentrados, pero estamos muy lejos de no
tener emociones. Disfrutamos de las glorias de un código que funciona a
la perfección la primera vez. Fruncimos el ceño cuando el código
funciona mal. Pasamos de alegrarnos por la victoria a maldecir y
amenazar a la máquina con los puños apretados. Apretamos nuestros
dientes cuando los errores del código asoman. Pasamos de una emoción a
otra: exuberancia, alegría, miedo, furia, resentimiento, tristeza,
soledad, culpa o vergüenza.</p>
<p>No es extraño que al final del día estemos exhaustos.</p>
<p>Programar es un proceso agotador. No solo necesitamos mantener un
modelo mental del software en el que estamos trabajando, también tenemos
que mantener un modelo mental de cómo se debería comportar el software.
Creamos una historia de cómo funcionará este software y componemos una
imagen mental de cómo nos sentiremos cuando todo funcione como hemos lo
hemos imaginado. Creamos un vínculo emocional con el software. Nuestro
estado emocional puede reflejar lo que sentimos cuando estamos creando:
excitados, aburridos o estancados. Mantener una actitud positiva
respecto al software que no está a la altura de nuestras expectativas es
agotador. Esto combinado con nuestras propias inseguridades, miedos y
dudas nos da indicios cuando vemos que los programadores tienden a
agotarse: es una combinación de estrés y nuestra reacción emocional a
ese estrés.</p>
<h2 data-number="7.2" id="desgastes-emocionales"><span
class="header-section-number">7.2</span> Desgastes emocionales</h2>
<p>Hay muchos factores que pueden causarnos altibajos emocionales
mientras estamos programando. Estos son algunos que he anotado, tanto en
mi propio proceso de programación como hablando con otras personas sobre
su programación.</p>
<h3 data-number="7.2.1" id="propósito-y-utilidad"><span
class="header-section-number">7.2.1</span> Propósito y utilidad</h3>
<p>Si vemos con claridad dónde y cómo este código será útil, podemos
tener una idea de la motivación y el propósito. ¡Estamos trabajando en
algo que beneficiará a personas! Sabemos que las personas dependen de
nosotros, así que hacemos todo lo que este en nuestra mano para hacer
que el código funcione sin importar las trampas que nos esperen.
Aprovechamos los picos emocionales de autoestima y determinación para
ayudarnos a llegar a la culminación.</p>
<p>Lo opuesto también es cierto, por supuesto si no vemos el propósito
entonces nuestro trabajo parecerá sin sentido y en vano. Nos
esforzaremos para cumplir los plazos y sentiremos una sensación de vacío
en nuestros objetivos. A veces se trata de un proyecto que no está en
consonancia con nuestros propios propósitos y metas. Puede tratarse de
un proyecto mal gestionado en el que estamos forzados a trabajar debido
a presiones externas. Podríamos vernos obligados a cumplir plazos
arbitrarios que nunca acordamos cumplir. Podemos sentirnos frustrados si
no entendemos el fin último de cualquier proyecto en el que estemos
trabajando.</p>
<h3 data-number="7.2.2" id="motivación-frente-a-aburrimiento"><span
class="header-section-number">7.2.2</span> Motivación frente a
aburrimiento</h3>
<p>Ya hemos experimentado diferentes capas de motivación con nuestra
programación. Esos son los proyectos en los que no sentimos que sean una
tarea mientras estamos trabajando en ellos. Sentimos que estamos
aprendiendo algo en cada paso del camino. El mundo exterior desaparece
mientras estamos trabajando inmersos por completo en ese enfoque.
Perdemos la noción del tiempo y nos sentimos tanto desorientados como
renovados cuando el trabajo está completo.</p>
<p>Desafortunadamente lo más probable es que tengamos más experiencias
con lo opuesto a la motivación: el aburrimiento. El código base no nos
motiva en absoluto. El tema que estamos aprendiendo o en el que estamos
trabajando es simplemente una repetición de algo que ya sabíamos. Es un
suplicio comenzar. Todo lo que nos rodea en el mundo parece más
interesante y el tiempo parece ir más despacio durante todo el
proceso.</p>
<h3 data-number="7.2.3" id="despierto-frente-a-cansado"><span
class="header-section-number">7.2.3</span> Despierto frente a
cansado</h3>
<p>El sueño es un factor que influye mucho en cómo percibimos el mundo.
Dormir lo suficiente nos permite sentirnos renovados, despiertos e
inspirados. Necesitamos tener reservas de energía para enfrentarnos a
cualquier reto que se nos presente. Cuando no tenemos una calidad óptima
del sueño nos volvemos irritables y menos dispuestos a la participación.
Conservamos nuestros recursos lo mejor que podemos para que no se gasten
demasiado rápido. Buscamos estimulantes (café, distracciones y
similares) para mantenernos ocupados a lo largo del día.</p>
<h3 data-number="7.2.4" id="estado-mental"><span
class="header-section-number">7.2.4</span> Estado mental</h3>
<p>Uso el término “estado mental” en un sentido amplio para cubrir
cualquiera de nuestros sentimientos existentes y de bienestar mental
actual. Estos pueden variar desde sentimientos temporales de infelicidad
o melancolía a sentimientos complejos y serios como la depresión clínica
o trastorno de estrés postraumático. Nuestras mentes son máquinas
complejas que hacen lo que pueden para adaptarse a las diferentes
situaciones y entornos que se les presentan. En ocasiones esta
adaptación puede chocar con nuestros deseos de ser productivos y la
lucha que se produce entre nuestro estado mental y nuestros deseos puede
causar más desgaste emocional, incomodidad o desesperación.</p>
<p>Hay más motivos que pueden afectar a nuestras emociones pero estos
son en los que me gustaría centrarme ya que cubren un amplio espectro de
lo que acarrea dedicarnos a las tareas de aprendizaje y
programación.</p>
<h2 data-number="7.3"
id="ser-conscientes-de-nuestro-estado-emocional"><span
class="header-section-number">7.3</span> Ser conscientes de nuestro
estado emocional</h2>
<p>Ser conscientes de nuestro estado emocional (lo que estamos sintiendo
ahora mismo) nos da nuestra ubicación emocional actual. Podemos
ubicarnos dónde estamos y entender lo que nuestra mente nos está
diciendo. El darnos unos instantes para sentir verdaderamente en qué
estado emocional se encuentra nuestra mente nos ayudará a seguir
adelante.</p>
<p>Ten en cuenta que no estamos tratando de cambiar nuestro estado
emocional. No nos estamos intentando forzar a ser algo que no somos. Si
realmente estamos insatisfechos sobre dónde estamos o lo que estamos
haciendo, es más útil entender qué está causando esa infelicidad en vez
de tratar de disimular y prevenir esas emociones. Observar nuestras
emociones de manera clara nos permite reconocer qué las está causando.
Estar presente con esas emociones nos permite entender mejor nuestro
estado mental y de lo que somos capaces en el momento.</p>
<p>Puedes realizar esto dentro de un contexto de meditación de atención
plena, incluso mientras estás sentado en tu escritorio pensar: “durante
uno o dos minutos voy a estar sentado aquí y voy a explorar mi estado
emocional” debería ser suficiente. Ser conscientes de nuestras
emociones, entender qué son y profundizar en ellas hasta encontrar qué
las está causando puede ayudarnos a entender qué estamos sintiendo.</p>
<p>Quizás ya sabes qué está causando esas emociones y ese estado mental
y tienes miedo de explorarlas. Algunas emociones pueden sobrepasarnos y
hacernos sentir de formas que no queremos sentirnos. Esto es
especialmente cierto con emociones relacionadas con la ansiedad y el
trastorno de estrés postraumático. Realiza toda la exploración e
introspección que seas capaz, y se amable contigo mismo. Recuerda, no
estás tratando de cambiar las emociones, solo estás siendo consciente de
ellas. Es posible que descubras que tu insistencia amable en estas
emociones pueda llevarte a entenderlas mejor. Se tan osado como puedas
con estas emociones y si empiezan a abrumarte, entonces retrocede y deja
que desaparezcan los residuos de esas emociones antes de continuar.</p>
<h2 data-number="7.4" id="nuestra-historia"><span
class="header-section-number">7.4</span> Nuestra historia</h2>
<p>Cada uno de nosotros tenemos una historia que nos contamos a nosotros
mismos. Estas historias conforman nuestra percepción del mundo. Nos
contamos historias de cómo transcurrirá el día y cómo nos enfrentaremos
a el. Creamos un mundo a través de nuestras historias en el que somos el
protagonista central de la historia. Nos contamos historias como “el
trabajo que voy a comenzar será increíble” o “voy a trabajar en este
problema y cuando termine obtendré una solución genial”. Eso ocurre si
estamos siendo positivos con nosotros mismos. Cuando estamos siendo
negativos, nuestras historias tratan sobre que no somos lo
suficientemente buenos en lo que estamos haciendo y que seguramente
fallarás en el intento. Estas historias crean una trama compleja de
lucha, dolor y miseria donde todo lo malo del mundo es el resultado
directo de nuestras acciones.</p>
<p>Nuestras emociones ayudan a dar forma al tipo de historia que
contamos. Si nos sentimos muy bien, nos diremos a nosotros mismos que lo
que está por venir también será genial. Si nos sentimos deprimidos y
derrotados, nuestras historias reflejarán ese tono derrotado.</p>
<p>La verdad es que nuestra historia es simplemente eso: una historia.
Nuestras historias no son una garantía de cómo va a transcurrir el día.
Podemos contarnos una historia sobre que hoy será un día increíble y ver
con horror que cada interacción hace que nuestro día sea de todo menos
increíble. Por el contrario, nuestra historia podría ser que hoy será un
día terrible y que no conseguiremos nada, pero en vez de eso
experimentamos un día muy completo y productivo. La historia solo
acentúa lo que estamos experimentando, pero no puede predecir lo que
experimentaremos.</p>
<p>En vez de apegarnos a estas grandes historias podemos centrarnos más
en las cosas que amamos del momento presente. En vez de una historia en
la que vas a tener un día excepcional podrías centrarte en aspectos de
tu proyecto que te atraigan y esperar en que puedas pronto trabajar en
ellos. En vez de llenar tu día con historias de terror y fatalidad te
puedes centrar en las pequeñas victorias que ocurren a lo largo del día.
Incluso algo tan simple como “mi ordenador ha arrancado sin fallar”
puede ser una victoria. Una de esas pequeñas victorias podría ser el
establecer una intención en permanecer centrados y curiosos en los
próximos 10 minutos (el contenedor de enfoque de los capítulos
anteriores) y celebrarlos cuando logres esa intención. Puedes tener más
pequeñas victorias si te mantienes trabajando con esa intencionalidad a
lo largo del día. Nuestras pequeñas victorias no serán perfectas (quizás
tu ordenador está hoy insoportable), pero podemos usarlas para
recalibrar nuestro día en los próximos 10 minutos y seguir usándolas
para recalibrar durante todo el día, como cada contenedor focalizado se
convierte en otra pequeña victoria.</p>
<p>Darnos a nosotros mismos la capacidad de centrarnos más en el
presente y los próximos pasos que estamos a punto de dar nos brinda una
forma consciente de comprobarnos a nosotros mismos y nuestro progreso.
Podemos centrarnos en los aspectos positivos de lo que estamos haciendo
en vez de preocuparnos sobre cómo la realidad difiere de nuestras
propias historias. Podemos corregir el rumbo a lo largo del día y
mantener la tendencia hacia un día más positivo y productivo en vez de
preocuparnos sobre lo distantes que nos encontramos de nuestro día
ideal.</p>
<p>Esto requerirá práctica. Estamos acostumbrados a permitir que
nuestras historias dirijan nuestro día, pero con el paso del tiempo
seremos capaces de dividir nuestro días en partes más pequeñas donde
podamos ser plenamente conscientes de las historias que nos contamos a
nosotros mismos.</p>
<h2 data-number="7.5" id="la-conciencia-en-acción"><span
class="header-section-number">7.5</span> La conciencia en acción</h2>
<p>Vamos a suponer por un momento que es un día normal para nosotros.
Hoy nos sentimos ansiosos. Hemos recibido un informe de un error que
está relacionado con algo en lo que hemos estado trabajando. En informe
de error indica que el código que enviamos al proyecto a principios de
año no está funcionando y quizás nunca funcionó de la manera que
pensamos que funcionaba. Mientras leemos el informe de error nuestros
niveles de ansiedad se incrementan. Nuestro monólogo interior entra en
acción y empezamos a decirnos a nosotros mismos que nunca hemos estado
cerca de ser tan buenos como creíamos. No somos perfectos. Apestamos. No
hemos dormido la suficiente la noche anterior así que nuestras emociones
están a flor de piel. Nuestra mente se acelera y proyecta imágenes
pasadas de otras veces donde también cometimos fallos. Mientras seguimos
leyendo aflora nuestra sensación de temor. Nuestro monólogo interno se
convierte en una charla frenética: “¿Qué van a pensar ahora de mí? ¿Qué
piensan de mí ahora mismo? ¿Perderé mi trabajo por esto?</p>
<p>Antes de que hayamos acabado de leer el informe de error ya hemos
creado una historia. La historia comienza con nuestra propia ansiedad
por lo que pasará a lo largo del día. Entonces ocurre lo peor: obtenemos
algo que confirma nuestros miedos. La historias después nos presenta con
un montaje de nuestros fallos pasados y a eso añade este último informe
de error como punto culminante del montaje. Nuestra historia entonces
aumenta la presión por el aumento de la importancia de este informe de
error: no solo debemos solucionar lo que sea que esté roto, ahora
tendremos que limpiar nuestra reputación y comenzar a buscar trabajo. A
medida que la historia progresa en nuestras mentes, nos preguntamos si
volveremos a trabajar como programador de nuevo y sentimos cómo nuestra
carrera profesional como programador está acabada.</p>
<p>La historia que hemos creado es una historia terrible, pero estoy
seguro que te ves identificado con los factores que genera. Es una
historia que se basa en lo más profundo de nuestros propios sentimientos
de insuficiencia e inseguridad. Está alimentado por el miedo: el miedo a
arruinar tu reputación, miedo a que no confíen en ti y miedo al
fracaso.</p>
<p>El miedo es una de las emociones más poderosas que tenemos, pero no
es la única. Leer ese informe de error también puede hacer surgir otras
emociones como el dolor (pensamos que el código era bueno y ahora ese
sentimiento se ha esfumado). Incertidumbre (¿cómo vamos a solucionar el
problema?) y la ira (¿cómo hemos podido habernos engañado pesando que
esto funcionaba?) También podemos tener otros sentimientos: tristeza,
soledad y abandono. Nuestra autoestima podría verse afectada y podríamos
sentirnos desconectados de aquellas personas para las que trabajamos y
las personas con las que trabajamos.</p>
<p>Estar al tanto de estos sentimientos puede ayudarnos a analizar la
historia que nos estamos contando y cómo no coincidía con la realidad.
Estos sentimientos y la historia que nos contamos nos dan una
retroalimentación de cómo percibimos el mundo y el mundo que estamos
construyendo. Hacer una pausa por un momento para reconocer nuestros
sentimientos y entender de donde proceden nos da un entendimiento de lo
que nuestras emociones están tratando de decirnos.</p>
<p>Ahora te puedes relajar. El informe de error de este libro no es
real, pero tómate un momento para reconocer los sentimientos que sientes
cuando lees la sección anterior y nota dónde ha ido tu mente. Este es el
tipo de conciencia que estamos buscando tener.</p>
<h2 data-number="7.6" id="hallar-nuestros-sentimientos"><span
class="header-section-number">7.6</span> Hallar nuestros
sentimientos</h2>
<p>Nuestros sentimientos se manifiestan en nuestros cuerpos de muchas
maneras diferentes. El miedo puede sentirse como un nudo en el estómago
o una tensión en nuestro pecho. La ira puede hacer que apretemos las
mandíbulas o sentir nuestra cabeza más caliente de lo normal. La
tristeza la podemos sentir como un peso sobre nuestros hombros o
hacernos sentir cansados. Cuando notamos estos sentimientos podemos
hacer una pausa por un momento y simplemente sentarnos con nuestros
sentimientos mientras lo seguimos sintiendo.</p>
<p>Piensa en este ejercicio como si estuvieras escaneando tu cuerpo en
busca de la fuente de los sentimientos que estás sintiendo. Fíjate hacia
donde es atraída tu mente: opresión en el pecho, una opresión en tu
estómago, las mandíbulas apretadas o cualquier otro sentimiento que
estés sintiendo. Nota la sensación de ese sentimiento. Puedes ahondar
más y tratar de encontrar la causa primigenia del sentimiento pero por
ahora simplemente siente que existe. Siéntate por un momento y se más
curioso sobre cómo te sientes. Trata de notar otros atributos de ese
sentimiento: color, textura, intensidad o cualquier otro atributo que
estés experimentando. Deja que ese sentimiento exista, se amable con el.
Permite que exista sin juzgarlo. Dale espacio. Sobre todo no trates de
luchar contra el sentimiento o desees que termine, simplemente siéntelo.
De manera eventual puede que el sentimiento vaya disminuyendo, pero por
ahora solo ten conciencia de que tienes ese sentimiento y que vas a ser
curioso sobre él.</p>
<p>Algunos sentimientos y emociones son más dolorosas o traumáticas que
otras. Dales espacio y permítete tener curiosidad sobre ellas mientras
puedas. Si notas que tu mente empieza a sentir pánico u otra sensación
que te desborde debido a este sentimiento, entonces deberías dejar de
notarlos antes de que te superen. Recuerda que esto son emociones y que
esas emociones son parte de ti. Tanto tu como tus emociones trabajáis
juntos para ayudarte. Ambos estáis en el mismo equipo.</p>
<p>Con este ejercicio no se trata de que te acoses o te castigues con
tus propios sentimientos. Es solo el acto de notar que estos
sentimientos te causan un dolor físico o emocional, es posible que
necesites ayuda profesional o un grupo de apoyo para guiarte a entender
estos sentimientos y descubrir de dónde vienen. La ayuda profesional o
el grupo de apoyo pueden ayudarte a tener estos sentimientos sin que
estos te sobrepasen. No debe provocarte vergüenza el buscar ayuda en
otras personas para que te ayuden en tu viaje.</p>
<h2 data-number="7.7" id="separación-y-selección-emocional"><span
class="header-section-number">7.7</span> Separación y selección
emocional</h2>
<p>Uno de nuestros comportamientos aprendidos respecto de nuestros
sentimientos es tratar de huir de ellos o de reprimirlos. Hacemos todo
lo posible para evitar sentimientos que nos provocan infelicidad o
incomodidad. También tratamos de no exagerar nuestros sentimientos
positivos para no mostrar demasiada exuberancia. Esto nos puede llevar a
sentirnos confusos o en conflicto sobre qué estamos sintiendo y por qué
nos sentimos de esa manera. Al sentarnos con nuestros sentimientos y
emociones y entendiendo de dónde proceden podemos formarnos una idea
clara de qué está pensando nuestra mente y la historia que nos estamos
contando a nosotros mismos.</p>
<p>Piensa en esta práctica como una separación y clasificación
emocional. Con suerte nunca has tenido que acudir a una sala de
emergencias de un hospital, pero si lo has hecho, verías a todo el
personal médico que están entrenados en diagnosticar a quien acaba de
entrar por la puerta y determinar la gravedad del problema. Cuando
reconocemos y reflexionamos sobre nuestras emociones también estamos
diagnosticando qué emociones estamos teniendo y la gravedad de esas
emociones. Tomamos esos momentos cuando estamos experimentando las
emociones para poder determinar qué emociones son y qué las ha
desencadenado. Mientras revisamos nuestras emociones somos cordiales con
ellas y las reconocemos por lo que son. Un buen profesional médico no
impone sus propios deseos al paciente, simplemente aceptan a los
pacientes por lo que son, diagnostica lo que está experimentando el
paciente y actúa en consecuencia. Cuando reconocemos nuestras emociones
por lo que son y determinamos de dónde proceden, podemos comprender
mejor a lo que nos estamos enfrentando.</p>
<p>Cuanto más hagamos esta práctica, mucho mejor seremos capaces de
reconocer nuestras emociones y por qué las estamos teniendo. Seremos más
capaces de notar qué estamos sintiendo y entender el motivo de estar
sintiéndonos de esa manera. Cuando sentimos ansiedad, podemos reconocer
que podría ser causada por explorar un área de programación que no
entendemos por completo. Podemos sentir esa ansiedad durante un instante
(no trates de ahuyentarla) y en ese momento piensa sobre lo que estás
trabajando y cómo poder explorar esas áreas que son nuevas. Podemos
tomar una nota mental o escrita (mejor si es en un diario) así cuando
completemos lo que estamos realizando, podremos revisar las áreas que
nos están causando ansiedad.</p>
<p>Esta práctica puede convertir nuestras emociones en algo que nos
dirija o guíe. Podemos utilizar nuestras emociones como herramientas
para calibrar mejor nuestras historias internas. Podemos recomponer esas
historias sobre cómo no nos merecemos que nos llamen programadores y en
vez de eso darnos la intención de que pasaremos los próximos 10 minutos
explorando este área de nuestro trabajo y encontrar dónde están las
lagunas de conocimiento. Podemos establecer una intención de ser
curiosos sobre a dónde nos llevarán los próximos 10 minutos de
exploración. Mientras continuamos explorando ese tema notaremos nuestras
emociones y usaremos esas emociones para permitirnos conocer dónde
necesitamos mejorar y adaptarnos. Esto nos permitirá cambiar nuestros
planes cuando sea necesario y abordar aquellas áreas donde creamos que
tenemos carencias o necesitan mejorar. Este ciclo continúa en cada
contenedor que practiquemos, con nuestras emociones actuando como un
barómetro de nuestro nivel de comodidad con el tema en cuestión y
ayudándonos a esbozar una hoja de ruta sobre la mejor manera de
proceder. Transformamos nuestra incomodidad y ansiedad de cosas que
obstaculizan nuestro progreso en indicadores de dónde sentimos que
tenemos que enfocar nuestra atención.</p>
<h2 data-number="7.8" id="agotamiento"><span
class="header-section-number">7.8</span> Agotamiento</h2>
<p>Una de las cosas que nuestra separación emocional puede ayudarnos a
diagnosticar es el sentimiento de agotamiento. El agotamiento es un
compendio de emociones unidas a una extenuación emocional y física. El
agotamiento puede ser algo simple como estar cansado o tener exceso de
trabajo, pero también puede ser un signo de algo más serio. Puede llevar
a complicaciones físicas o mentales si no tenemos cuidado. Podemos
trabajar con preocupantes niveles de extenuación y engañarnos a nosotros
mismos creyendo que esto es parte del coste por ser un buen
programador.</p>
<p>El agotamiento se manifiesta de diferentes maneras. Para algunas
personas puede ser un sentimiento de pavor mientras trabaja en un
proyecto. Se sienten como si no fueran efectivos al hacer cualquier
cambio. Para otras personas el agotamiento puede ser un sentimiento de
extenuación. Se sienten como si estuvieran en una rueda de hamster que
no parará nunca. Incluso puede ser mucho peor, quieren que la rueda se
hubiera parado hace ya mucho tiempo. El agotamiento también puede
manifestarse en una sequía creativa, donde imaginar un futuro diferente
es difícil y las cosas que una vez fueron inspiradoras o interesantes ya
hace tiempo que no generan esa chispa.</p>
<p>El agotamiento es complicado de auto diagnosticar debido a que es un
conjunto de emociones aparentemente no relacionadas entre sí. Nuestro
sentimientos de aburrimiento, miedo y ansiedad pueden tener todos una
causa raíz diferente, pero cuando combinamos estos sentimientos con un
horario de trabajo implacable y la pérdida de control, amplificamos esos
sentimientos. Si no los controlamos, nos pueden llevar a tratar de
silenciar o dormir esos sentimientos. Nos encontraremos con que no
queremos programar nunca más y nos enfadaremos con nosotros mismos por
habernos metido en la programación. Podemos causarnos más sufrimiento no
deseado simplemente “superándolo”, lo que puede llevarnos a agravar y
complicar aún más nuestro estado emocional.</p>
<p>Hay algunas cosas que podemos hacer para entender y ayudar a aliviar
ese agotamiento:</p>
<ul>
<li>Darse cuenta de cuando estamos agotados, o a punto de estarlo.
Reconocer que estamos a punto de sentirnos agotados es clave para no
llegar a experimentar el agotamiento. Esto parece bastante simple, pero
tendemos a ignorar los síntomas cuando nos estamos acercando al
agotamiento. Si podemos reconocer que estamos a punto de agotarnos
entonces podremos tomar medidas para evitarlo. Y si nos damos cuenta que
ya estamos agotados, podemos tomar medidas para ser amables con nosotros
mismos y ayudarnos a salir de este estado de agotamiento.</li>
<li>Examinar nuestras emociones. Siéntate un momento y observa qué
emociones aparecen delante de ti. ¿Estás sintiendo estrés, miedo,
ansiedad, nerviosismo o ira? Observa qué sentimientos emergen y reconoce
esos sentimientos. Examina de dónde provienen esos sentimientos y qué
podría estar provocando esas emociones.</li>
<li>Volver a negociar nuestros compromisos. Muchas veces el agotamiento
es el resultado de un compromiso excesivo, ya sea con nosotros mismos o
con otras personas. Siempre tenemos muchas cosas que hacer y a pesar de
nuestros mayores esfuerzos siempre adquirimos nuevas obligaciones.
Quizás los planes que hicimos fueron muy exigentes o algo ha cambiado en
el mundo que desbarató nuestros planes. Cualquiera que sean las razones,
necesitamos volver a evaluar lo que se esperaba de nosotros y lo que
somos capaces de hacer. Si vemos que hemos creado una situación
intratable para nosotros mismos, necesitamos averiguar cómo eliminar
parte de esas obligaciones o volver a negociarlas.</li>
<li>Dar un descanso a nuestro ímpetu. A diferencia de nuestros homólogos
mecánicos necesitamos tiempo de inactividad y descanso. No podemos
trabajar ocho o más horas sin al menos algunos momentos donde no estemos
trabajando. La programación requiere mucho ancho de banda mental y el
esforzarnos hasta la extenuación puede llevarnos a inestabilidad, estrés
y agotamiento.</li>
<li>Examinar si así es como realmente queremos vivir nuestras vidas.
Necesitamos determinar si lo que estamos haciendo es realmente lo que
queremos hacer. Si no somos felices con lo que estamos haciendo,
entonces cada momento que continuemos haciéndolo puede agravar nuestros
sentimientos de infelicidad. Si no sentimos más que terror por nuestra
situación actual entonces quizás necesitamos volver a negociar nuestros
compromisos. Eso puede ser algo simple como aceptar no aprender algo
ahora mismo, o puede ser algo complejo como cambiar de trabajo o cambiar
de carrera.</li>
</ul>
<p>Al entender que estamos dirigiéndonos hacia el agotamiento (o que ya
estamos en él) podemos tomar medidas para corregir el rumbo, para poder
así realizar nuestra programación disfrutando y con alegría. A veces dar
un paso atrás y volver a evaluar lo que estamos haciendo nos puede
ayudar a no instalarnos en bucles constantes de frustración, ira y
culpa. Cambiar nuestra historia para que se ajuste mejor a la realidad
puede evitar que intentemos alcanzar un sueño imposible.</p>
<p>Antes mencioné la posibilidad de volver a negociar los compromisos. A
menudo estamos involucrados en situaciones donde tenemos muchas más
tareas que hacer que lo que es físicamente posible, incluso bajo las
circunstancias más óptimas. Esto puede ser causado en parte porque hemos
dicho “sí” a demasiadas cosas, o porque estamos abrumados por
compromisos laborales, como un importante proyecto de alta prioridad o
varios proyectos más pequeños que necesitan atención urgente. La mejor
manera de volver a negociar tu carga de trabajo es revisando esa carga
de trabajo y anotar qué tareas son “urgentes” y qué tareas son
“importantes”. Las tareas “urgentes” son las que sientes que hay que
realizarlas de manera inmediata. Puede que no sean tareas “importantes”,
pero tienen un sentido de urgencia. Las tareas “importantes” son las que
de alguna forma te beneficiarán a ti o a otras personas. Estas tareas
tienen un valor significativo cuando se finalizan, ya sea monetario o
por lo que significa acabar dichas tareas. Toma una hoja de papel o abre
un documento de texto y crea dos categorías: “urgente” e “importante”.
Haz una lista con las tareas que debes completar y clasifícalas bajo una
de las dos categorías. A continuación marca la fecha de finalización (lo
más aproximada que puedas) de cada una de estas tareas. Si tienes más de
tres tareas urgentes o importantes y todas ellas finalizan en la misma
semana es probable que tenga exceso de trabajo y necesitarás volver a
negociar esos compromisos. Puede que te sientas capaz de hacer todas
esas cosas pero si ya te sientes estresado, cansado y agotado, al tratar
de cumplir esos plazos solo aumentarás esos sentimientos. Si es posible,
trata de mover algunos de esos plazos para la próxima semana o comprueba
si tus clientes creen que esas tareas son tan urgentes o importantes
como tu creías que eran. Si realmente son urgentes o importantes,
entonces trata de que tus superiores te ayuden con recursos o para ver
si esas personas pueden intervenir para volver a negociar los plazos y
las prioridades. Si estás atascado sin salida (tus responsables no va a
interceder y los clientes no van a volver a negociar los compromisos)
entonces tendrás que tomar algunas decisiones sobre cómo son de
importantes esas prioridades frente a tus propias prioridades (esas
tareas ayudan a tus ingresos, lo que contribuye a continuar con tu
estilo de vida), pero tu propia salud y tu propio bienestar debería
tener más peso en la toma de tu decisión que sus prioridades o sus
plazos de entrega. Quizás puedas negociar algo de tiempo libre o
vacaciones después de ese periodo para poder descansar, relajarte y
recuperar tu fortaleza y agudeza mental antes de volver a pasar por una
situación parecida.</p>
<p>Aprender a decir “no” es una capacidad muy importante como
programador. A menudo nos vemos a nosotros mismos como seres
extraordinarios que pueden hacer cualquier cosa que se propongan, en
parte porque los equipos informáticos con los que trabajamos parece que
pueden hacer cualquier cosa. Desafortunadamente, tenemos unos recursos
físicos y emocionales finitos, así que aprender a escoger y elegir los
proyectos que son más importantes para nosotros (dependiendo de nuestro
propio criterio) nos ayudará a mantenernos a medida que vamos avanzando
en nuestra carrera profesional como programadores. Si decimos que “sí” a
todo lo que alguien escoge por nosotros entonces tendremos menos tiempo
para trabajar en las cosas que realmente nos importan. Estaremos a
merced de personas cuyas prioridades y deseos no coinciden con los
nuestros. La forma más efectiva de agotarse es gastar toda tu energía
trabajando en proyectos que no encajan con tus prioridades y deseos.</p>
<p>Experimentarás periodos de agotamiento en tu carrera profesional como
programador. Te encontrarás con cosas que sobrepasarán tu capacidad para
hacerles frente. Te verás atrapado en bucles en los que te preguntarás
si esto es realmente lo que deberías estar haciendo. Comprender lo que
estás sintiendo y reconocer que esos sentimientos son válidos es el
primer paso para cambiar tu trayectoria del agotamiento y el estrés. La
programación no debería ser una tarea tediosa (ningún trabajo de valor
debería serlo). Debería haber algo en tu día a día como programador que
te mantuviera motivado y te ayudara a aumentar tus conocimientos. Añadir
pizcas de conocimiento, disfrute y asombro, junto con periodos de
inactividad, te ayudará a mantenerte a salvo en la turbulencia emocional
que te espera. Y reconocer cuando estás agotado y volver a negociar tus
compromisos contigo mismo y con otras personas puede ayudarte a
revitalizar tus deseos de continuar programando.</p>
<h2 data-number="7.9" id="buscar-ayuda"><span
class="header-section-number">7.9</span> Buscar ayuda</h2>
<p>Me gustaría enfatizar el hecho de que está bien el pedir ayuda a
otras personas. Personalmente me ha costado pedir ayuda. Parte de mi
reticencia a la hora de pedir ayuda estaba provocada por que cada vez
que hacía una pregunta obtenía la temida respuesta de “eso ya deberías
saberlo”. Otras veces creía que al pedir ayuda, eso de alguna manera
haría mermar mi reputación. Me considerarían un fraude o un impostor.
Las personas se preguntarían por qué habrían confiado en mí al
principio. Pero cuando finalmente pedí ayuda, las respuestas no fueron
“¿por qué no sabes sobre eso?” si no que fueron “¿por qué no has pedido
ayuda antes?” Claro que hubo ocasiones donde alguien se habría
sorprendido de que no supiera algo, o que recibiría críticas por mi
ignorancia, pero encontré que los beneficios de preguntar superan con
creces cualquier efecto negativo.</p>
<p>Pedir ayuda no está limitado únicamente a temas técnicos, hay muchas
otras maneras en las que podríamos necesitar ayuda. Podríamos preguntar
a colegas que nos ayudasen durante un periodo difícil de nuestras vidas.
Podríamos necesitar ayuda de nuestros superiores cuando estamos luchando
de alguna manera ya sea personal o profesionalmente. Podríamos incluso
necesitar diferentes tipos de ayuda de diferentes profesionales
(doctores, terapeutas, etc). Involucrar a otras personas en nuestros
problemas puede ser desalentador (o incluso abrumador) pero obtener
ayuda de manera temprana puede ayudarnos a prevenir formas más graves de
agotamiento o estrés.</p>
<p>La razón más común de nuestra reticencia a la hora de pedir ayuda es
nuestro deseo de confort. Pedir ayuda significa el ponernos a nosotros
mismos en un estado de vulnerabilidad y esperar que las personas a las
que pedimos ayuda nos traten con amabilidad, respeto y dignidad. Esta
vulnerabilidad puede verse amplificada si no conocemos a la persona a la
que pedimos ayuda o si esa persona es un profesional médico. Pero es
necesario el colocarnos en esa situación de vulnerabilidad,
especialmente si los problemas o situaciones a las que nos enfrentamos
están fuera de nuestro control o exceden nuestra experiencia. Si estamos
a punto de sentirnos agotados (o estamos inmersos en un proceso de
agotamiento) podremos necesitar la ayuda de un doctor o terapeuta para
tratar de la mejor manera la situación que estamos experimentando. Si
nuestro trabajo nos causa estrés o tensión, quizás necesitemos hablar
con otras personas de nuestro entorno para descubrir si también otras
personas están experimentando estos sentimientos. Incluso un simple acto
de compasión con nuestros compañeros puede ayudarnos a darnos cuenta que
no estamos solos enfrentándonos a estos problemas y puede ayudarnos a
encontrar mejores formas de gestionar nuestra carga de trabajo o estrés.
A veces no nos damos cuenta de cuando nuestros trabajos o relaciones han
pasado a ser de respetuosas y beneficiosas a ser algo que nos provoca
más daños que algo positivo.</p>
<p>“No hay que sentir vergüenza en pedir ayuda” es una frase demasiado
utilizada, pero pedir ayuda no es un acto vergonzoso. Necesitamos ayuda
de otras personas. Incluso simplemente alguien que diga “siento que
tengas que tratar con eso” puede ser una conexión con otra persona que
simpatiza con lo que estamos pasando. Encontrar a otras personas que
estén dispuestas a escuchar, empatizar y compadecerse puede ser la
diferencia entre sentirse parte de una comunidad o sentir que hemos sido
abandonados en nuestra profesión.</p>
<p>También necesitamos reconocer cuando nuestros sistemas de apoyo no
nos están siendo de ayuda. Si vemos que hablar con alguien más no nos
está ayudando a resolver los problemas, quizás necesitamos encontrar
otras vías de ayuda. Quizás nos demos cuenta que necesitamos ayuda
extra.</p>
<p>Darse cuenta de la necesidad de apoyo adicional puede ser difícil,
pero una vez que hayas llegado a la conclusión, te animo a que actúes
para conseguir esa ayuda extra. Esto requiere de auto conciencia y
honestidad con lo que estás sintiendo. Solo tu conoces tu situación y si
estás siendo honesto contigo mismo. Si no estás siendo honesto contigo,
entonces solo tu puedes darte cuenta de eso y puedes tomar la iniciativa
para buscar la ayuda que necesites. Nadie mejor que tu conoce tus
propios mecanismos internos.</p>
<p>Pedir y recibir ayuda es una habilidad y como cualquier otra
habilidad requiere práctica. Cuando éramos niños, teníamos medios muy
simples para pedir ayuda (llorar, señalar algo, etc). Estas habilidades
están grabadas en nosotros como parte de nuestros mecanismos de
supervivencia, pero a medida que crecemos nuestro mundo se vuelve más
complejo. Nuestros métodos de pedir ayuda tienen que madurar igual que
nosotros mismos vamos madurando. Esto no es algo que surja de manera
natural en ninguno de nosotros. Nos resistiremos a pedir ayuda y nos
resistiremos cuando estemos recibiendo ayuda de otras personas. La
repetición y una práctica cuidadosa nos ayudará a mejorar nuestra
habilidad de pedir ayuda. Mejorar esas habilidades nos ayudará a
sobreponernos a los obstáculos a los que nos enfrentamos en nuestro día
a día. Esa mejora nos ayudará a ser no solo mejores programadores si no
también a mejorar cómo gestionamos los retos que la vida nos ofrece.</p>
<h2 data-number="7.10" id="renunciar"><span
class="header-section-number">7.10</span> Renunciar</h2>
<p>A los programadores no les gusta pensar en darse por vencidos.
¿Cuantas veces hemos pedido a otras personas que tengan paciencia
mientras intentábamos solucionar algo que no estaba funcionando?
(“Déjame unos minutos más, por favor, ¡de verdad!”) Trabajamos con
máquinas que parece que no tienen límites en sus posibilidades. Como
programadores nos sentimos obligados a explorar esas posibilidades, pero
a veces no queremos hacer esa exploración. A veces echamos un vistazo a
la lista de cosas que deberíamos aprender y nos preguntamos si merece la
pena el esfuerzo. Miramos las ofertas de empleo relacionadas con
nuestras habilidades y no encontramos mas que trabajos sin sentido. Los
nuevos programadores nos preguntan qué es ser un programador y nos
preguntamos si deberíamos advertirles sobre los peligros de escoger una
profesión que nos ha llevado a ser infelices y sentirnos insatisfechos.
La alegría que sentíamos mientras aprendíamos el oficio va
desapareciendo y luchamos contra el miedo de nunca volver a sentir ese
sentimiento de nuevo.</p>
<p>La programación no es para todo el mundo. Ha habido momentos donde me
he preguntado si debería continuar trabajando como programador. Estoy
frustrado porque no puedo aprender todo lo que quiero saber. Me preocupa
que lo que estoy aprendiendo siga siendo relevante cuando haya acabado.
Siento ansiedad por no se capaz de competir en un mercado laboral donde
todos los demás parecen tener ventaja. Lucho por conseguir un puesto de
trabajo que ofrece un puesto que no creo que vaya a ser relevante dentro
de seis meses, y ya no digamos 10 o 100 años. Siento que el futuro de la
computación que me prometieron ha sido corrompido y todos nosotros
estamos atrapados en un mundo donde los ordenadores no son más que
simples palancas para que las empresas abran las carteras de sus
clientes.</p>
<p>Es fácil volverse fatalista sobre la práctica de la programación,
pero me he dado cuenta de que hay más en la informática y la
programación que lo que el mercado laboral ofrece.</p>
<p>Parte del placer de programar es la curiosidad. Si podemos alimentar
nuestra curiosidad mientras programamos, entonces tenemos muchas vías
por explorar. Siempre hay otras ideas y otros temas por descubrir, como
el desarrollo de juegos, lenguajes de programación “esotéricos” u otros
paradigmas de programación. El mercado laboral utiliza una fracción de
las ideas de programación que están esperando a ser exploradas. También
hay muchos emuladores y equipos antiguos disponibles con buena
documentación y comunidades vibrantes. Un área que me ha intrigado, es
aprender cómo funcionan las computadoras más antiguas. Las computadoras
más antiguas son simples y se pueden entender con paciencia y la
mentalidad adecuada. Estas máquinas son bien conocidas y la mayoría de
estos programas más antiguos fueron elaborados por un solo programador.
Constituyen excelente espacio para aprender no solo cómo funcionaban las
máquinas más antiguas, sino también muchos de los conceptos que aún
impregnan nuestras máquinas modernas.</p>
<p>¿Qué ocurre cuando nos damos cuenta de que no quedan en nosotros
ganas de disfrutar al programar? ¿Qué hacemos cuando la idea de
programar ya no nos emociona? ¿Cómo continuamos cuando la simple idea de
probar algo nuevo nos llena de terror? ¿Entonces qué?</p>
<p>Si no encontramos ninguna diversión en programar, entonces
necesitamos entender por qué nos estamos sintiendo de esta manera.
Quizás estamos cansados después de un proyecto muy duro que ha agotado
en nosotros toda la diversión y la emoción de programar. Quizás las
comunidades a las que nos hemos unido, ya sea en nuestra ciudad o por la
red son hostiles o poco acogedoras. Quizás pensemos que programar sería
más divertido pero cada vez que empezamos, desearíamos estar haciendo
<em>algo</em> / <em>cualquier cosa</em> en su lugar.</p>
<p>Programar es lo mejor cuando de verdad quieres hacerlo. No es para
cualquiera. Si estás estancado en una situación en la que no quieres
programar nunca más, entonces el mejor rumbo que puedes tomar es dejar
de ser programador. No tiene que ser vergonzoso dejar de programar,
muchos programadores han perdido la chispa de la ilusión y el deseo de
programar y se han cambiado a otros campos. Está bien dejar el campo de
la programación y hacer otra cosa.</p>
<p>La programación solo es una faceta de nuestras vidas. Cierto, puede
ser una faceta muy grande de nuestras vidas y puede dar miedo el
abandonar algo en lo que hemos trabajado tan duro para conseguir. Pero
si nos damos cuenta que únicamente seguimos los movimientos por inercia
y ya no experimentamos ningún disfrute cuando estamos programando,
entonces es tiempo de pensar sobre qué más podemos hacer con nuestras
vidas fuera de la programación. Se nos concede una cantidad limitada de
tiempo para vivir nuestras vidas. Hacer algo con lo que no disfrutamos
nos impide vivir una vida más significativa.</p>
<p>Renunciar no debe ser una experiencia negativa. No hay vergüenza en
quitarle tiempo a ser programador. Muchos programadores se han dado un
“año sabático” de la programación para explorar otros intereses y
recargarse de energía. Romper bucles de experiencias negativas en la
programación puede ayudarnos a identificar lo que queremos de la
programación y de la profesión de programador. Puede ayudarnos a
encontrar y confirmar nuestros sentimientos más íntimos sobre la
programación y ver si todavía estamos destinados a seguir por este
camino.</p>
<p>Hay varios miedos que pueden impedirnos hacer esta ruptura con la
programación. El primer temor se conoce con el elegante nombre de
“falacia de la inversión irrecuperable”. La falacia de la inversión
irrecuperable es la creencia de que el tiempo y el esfuerzo que
dedicamos a aprender y programar es una inversión, y esa inversión se
desperdiciará si renunciamos. Por lo tanto, para preservar nuestra
inversión debemos seguir programando. El problema con esta falacia es
que supone que aún no hemos recibido el beneficio de ese tiempo y
esfuerzo. Yo diría que aprender cualquier tipo de programación no es una
habilidad desperdiciada. La programación se puede aplicar en muchas
facetas de nuestras vidas, como simplificar tareas dividiéndolas en
porciones más manejables, aplicar el pensamiento estructurado y
comprender la lógica booleana básica. Muchos otros campos también han
adoptado las computadoras, por lo que tener habilidades informáticas
puede ser útil para ti o para otras personas. El conocimiento que tienes
no se desperdiciará.</p>
<p>El segundo miedo es el miedo a defraudar a nuestros compañeros
programadores y a otras personas de nuestra organización si abandonamos
la programación. Esto es complicado. Es complicado porque incluye a
otras personas en nuestro proceso de toma de decisiones. Es posible que
estemos en una organización que tiene una carga sustancial de tareas
para completar, y nuestra decisión de renunciar significará que estas
tareas no se completarán de la manera en que deseamos que se completen.
No es difícil imaginar que nuestra ausencia cause daño a toda la
organización y resulte en su eventual colapso. ¿Es cierto este
escenario? Depende de nosotros determinar si nuestra ausencia realmente
decepcionará a todos en nuestra organización. Esto nos pone en una
situación en la que nuestro miedo nos mantiene sintiéndonos
“acorralados”. Nos sentimos “acorralados” porque nuestro miedo ha creado
una situación en la que estamos eligiendo entre nuestro propio bienestar
o el bienestar de los demás. Esta es una falsa dicotomía. Nuestra
ausencia podría ser el catalizador para que alguien más retome nuestras
tareas y trabaje en ellas, y posiblemente las complete de manera más
efectiva que nosotros en nuestro estado actual. Necesitamos determinar
si somos realmente insustituibles o si alguien más podría tomar nuestro
lugar. La respuesta podría ser “soy insustituible, pero necesito salir
de esta situación o me haré daño a mí mismo y a los demás si esto
continúa”. Depende de nosotros revisar si nos estamos ayudando a
nosotros mismos y a las organizaciones a las que servimos, o si los
estamos perjudicando a ellos y a nosotros mismos al engañarnos pensando
que esto está funcionando.</p>
<p>El tercer miedo tiene que ver con nuestro propio concepto personal de
identidad y la memoria de nuestra comunidad. Si decidimos dejar de ser
programadores, ¿borrará eso de alguna manera una parte de nuestra
identidad? ¿Nuestra comunidad dejará de identificarnos como
programadores y perderemos contacto con personas que se han convertido
en amigos y colegas? Una vez más, este miedo es difícil de superar
porque la programación puede ser una parte importante de nuestra
identidad. Dejar de lado la programación nos puede llevar a sentir que
nos estamos desprendiendo de una parte de nosotros mismos y de nuestra
identidad. También existe el temor de que la gente deje de llamarnos
para trabajos u otros proyectos de programación si decidimos tomarnos un
descanso temporal. Si el descanso es temporal, ¿la gente recordará
nuestras habilidades en programación cuando decidamos regresar?</p>
<p>Cada uno de estos miedos y preocupaciones son perfectamente válidos,
pero pueden no ser ciertos. Podemos sentir miedo de que estamos
malgastando nuestro tiempo como programador, pero la verdad es que
cualquier proceso de aprendizaje no es en absoluto un esfuerzo
malgastado. Podemos preocuparnos de cómo otras personas nos perciben o
de cómo la empresa de la que formábamos parte continuará sin nosotros,
pero la verdad es que no podemos controlar sus percepciones ni sus
acciones. Lo que podemos controlar es nuestra participación en cada una
de esas comunidades y nuestra propia percepción del tiempo y esfuerzo
invertidos. Podemos determinar si una ruptura profunda de la
programación sería mejor que una salida gradual de nuestros compromisos.
Podemos aclarar con las demás personas cual es nuestro estado actual
como programador y determinar si este estado es temporal o permanente.
La cuestión más importante es no permitir a los demás que nos convenzan
de hacer algo que no queremos o que es perjudicial para nosotros. Si
necesitamos parar nuestra actividad en programación porque estamos
emocionalmente exhaustos y agotados, entonces debemos dejarlo claro a
los demás que les estaremos perjudicando a ellos y a nosotros mismos si
continuamos.</p>
<p>Las comunidades más maduras entenderán la necesidad de tomar un
descanso y dejar de programar. Entenderán que tu bienestar mental y
emocional es más importante que sus necesidad de que continúes y serán
capaces de realizar lo que se necesite hacer y subsanar tu ausencia. Es
normal y natural en las personas el cambiar de empresas y perseguir
otras prioridades.</p>
<p>Lo más importante para recordar, es que es correcto el apagar esa
parte de tu ser y dejar de ser programador. Si haces o no que un cambio
permanente depende de ti y de tus deseos. Sentirse emocionalmente
exhausto, sin inspiración y agotado es contraproducente para la práctica
de programación: la programación es una tarea bastante difícil. Tomarse
un descanso de la programación para explorar otros intereses es natural
y no significa que seas menos programador por querer hacer algo
diferente para recargarte de energía. Si descubres que eres más feliz
cuando no estás programando, busca cualquier otra cosa que llame tu
atención con todas tus ganas. Si decides volver a la programación
después de estar fuera durante un tiempo, puedes regresar y retomar tu
práctica de aprendizaje. Recuerda: nuestras vidas toman muchos giros y
caminos diferentes. El mejor camino para ti es el que haces tú mismo,
sin importar a dónde te lleve.</p>
<h1 data-number="8" id="epílogo"><span
class="header-section-number">8</span> Epílogo</h1>
<p>Es un estereotipo para un autor el decir que el libro que ha escrito
es el que le hubiera gustado leer cuando se enfrentó a los temas
presentados en el libro. Quizás es un estereotipo porque es cierto: este
libro contiene los consejos que me habrían ayudado cuando comencé este
viaje. Con demasiada frecuencia me he preguntado si he estado a la
altura de los niveles que he creado para representar al programador
ideal. Muchas veces he visto el éxito de mis compañeros y me pregunto si
yo soy un programador ineficaz o deficiente en mi aprendizaje. ¿Qué
estaba haciendo mal que otras personas hacen bien?</p>
<p>He llegado a la conclusión que el viaje de cada programador es único.
Tu viajes te llevará por direcciones que serán diferentes a las que me
llevó mi viaje. Tendrás experiencias que yo no puedo compartir y yo he
tenido experiencias que difícilmente tu podrás replicarlas a menos que
tengas una máquina del tiempo. Ninguna de nuestras experiencias es menos
válida que las del otro, ni son más o menos válidas que las experiencias
de otros programadores. Estas son nuestras experiencias. Las áreas de
nuestro conocimiento son solo las áreas que hemos explorado hasta ahora.
Siempre habrá brechas, pero podemos definir esas brechas como las áreas
que aún no hemos explorado. Siempre hay más para explorar, y esa
exploración es la parte divertida del viaje.</p>
<p>Ningún viajero puede estar en todos los lugares en todo momento.
Deben viajar a cada destino tan rápido o tan despacio como sus medios de
transporte les permitan y permanecer allí tanto como puedan antes de
viajar a su siguiente destino. Viajan con los compañeros que encuentren
en cada comunidad que puedan crear. Construyen relaciones y confían en
ellos mismos y en los demás. Utilizan sus puntos fuertes para ayudar a
otras personas y explorar y mejoran sus debilidades. Cada día continúan
adelante. Como el viajero, a menudo debemos escoger nuestros destinos y
compañeros. Podemos encontrar a aquellos, que como nosotros, están
viajando por el mismo camino y que nos pueden ayudar en nuestro viaje.
Podemos intercambiar historias sobre nuestros éxitos y fracasos y
experimentar cada día como otra etapa más en nuestro viaje.</p>
<p>Continuo mi viaje cada día y espero que como programador tu continúes
tu viaje cada día mientras seas capaz. Puede que no estemos exactamente
juntos en el mismo camino, pero tenemos la misma meta: hacer lo mejor
que sabemos hacer en cada momento.</p>
<p>Te deseo lo mejor en todos tus viajes y espero volver a escuchar las
historias de tus viajes cuando nos encontremos de nuevo.</p>
<h1 data-number="9" id="agradecimientos"><span
class="header-section-number">9</span> Agradecimientos</h1>
<p>Este libro no existiría sin las personas que me han acompañado en mi
viaje, tanto docentes como colegas. Mi agradecimiento y aprecio a todos
mis docentes en mis años de formación por brindarme sus mejores
esfuerzos para enseñarme programación en sus diversas formas. Estoy en
deuda con todos mis colegas y amigos programadores a lo largo de los
años que compartieron sus conocimientos conmigo y confiaron en mí lo
suficiente como para ayudarlos en el camino. También tengo la suerte de
tener muchas comunidades que me ayudan a mantenerme, incluidas <a
href="http://mug.org">Michigan!/usr/group</a>, <a
href="https://pyohio.org">PyOhio</a>, <a
href="http://coffeehousecoders.com">Coffee House Coders</a> y <a
href="htttp://loco.ubuntu.com/teams/ubuntu-us-mi">Ubuntu Michigan
Loco</a>. También a los que no encajan en estas categorías. Sepa que si
hemos pasado algún tiempo discutiendo la programación u otros asuntos,
nuestras discusiones son apreciadas profundamente.</p>
<p>También agradezco el trabajo de Leo Babauta de <a
href="http://zenhabits.net">Zen Habits</a> que me proporcionó las ideas
de <em>mindfulness</em> y contenedores de atención focalizada. Han sido
transformadoras en mi propio trabajo, como lo demuestra este libro. Me
comprometí a pasar al menos 10 minutos cada mañana escribiendo cada
sección, y los resultados son el trabajo que ves ante ti.</p>
<p>Gracias a los que me ayudaron directamente con este proyecto. Gracias
a mi madre, Sharon Maloney, por ayudarme en la edición de este libro.
Cualquier eerrorr que quede es responsabilidad del autor. Gracias a Beau
Sheldon por revisar el capítulo sobre salud mental y por ayudarme a
comprenderlo mejor y resaltar las áreas en las que lucha la gente.
Gracias a mi amigo, David Revoy, por su increíble portada y por su
inspiración durante todo el proyecto. Gracias a Esteban Manchado
Velázquez por agregar CSS y limpiar la versión HTML del texto. Gracias a
los lectores beta por sus valiosos comentarios y opiniones en
repositorio git en Framagit, incluidos (en orden alfabético por
identificador o nombre): Brendan Kidwell, D. Joe Anderson, David Revoy,
Eric Hallam, Jer Lance, Matthew Piccinato, Matthew Balch, Midgard,
Nicholas Guarracino, RJ Quiralta, Valvin y Wilhelm Fitzpatrick. Gracias
a Paco Esteban por los arreglos de edición.</p>
<p>Mi más profunda gratitud es para mi mujer JoDee y mis padres por su
apoyo y por creer en mí. Las palabras no pueden expresar el amor y el
agradecimiento que tengo por ellos.</p>
<h1 data-number="10" id="mi-viaje"><span
class="header-section-number">10</span> Mi viaje</h1>
<p>Mi viaje como programador comenzó cuando estaba en la escuela
primaria. Me interesé en las computadoras después de leer sobre ellas en
la <em>World Book Encyclopedia</em> y esperaba trabajar con ellas algún
día. Lo que no me di cuenta fue que esas enciclopedias estaban
desactualizadas y solo mostraban las computadoras centrales y las
minicomputadoras más grandes y costosas de la década de 1960 y no las
microcomputadoras más modernas que se introdujeron a fines de la década
de 1970. Cuando me di cuenta de que una Apple era una microcomputadora y
que estaba diseñada para el mercado doméstico, comencé mi búsqueda para
obtener una computadora propia (es decir: comencé a dar pistas no muy
sutiles a mis padres de que quería una computadora). Revisé revistas
como <em>Popular Computing</em> y <em>Byte Magazine</em> en busca de la
computadora adecuada, desde el Commodore VIC-20 y el Sinclair ZX-80
hasta el Radio Shack TRS-80 Model III (incluso el Rockwell AIM-65 o el
Heathkit H89 habrían servido. Por aquel entonces no era quisquilloso).
Mi padre me llevó a tiendas donde las vendían y me maravillé de la
variedad de máquinas que había allí (y probablemente puse nerviosos a
algunos vendedores mientras tecleaba y tocaba las máquinas nuevas y
bastante caras). Finalmente, mi padre compró una computadora Atari 400
con unidad de cinta y comencé a aprender programación BASIC en serio.
Casi al mismo tiempo, mi escuela abrió un “laboratorio de computación”
con tres máquinas Commodore PET 4032 (completas con unidades de
disquete), y me encontré pasando cada momento que podía con esas
máquinas. En la escuela secundaria tomé dos cursos de programación, uno
en BASIC y el otro en Pascal (que fue mi primera exposición a los
lenguajes de procedimiento y los conceptos básicos de la informática).
En la universidad me especialicé en Ciencias de la Computación con una
Licenciatura en Ciencias e hice todo lo posible para mantenerme al día
con todas las cosas que intentaron enseñarme. Desafortunadamente, no era
un gran estudiante (especialmente en matemáticas). Luché y luego
abandoné mi clase de compiladores, y sentí que me estaba quedando atrás
en comparación con otros estudiantes que tenían éxito. La mayoría de
nuestras clases usaban Pascal, con el que me estaba familiarizando, pero
había algunas clases que usaban COBOL, Ada, SNOBOL, C y lenguaje
ensamblador. Me gradué con notas modestas y regresé a casa.</p>
<p>A lo largo de mi carrera, he cruzado la brecha entre la
administración de sistemas y la programación. Linux era similar a las
máquinas SunOS que admiraba en la universidad, así que pasé a usar eso
como mi sistema operativo principal alrededor de 1995. En mis primeros
trabajos me encargaron el mantenimiento de varios tipos de computadoras:
PC de escritorio, máquinas basadas en UNIX y de manera ocasional de las
copias de seguridad de las máquinas VAX. No fue hasta que uno de mis
puestos necesitaba un sitio web que agregué más programación a mi
currículum. La programación de sitios web en la década de 1990 fue donde
realmente comencé a aprender y comprender Perl, SQL, bases de datos
relacionales y HTML. La web era tan nueva en la década de 1990 que todas
las personas en nuestros proyectos estaban aprendiendo al mismo tiempo.
Aproveché mi conocimiento de Perl en algunos otros trabajos y proyectos
haciendo programación basada en web. Perl en la década de 1990 era un
lenguaje donde los conceptos básicos eran simples de aprender pero el
lenguaje podía manejar ideas y estructuras de datos realmente complejas.
Perl y CGI facilitaron la incorporación en una página web de algo que
tuviera un poco de interactividad. Donde Perl se vuelve complejo es la
sintaxis de cosas como las expresiones regulares y la tendencia de los
programadores de Perl a valorar el código que realiza múltiples acciones
en la misma línea. La comunidad de Perl también valora el código
inteligente, lo que me llevó a preguntarme en varias ocasiones si era lo
suficientemente inteligente como para ser un programador de Perl.</p>
<p>Una de las empresas en las que trabajé decidió migrar un sistema Perl
a un entorno basado en Java. Analizaron las habilidades del equipo de
desarrollo existente y decidieron que necesitaban externalizar el
proyecto a otra empresa. Esta era una tendencia común a principios de la
década de 2000 por razones que están fuera del alcance de este libro.
Esto me dio un primer contacto como líder de un equipo. Sé que muchos
programadores migran a roles administrativos, pero en ese momento sentí
que no había explorado completamente mi potencial de programación. Me
senté en varias ocasiones e intenté aprender Java, pero nunca me llamó
la atención. El desarrollo web Java siempre lo sentí más engorroso que
los scripts CGI de Perl que creé. Tampoco ayudó que enviáramos archivos
<code>.war</code> a un sistema Tomcat, que parecía estar compuesto por
una gran cantidad de metadatos de configuración y muy poco código. Esto
es a lo que me refería cuando hablé de estar bien con renunciar a
aprender algo, a veces lo que tratamos de aprender es más una tarea
rutinaria. Tener algo que es una tarea rutinaria no va a proporcionar
una buena experiencia de aprendizaje.</p>
<p>Fue en ese momento cuando comencé a aprender Python por mi cuenta
usando Pygame. Me lancé al participar en mi primera competición <a
href="http://pyweek.org">Pyweek</a>. Pyweek es una competición de una
semana en la que la gente crea un juego completo desde cero. Fue un
desafío, pero también fue una de las experiencias más gratificantes que
he tenido en la programación. Creé un juego llamado “Busy Busy Bugs” que
se podía jugar en un momento en que realmente no sabía lo que estaba
haciendo. En muchos sentidos, estaba aprendiendo a nadar arrojándome al
proverbial fondo profundo. No estaba en peligro, pero el deseo de hacer
algo al final de la semana me guió de maneras que no creía que fueran
posibles.</p>
<p>A medida que la posición de líder técnico continuaba, me encontré con
ganas de hacer otra cosa. Me entrevisté en varios lugares y fui
contratado en Sourceforge como miembro del Grupo de Operaciones de
Sistemas. Sourceforge fue una experiencia increíble para mí. Soñaba con
trabajar para una empresa de código abierto, y pocas empresas de código
abierto eran tan bien consideradas como Sourceforge y Slashdot en la
comunidad de código abierto, pero mis inseguridades y el “síndrome del
impostor” entraron en acción. ¿Sería capaz de cortarlo? ¿Me contratarían
solo para darse cuenta de que habían cometido un error y que no era tan
bueno como decía ser? Yo era amigo y había ido a la escuela con varias
de las personas que trabajaban en Sourceforge/Slashdot, así que me
preguntaba cuales eran sus motivaciones para contratarme. ¿Me
contrataron como una broma elaborada o me contrataron porque varias
personas en la empresa me conocían? Todos estos pensamientos pasaron por
mi cabeza mientras trabajaba allí. No ayudó que mi posición fuera
principalmente administración de sistemas a un nivel en el que no tenía
experiencia. También había un componente de programación en el puesto,
pero constantemente sentía que estaba muy por encima de mi cabeza. Vivía
con el temor constante de que me descubrieran y de que el trabajo que
quería ya no estuviera disponible para mí. De acuerdo, aprendí mucho y
tuve unos jefes muy amables en Sourceforge, pero vivía con pavor cada
vez que mi gerente me consultaba, porque temía que la conversación solo
resaltara que se suponía que yo no debía estar allí.</p>
<p>Me encantaría decir que tuvo un final feliz y que mis temores eran
infundados, pero lamentablemente me despidieron de ese puesto debido a
restricciones presupuestarias. Estoy agradecido por las oportunidades
que tuve allí, los amigos que hice y las experiencias que tuve, pero
estaría mintiendo si no dijera que el despido vino con una mezcla de
tristeza y alivio. Tristeza por no poder volver a tener un trabajo
genial como ese y alivio por poder dejar de lado por el momento esos
sentimientos del síndrome del impostor. En muchos sentidos, crecí a
partir de la experiencia de trabajar en Sourceforge y aprendí mucho
sobre mí y mis capacidades mientras trabajé allí, pero también fue el
puesto en el que sentí mi síndrome del impostor en su máxima
expresión.</p>
<p>Más tarde me contrataron para un puesto a tiempo completo haciendo
programación Python. Este empleo me permitió fortalecer mi oficio como
desarrollador de Python. Allí creé muchos proyectos interesantes y seguí
aprendiendo más sobre Python. Me ayudó a recuperarme y ampliar mis
habilidades. La gente en este trabajo fue muy comprensiva y amable. Hubo
momentos en los que se volvió estresante (todos los trabajos parecen
tener estrés), pero en general fue una experiencia positiva.</p>
<p>Lamentablemente, también me despidieron de ese puesto (el dinero
apesta, ¿sabes?).</p>
<p>Empecé mi búsqueda de trabajo en serio y fui a un montón de
entrevistas. Si bien todas las personas en las entrevistas parecían
impresionadas con mis habilidades y mi carrera, caí en una de dos
categorías: no encajaba bien en el puesto o no tenía suficientes
conocimientos en las áreas que buscaban. Me encontré haciendo pruebas
cronometradas de escribir código que parecían estar probando si me
estresaba fácilmente en lugar de las habilidades de de escribir código
que pudiera tener. Me senté en sesiones en las que escribía código con
figuras sombrías que gritaban comandos y requisitos mientras hacía todo
lo posible por seguirlos. Hice acertijos de matemáticas y problemas de
lógica (lo cual es horrible si no eres bueno ni en matemáticas ni en
problemas de lógica). Los primeros indicios prometedores se convirtieron
más tarde en cartas de rechazo (suponiendo que me respondieran), y la
desesperación se apoderó de mí cuando me enfrenté a la perspectiva real
de que tendría que dejar la programación si quería ganarme la vida. Las
visiones de regresar a los comienzos de mi carrera me llenaron de pavor.
Parecía que ya nadie quería arriesgarse conmigo y no podía competir con
tantos programadores nuevos que no habían cometido los errores que yo
había cometido en mi carrera.</p>
<p>Durante ese periodo registré el dominio web
themediocreprogrammer.com. Si yo iba a ser un desastre entonces podría
aceptarlo.</p>
<p>Afortunadamente, he tenido una comunidad de amigos y compañeros
programadores que me han ayudado. En mi trabajo actual estoy contratado
por uno de estos amigos al que ayudo con las tareas de programación. Ese
puesto surgió al asistir a PyOhio (una conferencia de programación) que
se celebra todos los años. En todas mis luchas, he tenido la suerte de
tener allí a una comunidad que me ha ayudado. Es por eso que creo que
las comunidades son tan geniales: nos brindan una red de personas que de
otra manera no tendríamos, y nos ayudan a superar nuestros triunfos y
nuestras luchas.</p>
<p>Soy una colección de todas estas experiencias. Todas ellas me hacen
quien soy. A veces me pregunto si debería haber tomado un camino
diferente o haber hecho algo diferente, pero ese es un ejercicio inútil.
Lo mejor que puedo hacer con estas experiencias es aprender de ellas y
seguir adelante. Cada día trabajo para mejorar y superarme. Cada día
cometo nuevos errores, pero todo eso es parte del proceso de
aprendizaje.</p>
<p>Mi viaje continua.</p>
</body>
</html>