Additional editing in chapter 6
authorCraig Maloney <craig@decafbad.net>
Mon, 19 Aug 2019 11:58:12 +0000 (07:58 -0400)
committerCraig Maloney <craig@decafbad.net>
Mon, 19 Aug 2019 11:58:12 +0000 (07:58 -0400)
chapter06.md

index 87990fb191373aaffeeafd4ef55aa25e5b45945d..de3db55f4bac351dfa852565db876b6c2da782be 100644 (file)
@@ -2,37 +2,37 @@
 
 ## The changing landscape of programming
 
-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). 
+The one constant in the field of programming is that it is always in flux. Programming languages come into prominence and then fade away over time. What once was a given is now considered obsolete (or even "considered harmful", as many essays will point out). 
 
-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.
+When I graduated from 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 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.)
+Programming requires flexibility. It's difficult to learn only one way of doing things and have that remain relevant 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 search for articles describing the state-of-the-art technology from 20 years ago and notice how much of it you recognize.)
 
 ## Learning to learn
 
-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.
+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'd 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.
 
-For me I've found that some simple principles work best for me. The first is repetition. I learn better when I do something daily, over and over again, in small chunks. The second is having a small goal that I can achieve. So for me having a daily practice time on a project where I can work toward an 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 made time to complete 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 working, finished game) and a time-frame to accomplish it (one week). Over the years I've learned more about Python with various projects (both professionally and for myself) that had daily practice and clear end goals.
+I've found that some simple principles work best for me. The first is repetition. I learn better when I do something daily, over and over again, in small chunks. The second is having a small goal that I can achieve. So for me having a daily practice time on a project where I can work toward an end goal works best for me. When I was learning Python I enrolled in PyWeek, 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 made time to complete my 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 working, finished game) and a time-frame to accomplish it (one week). Over the years I've learned more about Python with various projects (both professionally and for myself) that had daily practice and clear end goals.
 
 You'll need to experiment to see what works best for you. The underlying principle is that your learning process should be something that you can use for any language or concept in programming. It should also offer the least amount of resistance to your learning. Your ability to learn and adapt will be vital to your experience as a programmer, so understanding your learning process and what works best for you will help you in this process.
 
-At the very least set aside 10 minutes per day as a container (see previous chapter) for focused reading and learning. There's a lot to learn in programming and creating habit of learning will help you keep up. But also keep it small. A lot of information can overwhelm you into thinking that you can't possibly learn it all. You're right -- you can't learn it all in one sitting. If someone told you to drink one of the Great Lakes in one sitting you'd be hard pressed to complete the task (note: please don't attempt this!). If, however, you filled a glass of water several times a day from one of The Great Lakes and drank it (10 minutes at a time) you'd start to make an appreciable dent in the reduction of that lake over your life-time. (Sure, it might not look like much on the outside, but that's the junction where metaphors and reality break down).
+At the very least set aside 10 minutes per day as a container (see previous chapter) for focused reading and learning. There is a lot to learn in programming and creating a habit of learning will help you keep up. Remember, though, to keep your learning contained in small chunks. A lot of information can overwhelm you into thinking that you can't possibly learn it all. You're right -- you can't learn it all in one sitting. If someone told you to drink one of the Great Lakes in one sitting you'd be hard pressed to complete the task (note: please don't attempt this!). If, however, you filled a glass of water several times a day from one of the Great Lakes and drank it (10 minutes at a time) you'd start to make an appreciable dent in the reduction of that lake over your life-time. (Sure, it might not look like much on the outside, but that's the junction where reality and metaphors break down).
 
-Each day you have an opportunity to learn more about the realm of computers and computer programming. Taking a small part of each of those days to learn a little bit more will help you on your journey.
+Each day you have an opportunity to learn more about the realm of computers and computer programming. Taking a small part of every day to learn a little bit more will help you on your journey.
 
 ## How to choose what to learn
 
 There are many opportunities to learn, whether it be via books, tutorials, videos, or computer-based training. There's also a myriad of different topics to learn. How do you decide which one is most important to learn? How do you manage what you're learning? How do you keep from getting overwhelmed with the options available?
 
-This gets back to focusing on one thing at a time and listening to how you learn best. This feedback will help you decide what to learn next. One approach is to think about the things that you're most passionate about right now; what excites you at this moment. If there's something that you're eager to learn then start there. If you have multiple things that are exciting or interesting to you then write them down on a list and see if you are more drawn to one of the topics than the others. If you're still having trouble deciding from this list then pick one at random (roll some dice or create a random-number generator to select one --- that could be a project).
+This gets us back to focusing on one thing at a time and understanding how you learn best. This feedback will help you decide what to learn next. One approach is to think about the things that you're most passionate about right now; what excites you at this moment. If there's something that you're eager to learn then start there. If you have multiple things that are exciting or interesting to you then write them down on a list and notice if you are more drawn to one of the topics than the others. If you're still having trouble deciding from this list then pick one at random (roll some dice or create a random-number generator to select one --- that could be a project).
 
-If you have trouble thinking of something to learn and are struggling to come up with one item that is exciting to you then give yourself permission to browse and see what is out there. Look around and see what people are talking about. Head to a programmer meeting to see what they're talking about. Or, if you're really stuck, browse some job listings to see what employers are looking for and see if that sparks some interest.
+If you have trouble thinking of something to learn and are struggling to come up with one item that is exciting to you then give yourself permission to browse and find what is out there. Observe the conversations of other programmers and find out what they are discussing. Head to a programmer meeting to follow the discussions of what they're talking about. Or, if you're really stuck, browse some job listings to find out what employers are searching for and notice if that sparks some interest.
 
-This isn't about picking the most important thing or the most useful thing (though your current situation may add some urgency to certain topics over others) it's about figuring out what has your attention and where to put your focus right now. We're not concerned with making the perfect choice that will get you your next job or bolster your career. This exercise is about making a choice to learn something interesting and sticking with it long enough to learn more about it.
+This isn't about picking the most important thing or the most useful thing (though your current situation may add some urgency to certain topics over others) it is about figuring out what has your attention and where to place your focus. Don't be concerned with making the perfect choice that will get you your next job or bolster your career. This exercise is about making a choice to learn something interesting and sticking with it long enough to learn more about it.
 
-Once you have the topic you want to learn then it's time to focus on learning it. If you have a preferred methodology (books, videos, tutorials, classes, etc.) then spend a some time (no more than an hour or so) researching what is available to help you learn it. Some topics have beginner-friendly resources available that list off things that the community believes are helpful for programmers just getting started. Others may require asking questions of the community on where to start. Even something as simple as a tutorial can be a good way to get started with this exercise.
+Once you have chosen the topic you want to learn then it's time to focus on learning it. If you have a preferred methodology (books, videos, tutorials, classes, etc.) then spend some time (no more than an hour or so) researching what resources are available. Some topics have beginner-friendly resources available that list off things that the community believes are helpful for programmers just getting started. Others may require asking questions of the community about where to start. Often something as simple as a tutorial can be a good way to get started with this exercise.
 
-If you can find some resources in a short amount of time that's great! Start your learning process with those resources. Don't worry if they're the right resources or worry that they might lead you down the wrong path, just get started with them; you'll come back and evaluate if those resources are going to work for you. For now we're more interested in just getting started.
+If you can find some resources in a short amount of time that's great! Start your learning process with those resources. Don't worry if they're the right resources or worry that they might lead you down the wrong path, just get started with them; you'll come back and evaluate them later. For now we're more interested in just getting started.
 
 One trap that I'm guilty of is trying to find the best resources for learning a topic. I'll spend hours looking for the right book, the right videos, the right courses; whatever it is I want to find the best stuff available. Part of this is that I want to reduce the amount of false-starts while learning a topic. This seems like a noble pursuit (after all, why wouldn't you want the best materials available?). It's also a trap and can lead you into spending more time thinking about how you're learning rather than actually learning. Worse, if the material starts to confuse you (which is highly likely when you are learning something new) you'll spend your learning-time wondering if you made the right decision picking this material. You'll wonder if you chose the right material and continue searching for the best material (perhaps those good and great reviews really didn't know what they were talking about after all?) This diminishes your ability to learn the topic because you're more focused on discerning the quality of instruction and not spending time on the actual instruction.