Adding more about learning and rabbit trails
[themediocreprogrammer.git] / chapter06.md
index 8b1ffa186a14a4db66ecbf2833f6bb46dacf8af2..e0d30131670d31223aa36f81b352aaff4b51b587 100644 (file)
@@ -41,7 +41,7 @@ If you're finding that the topic you're looking to learn is no longer interestin
 
 Treat this as an iterative process, with regular check-in periods to see how you're doing. Think about how you feel when you're learning. Are you excited and engaged or do you feel tired and withdrawn? Do you try to procrastinate when you think about this topic? When you are focusing on your learning does your mind wander? Note these feelings as they occur to you during your focusing sessions and come back to them when you think about your learning process.
 
-## Resistance
+## Resistance and The Container
 
 Any time we learn new things we put ourselves into a vulnerable and uncomfortable place. We take the things we are familiar with and push into new territory. We become uncertain of the outcome; will it be successful or will it be a failure? Will it help us or hurt us? Will we choose the wrong thing to learn and will it cost us opportunities in the long run?
 
@@ -49,4 +49,30 @@ Discomfort and uncertainty are certainly a part of learning, but rather than thi
 
 We've been conditioned over our human existence to think of the unknown as something to be feared. These emotions have served us well and have kept us from venturing too far out of our comfort zone. When the unknown can house all sorts of dangers it makes sense not to provoke them by showing up on their doorstep. But programming is not the same as venturing into a dark forest or peeking into a damp cave; programming hardly warrants the amount of fear we give it. Instead we need to realize that we're not in any mortal danger and our fears are merely letting us know that we're venturing into the uncharted territory of ignorance where we shall find understanding.
 
-(talk about learning, feelings, and resistance to new learning. Talk about the discomfort of learning new things)
+Steven Pressfield in _The War of Art_ nicknamed these feelings "resistance". He uses the term "Resistance" as a sort of mythological being that thwarts creative acts. As the work progresses The Resistance ratchets up the pressure to stop by introducing the feelings of fear and anxiety that we mentioned above. I think of Resistance as something that also happens whenever we trend toward learning more to help foster creative acts. For creative folks this is about achieving a creative work (book, painting, game, etc.) but in our case we're learning the tools to help us be more creative. Resistance is what tells us that we're not good enough or not worthy enough to learn these things. It tries to keep us safe in what we already know.
+
+This is part of why the focus container that we mentioned before is so important: it gives is small doses of discomfort in manageable chunks. We can see our way through a few minutes of discomfort daily and keep at it. And if we focus on one thing at a time we can keep ourselves from the distracting thoughts about whether or not this is the thing we should be working on; at this moment this is exactly what we should be working on. Whatever is in front of us to learn is what we should be learning. We can be secure that for however long the container is that everything we are doing at this moment is exactly as it should be, and when we finish the container we can reassess how it went and where we should go from here.
+
+## Mapping out longer-term goals
+
+As you progress with learning you'll start to see that a lot of what we call programming is interconnected. Languages borrow heavily from each other and ideas that seem new and innovative have their roots in concepts dating back to the genesis of computing. But rather than dissuade us it should encourage us. We can open the doors of programming by learning simple, transferable concepts. The question is, which ones?
+
+The simplest answer is "all of them", but that's hardly satisfactory (or possible). A less cheeky answer would be "enough of them to start seeing the patterns emerge" but that sounds more like a truism than something we can take to start making our longer term goals for learning.
+
+Rather than give specific advice on which concepts will serve you best in your pursuit of programming I'm going to suggest a technique that might help you map out what could help you.
+
+Programming languages usually are quick to mention the concepts they borrow from. Whenever you're learning and you see mention of one of these other concepts make a note of it and keep focusing on what you're learning now. When you've completed your learning for the day take a look at that list and do some searching to see what shows up. See if there are other things that show up and write them on your list. These concepts might not make sense at the moment but having that list available and referring to it might help you make connections about programming that you might otherwise not make.
+
+When I was learning JavaScript I noticed someone mentioned that JavaScript borrowed from languages like Scheme. Scheme is a functional language that was based on Lisp and was created as a teaching language for functional programming and recursion. So I took a brief detour into learning Scheme (partly because it was more interesting to me than JavaScript. Call it creative procrastination, if you're being charitable). What I learned while learning scheme piqued my interest in other  functional languages and functional programming. This in turn helped me understand some of the functional programming paradigms that were becoming popular in Python (list comprehensions, lambdas, etc.). By taking a brief detour in my learning of JavaScript I learned a whole family of languages and now I feel like I understand JavaScript with more clarity than when I started.
+
+I'm not suggesting that everyone take such creative procrastination steps like I have (I'm still learning JavaScript as of this writing), but it does help to make notes of the concepts you encounter and dig further.
+
+This is one way to map out learning goals (see what shows up and be curious about how they fit together), but some folks may need a different approach. Perhaps they're under pressure to learn something to remain marketable or require some skill for their job that needs to be learned quickly. How do you map out those goals?
+
+Part of the approach I'm outlining is to help you learn how to learn. Being able to pick up something quickly is due in part to understanding how other concepts fit in with whatever you're learning. This is great if you have a lot of experience with different languages and concepts, but for those who haven't had much experiences yet it will seem like you're trying to shove an elephant through a small funnel. This is where practicing learning every day will help you. It will help you break apart larger learning goals into smaller chunks and will help you see the fear and discomfort for what they truly are: acknowledgment  that you're expanding your skills into new territory.
+
+Longer-term goals are just goals that have been broken down into shorter-term goals. Focus on the short-term goals and allow yourself to course-correct as needed and follow a few connections as you desire.
+
+## Dead ends
+
+There are some times when we've picked something that we thought was exciting but turns out to not be exciting at all. There are languages that I've encountered that I don't find engaging at all.