Teaching programming is not getting easier. When I offered the Python course I had a book in mind. I figured that would make the course much easier to teach. Two weeks into the course I switched books for something a bit better written and a bit more comprehensive. This is actually the first time I have followed a book closely when teaching programming. I am using the book simply because my Python experience is nil. I like the book, it does want I think a book should do, gives enough information to learn from but not so much that it holds your hand and does the problem solving for you. So I like the book. That solves absolutely nothing. The kids won’t read it. If I give the kids an easy (to me at least) problem like “find the sum of the odd integers in this list” I still get the look from at least half the class that I might as well of asked them to build an anti-gravity engine for a flying car. Teaching syntax is easy. The kids write the syntax down in their notes or save a code snippet and they have the idea what it does. Getting from the given exercise to the point where they type relevant code is a whole different story. I cannot find a programming book that teaches that skill.
Experience has taught me that the average person does not want to think, be it a high school kid or college kid or soldier or your average adult. Thinking is work and can easily result in failure and embarrassment. Thinking is hard work. That step between the given problem and writing relevant code requires thinking, and sometimes lots of it. This is the point where teachers get the inevitable “but this is too hard” whine thirty seconds after assigning the problem and well before the kid has really tried the problem.
I used to be a math teacher and math has somewhat the same thinking requirements and the same issues. The big difference is the kids would have 10 home work problems a night, 8 of which were very easy to do so they would do those and ignore the hard ones. The result would be an 80%. With math there are a lot of problems with incremental steps of difficulty for almost any new concept. Those students that can do the 70 or 80% in math survive just fine. In math I usually have several different teaching strategies for a concept. I have multiple “gimmicks” for devolving problems to make them easier to solve. I have other math teachers to ask for new approaches and a whole lot of cool stuff on the internet to use as resources. Programming on the other hand has diddly.
In programming there are 4 homework problems over the period of a week, none of which are “easy”, and all require some problem solving and thinking. There is somewhat of an incremental progression to the problems but that step from written problem to code is always a big one. It is somewhat similar to solving word problems in math, every student’s favorite task. For programming there are no colleagues available that have as much or more experience to pull teaching ideas from, if there are any other programming teachers at all. There are no pedagogical resources anywhere online for teaching strategies. After watching a number (3) of programming teachers teach it seems the teaching strategy is pretty consistent; show and tell and hope.
A kid can do pretty well in high school just with an average memory. In math memorization of techniques can go a long way. In programming memorization is a trivial part of the skill set needed to succeed. The primary skills needed are problem solving, strategizing, devolving problems into sub-tasks, interpreting, and general full bore head scratching. Those are an absolute bugger to teach, especially to kids that are not all that interested in learning those difficult skills. I will go out on a limb here and claim the difference from the good students (top 10%) and the rest is the willingness and desire to improve on that list of skills. I will go way out there and claim that the difference between a great teacher and a good teacher is a great teacher can get a good part of that lower 90% to want to improve that thinking related skill set. I strive to be a great teacher but I have one little character flaw holding me back – I like programming for the challenge. This does not equate for about 90% of my students. So I am back to teaching programming is not getting easier.