Aptitude and Teaching
A colleague caught me off guard last week with a comment: He said he never got a grade above C in math all through high school. He was a history major in undergrad and only later did a masters in math. I think I assumed that all teachers of a given subject always excelled in that subject and enjoyed it, so learning this fact about my colleague kicked off a new train of thought. Upon reflection, it’s obviously silly to think that every teacher was a star student, but I had never really considered my own relationship to computer science in this light.
I’m not the best programmer in the world, and my experience isn’t as broad or deep as I would like, but I’ve always been able to learn quickly from examples. I graduated from MIT with a computer science degree. And while I didn’t have the top grades, I’ve been able to make a living as a programmer and learn new languages. I enjoy doing computer science work. Since before I was aware of it, I’ve been building mental models in order to understand how things work. I remember really struggling to learn to drive a stick shift until my dad told me what was happening inside the clutch when you push the pedal. Then it was easy for me to learn.
Mental model-building requires making some assumptions so you can take action, and taking enough note of the assumptions that you can revise the model based on the outcome. This process is a natural match for learning how to program. It’s more or less impossible to learn a language without examples, and computers are quite patient (and durable relative to cars) while you test an idea repeatedly. On the flip side, it’s also quite dull for most students to have a teacher describe every feature of a language in excruciating detail. So we tend to give examples that we hope illustrate concepts, and then pin down the concept in a technically precise (but usually inscrutable) fashion.
Where does that leave my students who don’t build and revise conceptual models quickly? Pretty much to fend for themselves, with semi-predictable results. These students tend to miss the point of an example, focus on minutia, or fail to generalize. My colleague who got low math grades probably started out with a better understanding of how students struggle than I did. I need to be aware of my own abilities so I don’t assume everyone will learn the way I do. This is one thing to say, but another thing to really investigate: What are your own unique strengths? What exactly are you individually doing when you do something you do well?
I build models well. I’m not sure exactly how that fact should inform my teaching. One change this year is that I’m running the class at a slightly slower pace in order to include more “academic” instruction — I lecture and the students take notes on a specific element of syntax, including all the associated vocabulary and some examples that are very thoroughly annotated. This is done on a whiteboard instead of in an IDE, even though I also think it’s very important for them to see someone write, compile, and test code in an iterative process and I do that in front of them as well.
Is it working? Well, I’ve got too many independent variables, as usual, to draw any solid conclusions. In addition to the new lecture style, there are a number of year over year changes: 50% more students in the class, a shorter quiz 3 with less material, and revised lab assignments. All that told, the distribution does look nicer.
Without getting into a philosophical debate (which I don’t really have a position on anyway) regarding innate ability, I think we can all agree that identifying our own strengths is important. Then we can try to teach those strengths and also look for paths to success that don’t rely so heavily on those particular strengths.