elprogramadormediocre/chapter06.md

122 lines
34 KiB
Markdown
Raw Normal View History

2022-08-22 16:43:26 +02:00
# El mapaa no es el territorio
2022-08-22 16:43:26 +02:00
## El panorama cambiante de la programación
2022-08-22 16:43:26 +02:00
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).
2022-08-22 16:43:26 +02:00
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 `awk` 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.
2022-08-22 16:43:26 +02:00
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 observar 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 cuanto de aquello reconoces.
2022-08-22 16:43:26 +02:00
## Aprender a aprender
2022-08-22 16:43:26 +02:00
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 diferentes maneras. Todos tenemos estilos de aprendizaje que funcionan mejor cuando se enfatizan ciertas cosas. Algunos aprenden mejor en el aula de una clase, mientras que otros aprenden mejor con el estudio auto dirigido (libros, grabaciones de vídeo, etc.). Algunos pueden leer un libro y entender perfectamente la materia, mientras que otros 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.
2022-08-22 16:43:26 +02:00
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 programación de un juego de una semana de duración donde el tema a tratar se anuncia al comienzo y toda la programación transcurre en una semana. Durante esa semana completa 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 _game jam_ (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.
2022-08-22 16:43:26 +02:00
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. Debería también ofrecer al menos menos resistencia a tu 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.
2022-08-22 16:43:26 +02:00
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).
2022-08-22 16:43:26 +02:00
Cada día tienes una oportunidad de aprender sobre más sobre ordenadores y la programación de estas. Realizar una pequeña parte cada día para aprender un poco más te ayudará en tu viaje.
2022-08-22 19:01:47 +02:00
## Cómo escoger qué aprender
2022-08-22 19:01:47 +02:00
Hay muchas oportunidades para aprender, ya sea mediante libros, tutoriales, vídeos o cursos a distancia con tu ordenador. También hay infinitud de temas 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 oopciones disponibles?
2022-08-22 19:01:47 +02:00
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 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 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 un poyecto).
2022-08-22 19:01:47 +02:00
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 trabajos para averiguar qué es lo que buscan las personas que ofrecen trabajo y observa si eso te despierta algún interés.
2022-08-22 19:01:47 +02:00
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é tiene tu atención y dónde enfocarte. No te preocupes con realizar la elección perfecta que te dará tu siguiente trabajo o impulsará tu carrera. Este ejercicio es sobre hacer una elección para aprender algo interesante y que te enganche el tiempo suficiente para aprender más sobre ello.
2022-08-23 16:56:59 +02:00
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 dónde comenzar. A menudo algo tan simple como un tutorial puede ser una buena manera de comenzar con este ejercicio.
2022-08-23 16:56:59 +02:00
¡Si puedes encontrar algunos recursos en un corto periodo de tiempo será genial! Comienza tu proceso de aprendizaje con esos recursos. No re 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.
2022-08-23 16:56:59 +02:00
Una de las trampas de 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 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 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 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 esa 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 a tratar de discernir la calidad de lo enseñado y no dedicar tiempo en la enseñanza actual.
2022-08-23 16:56:59 +02:00
Después de unos días de sesiones prácticas date la oportunidad de comprobar y ver 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.
2022-08-23 16:56:59 +02:00
Si encuentras que el tema que estás tratando de aprender ya no te interesa, date un momento para reflexionar del 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 te puedes ahondar más con la dificultad y siente cuando 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.
2022-08-23 16:56:59 +02:00
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 piense en su proceso de aprendizaje. Más tarde puede reflexionar sobre estos sentimientos y ver los patrones en tu proceso de aprendizaje. Si te sientes cansado mientras estás aprendiendo podrías intentar ajustar 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 necesitas haya alguien a quien puedas plantearle preguntas para obtener más claridad. Estas respuestas pueden no ser evidentes mientras estás en el 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 par aprender cómo funciona tu mente y entender qué necesita para mantenerte comprometido con tu aprendizaje.
2022-08-24 18:08:56 +02:00
## Resistencia y el contenedor
2022-08-24 18:08:56 +02:00
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?
2022-08-24 18:08:56 +02:00
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. Una baliza que nos indica el camino y nos ilumina cuando estamos en territorios desconocidos. Cuando nos sentimos inseguros sobre los 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."
2022-08-24 18:08:56 +02:00
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 y 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.
2022-08-24 18:08:56 +02:00
Steven Pressfield en _La guerra del arte_ llamó 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.
2022-08-24 18:08:56 +02:00
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.
2022-08-24 18:20:54 +02:00
## Trazado de objetivos a largo plazo
2022-08-24 18:20:54 +02:00
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?
2022-08-24 18:20:54 +02:00
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.
2022-08-24 18:20:54 +02:00
En vez de darte un consejo específico de 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.
2022-08-24 19:27:04 +02:00
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é muestra. 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 haber notado de otra manera.
2022-08-24 19:27:04 +02:00
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é.
2022-08-24 19:27:04 +02:00
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 en ellos un poco más.
2022-08-24 19:27:04 +02:00
Esta es una manera de trazar los objetivos de aprendizajes (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 del trabajo o necesites adquirir algún conocimiento para tu trabajo que necesita ser aprendido rápidamente. ¿Cómo trazas esas metas?
2022-08-24 19:27:04 +02:00
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á expandiendo tus habilidades a un nuevo territorio.
2022-08-24 19:27:04 +02:00
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.
## Failure and learning
One thing that we are afraid of while learning is failure. We worry that we won't learn the topic quickly or completely. We pick up material that starts off simply but later on becomes very complex, and we struggle to keep up. We try typing example code into our editors and find ourselves needing help to get them to work. We fail to grasp the material and wonder if we'll ever learn what we're trying to learn.
Failure is a part of learning. If you knew the material you wouldn't be learning.
One of the reasons for practicing learning using containers is because we give ourselves those brief moments of failure and repetition. Repetition is how we get better at whatever we are learning. Failure allows us to course-correct our learning so we can determine how best to approach this the next time we make an attempt.
We often feel that failure is something to be avoided, but while we're learning it is unavoidable. Our learning process requires us to fail in order to get better at what we're learning. That's the whole point of learning: reworking our brains so that they can finally understand the concepts we are trying to learn.
Part of learning is having the right mindset for learning. Instead of feeling like you're constantly failing and struggling to keep up you may want to approach it with a different perspective. Instead of thinking "I can't do this. It's too hard.", approach it with a more curious "This is all new to me. This is why I'm practicing learning this." Giving yourself a more positive mindset will help keep you from giving up when you struggle with the material.
## Dead ends and changing topography
Sometimes we'll find ourselves learning something that's a dead end. We look at our progress and see no real improvement. We don't find the topic as engaging or as exciting as we'd imagined. We realize that what we're learning is an evolutionary dead-end in the realm of programming. What then?
Part of our learning process is understanding that our expectations of how something will turn out can be completely different from how things actually do turn out. We envision all sorts of rewards and platitudes that never come. Does that mean we're at a dead end? I don't think so. It might be that what we expected we'd be doing with our newfound knowledge isn't panning out. We might find our expectations for how quickly we'd learn the topic aren't being met. We may also expect that our career will be bolstered by learning this topic, yet the job market hasn't recognized our new-found skills with job offers or more money.
Our engagement is related to our expectations. Programming demands a certain amount of fun and reward, and if we're not finding the experience fun or rewarding then we're unlikely to want to continue learning that topic. Our minds begin wanting something else to engage us, and we start craving anything other than to continue with this learning process. After all, shouldn't we be enjoying this? If there's no engagement and enjoyment then the learning becomes drudgery. We become distracted more easily while trying to learn and our minds drift away rather than focusing on our learning experience.
There is also the problem of learning things that are evolutionary dead ends. The world of computing is littered with the remains of technologies and methodologies that are either no longer relevant or are considered "out-of-fashion." What once was cutting edge is now considered moribund, and the community around that technology or methodology scoots on to new technologies and methodologies and leaves their previous work as a technological ghost town. When we mention that we're learning these things we get curious looks from developers: "Why would you learn that? We've moved on to this other thing." It's as if we've heard about a party and arrived in time to see the clean-up crew picking up the litter and breaking down the tables and chairs. We feel like we've missed out on the good parts and wonder if it's even worth trying to keep up and find the next thing.
All of these can pose their own problems for learning, but it's up to us to take a more critical look at why we started this whole process of learning. What did we bring into this?
In each of these cases we brought our expectations of how the learning would progress. We brought the expectation that it would always be fun, engaging, and relevant. Sometimes our learning expectations do pan out, but when they don't we get discouraged and disappointed.
Rather than being upset at how our expectations of learning this technology or methodology aren't being met we can take a more mindful approach. We can see ourselves in our moments of learning and notice if we're trying to bring more than our focused attention into the learning container. We can realize that learning is about changing ourselves and change is not always fun, engaging, or pleasant. We can put aside our expectations and concentrate on the learning itself.
That doesn't mean we shouldn't acknowledge our feelings. We should certainly acknowledge the feelings of boredom, anxiety, disillusionment, and so on, but we should also be mindful of where those feelings originate. Are we truly bored or is this our mind trying to tell us to stop so we can do something more fun? Are we not engaged with this material because we don't find it relevant or are we giving in to our distractions? Is this really a dead-end in our learning or are we just feeling stuck? Notice when the feeling comes up and be curious about what prompted the feeling. Note when you get the feeling and where you feel it most in your body. Stay with the feeling for a few seconds and keep noticing it. Then, continue your work. While you work keep noticing all of the feelings you're having and repeat the process of staying and noticing your feelings. When you're finished you can reflect more on those feelings and make an honest determination of what those feelings are indicating. Through this process you can clarify what is causing those feelings and notice if they are just resistance to learning new material or a desire to run to distractions or something more familiar.
If, however, you realize that you're really not enjoying learning this topic, if you feel you're spending more time convincing yourself to learn rather than actually learning, then you'll need to have an honest discussion with yourself about why you're learning this topic at all. Is this topic still relevant to you or has the topic become irrelevant? Are you learning this out of an obligation to yourself or others, and is that obligation still present? Are you trying to learn whatever it is because you're worried you'll be left behind, personally or professionally? Think about what brought you to start learning this topic and determine if the situation has changed. If someone came up to you and asked you if you would like to use this topic in the next few days would you consider it?
You'll need to reconsider your true motivations for learning this topic and see if they still match what you want to do with your programming profession. You will also need to be honest with yourself about why you're learning this topic and why it is important to you. There are plenty of things to learn that are great career paths, but if you have no interest in the topic, or are just learning it "to get hired" you're going to have a more difficult time learning the topic than if you had a genuine interest in it. You'll also need to determine if this is just resistance to learning. Your challenge will be to sort out your true feelings about this topic and tease out whether you've genuinely lost interest or are just struggling.
There have been many things in my career that I have tried to learn, but there have been many more that I haven't learned. Part of the reason I haven't learned them is because the computing landscape changed as I was learning them. At school I learned the Pascal language. I got reasonably good at it but over time my Pascal skills have faded. Right now there's very little need for proficient Pascal programmers so continuing to develop my Pascal skills would be purely for my own enjoyment. I find other computing topics more enjoyable so my Pascal skills lie dormant. Should Pascal arise from its moribund state I can revisit the decision to reinvigorate my Pascal knowledge, but for now I'm content that I've made the right call. At one point in my career the Java language came to prominence. I spent many sessions learning Java until I realized I didn't enjoy the language. It felt too cumbersome to me and the directions it took weren't ones that I cared to pursue. So after some reflection I stopped learning Java. Was this all wasted time? Hardly. During my sessions I learned more about Object Oriented Programming and how objects fit together. I learned more about recursion while trying to solve a problem for one of my projects. These skills transcend Java, so when I started learning Python I was able to transfer my knowledge on how objects worked from Java to Python. I used that knowledge to understand what Python was doing and how it was different from Java. Should the need arise I can revisit my decision to stop learning Java and see if it interests me again.
It's OK to give up on learning something. It's up to you to determine what you want to learn and for how long. We are complex beings and our interests morph and change. We also exist in a complex industry of changing whims and technologies. What was interesting and necessary at the beginning of the year might become uninteresting or unnecessary at the end of the year. We shouldn't feel beholden to learning something just because others are learning it or because the job market seems to require it. Give yourself permission to listen to your own desires. If they match up with what a fickle industry wants then great! Go learn with abandon. But if they don't match up and you find yourself spending weeks trying to stir up enough motivation to learn the topic then you're doing yourself and your craft a disservice. Let this topic sit dormant for a bit and give yourself something else to learn. There is little point in making yourself miserable to please others.
If you feel the urge to revisit this topic at a later point then let yourself come back to it. You should also allow yourself to come back to this topic without the baggage and expectations of your previous attempts. Saying "I already tried this once, so we'll see if this works this time" sets your mind to expect that you will give up again. Give yourself permission to approach this topic as though you're experiencing this topic fresh, with no expectations of how it will turn out. Be gentle with yourself and experience this topic again from your current perspective.
## Approach with curiosity
As beginners we engaged the computer with curiosity and enthusiasm. We didn't know what to expect and had no idea how long it would take. We just learned as much as we could and took everything at face-value. As we continued to learn we traded our curiosity for certainty, and our enthusiasm for expectations. The excitement we got from learning became the drudgery of feeling that we must always be learning. We can re-capture that beginner's spirit by looking at each opportunity to learn as a new experience. We can let go of our expectations of how our learning will progress and instead approach each learning session with curiosity for what we will learn during the session. We can re-kindle the spark that we had when we were beginners with infinite possibilities. That spark will sustain us through the periods of uncertainty.
We can learn to love learning again. With each focus container we can approach our learning fresh, with no preconceived notions of how it will end, and be curious for what we'll find when we dig deeper into what we're learning. Each learning session brings us one step closer on our journey to close up the gaps. There so much to explore in our field. I hope you always find something new and exciting to help you on your journey.