Editing the learning chapter
[themediocreprogrammer.git] / chapter06.md
index cf0ccbc04ebe23c416a7f66ae1b36180b3107e17..063fd4092aa8873ee4b75f6daa6cdb593a43cfe8 100644 (file)
@@ -1,17 +1,18 @@
 # The map is not the territory
 
-Discuss the ever-changing facets of programming and how keeping current with it all is both a challenge and a myth
 ## The changing landscape of programming
 
-The one constant about the field of programming is that it is always in flux. Programming languages come into prominence and the fade away over time. What once was a given is now considered obsolete (or even "harmful", as many essays will point out). 
+The one constant in the field of programming is that it is always in flux. Programming languages come into prominence and the fade away over time. What once was a given is now considered obsolete (or even "harmful", as many essays will point out). 
 
-When I graduated college we learned Pascal, Modula2 and Ada. When I started my first "professional" programming position Perl was the language of choice (partly because Perl could be easily transformed into the ubiquitous CGI scripts of the era). As of this writing I'm using Python as my main development language, and I foresee that at some point I'll likely have to look into the other languages that are becoming more common.
+When I graduated college we learned Pascal, Modula2 and Ada. Unfortunately those languages were starting to decline in popularity in favor of C. When I started my first "professional" programming position Perl was the language of choice (partially because Perl could be easily transformed into the ubiquitous CGI scripts of the era, and was considered superior to scripting tools like `awk` and traditional shell scripts). As of this writing I'm using Python as my main development language, and I foresee that I'll have to look into other languages to expand my programming career.
 
-Programming requires flexibility. It's difficult to just learn one way of doing things and make that stick for over 20 years. Think back to what the technology was 20 years ago and you'll no doubt notice that things are quite different now.
+Programming requires flexibility. It's difficult to learn only one way of doing things and have that stick for over 20 years. Think back to what was current technology 20 years ago and you'll no doubt notice that things are quite different now. (If you would like a fun exercise see if you can find articles describing the state-of-the-art technology from 20 years ago and see how much of it you recognize.)
 
 ## Learning to learn
 
-Instead of learning specific methodologies and technologies we programmers are better served by learning how to learn. That sounds simple: once we've cracked how to learn effectively then we'll be set. Unfortunately there isn't currently a foolproof way to learn that works for all people. Different folks learn better when different things are emphasized. Some learn better in a classroom while others learn best with self-directed study (books, video recordings, etc.). If you have the luxury of trying several different methodologies for learning I would encourage you to take them as much as you can. Figuring out what works for you will be key to helping you progress and grow.
+Learning specific methodologies and technologies is not a good long-term strategy for programmers. We're better served by learning how to learn, and more importantly how we ourselves learn. That sounds simple: once we've cracked how to learn effectively then we'll be effective programmers. Unfortunately there isn't a foolproof way to learn that works for all people. Different folks learn in different ways. All of us have learning styles that work better when certain things are emphasized. Some learn better in a classroom while others learn best with self-directed study (books, video recordings, etc.). Some can read a book and be perfectly fine with understanding the material while others may need more visual approaches. If you have the luxury of trying several different methodologies for learning I encourage you to use as many as you can to figure out what works best for you. Understanding what works for you will be key to helping you progress and grow.
+
+### FIXME
 
 For me I've found that some simple principles work best for me. The first is repetition. I learn better when I continually do something over and over again in small chunks. The second is having a small goal that I can achieve. So for me having some daily practice time on a project where I can see the end goal works best for me. When I was learning Python I enrolled in PyWeek, which is a one week game programming sprint where the theme is announced near the beginning and all programming happens during the week. For that entire week I devoted time to completing a game, and by the end of the week I'd learned more about Pygame (the library that I'd used) and Python than I had in the weeks leading up to PyWeek. Doing a one-week game jam (as they're currently called) is a bit extreme but it gave me a clear goal (a game) and a time-frame to accomplish it (one week). Over the years I've learned more about Python with various projects (both for myself and professionally) that had clear end goals.
 
@@ -96,3 +97,9 @@ If, however, you realize that you're really not enjoying the learning; if you fe
 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 those is because the computing landscape changed. At school I learned the Pascal language. I got reasonably good at it but over time those skills faded. Right now there's very little need for being a proficient Pascal programmer so continuing to develop my Pascal skills would be purely for my own enjoyment. I find other things enjoyable so those skills lay dormant. Should Pascal arise from its moribund state I can revisit the decision. But for now I'm content that I've made the right call. Later in my career the Java language came to prominence. I spent many sessions learning Java until I realized that I didn't enjoy the language. It felt too cumbersome to me and the directions it was taking 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 more up to speed on how objects worked so I could better understand what Python was doing and how it was different from Java. And should the need arise I can revisit my decision to learn Java and see if it's something that interests me again. 
 
 It's OK to give up on learning something for a while. We are complex beings and our interests change. We also exist in a complex industry of changing technologies and whims. What was interesting and necessary at the beginning of the year might be uninteresting and unnecessary at the end of the year. It's up to us as programmers to understand our learning process and adapt as our needs and desires change.
+
+## Approach with curiosity
+
+As beginners we engaged the computer with curiosity and enthusiasm. We don't know what to expect or how long it will take so we take everything at face value. As we learn we trade our curiosity with certainty, and our enthusiasm with expectations. The excitement we got from learning becomes the drudgery of having to continue to learn. But 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, and that spark will sustain us through the periods of uncertainty and drudgery.
+
+With each focus container we can begin again, with no preconceived notions of how it will end.