Learning to Learn

Jan 3, 2004 AM/Home

Admittedly I don't know diddly about teaching, but I've been thinking an awful lot about what it means to be a good teacher. Sometimes consciously, and sometimes not so consciously. This morning I caught a glimpse of a real requirement for teachers that has nothing to do with tests or checklists or anything else.

Class is out, so I've been learning Objective-C and Cocoa in the evenings, bear with me. This is the programming language and class library behind the new Macintosh operating system from Apple (originally from NeXT). I've been plowing through the first of several books, trying to sneak in a couple hours a day when the kids'll let me. My youngest daughter Piper is tearing apart my bookshelf as I write this, so I've got a brief moment. What interested me most though, was I caught myself learning. No, not that fake crap that most high school and college students call learning as they sit through 5 classes in a row. I'm talking about learning learning.

I had run into a section of the book describing Objective-C's memory management scheme. Managing memory is one of the toughest beasts around for virtually any computer language, and you just can't avoid using memory so you just know you better learn this stuff well or you'll be chasing bugs from here to eternity. I tend to think of memory management as a room full of toddlers (programs) all playing with a box full of balls (memory). The trick is to try and get the toddlers to put away the balls when they're done with them so that you don't run out, or trip over one, and there's lots of techniques for doing just that. One of the lower level, and most common languages, called "C" pretty much relies on each toddler putting away their ball when they're done with it. So of course most of your time writing C programs is spent trying to assure yourself that you've actually put away all the balls you were playing with (and oh man, I'm not kidding. Its damn hard).

Java, a higher level computer language took a different tact, they implemented a thing called garbage collection so that programmers wouldn't have to worry about putting away their toys all the time. The garbage collector is a bit like an adult walking around the room picking up all the balls that no one is playing with. So lots of toddlers like to think they don't need to worry about memory management ever again, they just toss a ball away when they're done with it. Well, not quite. On a day to day level its great, but those pesky toddlers still tend to run into trouble in special cases, like if they're playing catch for example. Along comes an adult garbage collector who snatches a ball out of the air between two toddlers and thinks, hey, no one's playing with this (there's no toddler right here is there?), I better put it away. Both toddlers immediately cry (crash) and the programmers wonder what in the heck happened. Which is not to say you can't play catch, but you've got to be cognizant of that ol' beast memory management and, well, the behavior of the adult garbage collector.

Objective-C has taken yet another tact, they have each toddler mark the ball they're playing with. When you're done playing with it, just remove your tag and a nice adult attendant will come along and put your ball away for you. So you can do stuff like play catch easily enough, but you have to remember to put your tag on whatever ball you're playing with and it'll work out. Which has its own set of issues, like when you're done with a ball, but someone else wants to play with it for a while. Whose tag's on the ball? And if I take my tag off before you put yours on, the adult attendant might pull it away, right out of our hands ... sure to make both toddlers cry (crash).

Playing catch is analogous to passing objects between two programs that may or may not even be on the same computer, which is an incredibly useful thing for distributed computing. Handing a ball from one toddler to another (and never expecting it back) is similarly useful in other situations. I'm not being academic.

So that's what I caught myself doing. Writing these tiny infinitesimal programs that didn't do much more than pull a ball out of the bin, tag, untag, watch the adult come and clean up. Put two tags on, remove one and see if the adult comes out, hand a ball from one toddler to another and so on. In short, I was experimenting, and I was testing the limits. In shorter short, I knew how to learn for myself (at least in terms of a computer language). Sort of what my kids do to me on a daily basis ... test the absolute limits of what they can get away with. They know how to learn. Chalk one up for the young.

And that's a long story to say, I finally hit on one of the fundamental requirements for a teacher. If you haven't mastered the fundamentals well enough so you can learn for yourself within a topic, you've got no real business teaching it.

It reminds me of Jacques Pepin's book "The Apprentice". I haven't read it yet, and I've got to borrow it from the library (note to self). But I do remember a great interview that Fresh Air had with him several months ago. He stressed the fundamentals again and again. You couldn't be creative in the kitchen without having mastered the basic techniques. Is it any big surprise then, that my sister's [she's trained as a chef, but worked as a pastry chef] break through recipes (teaching) were with desserts and not, say, grilled meats? Which is not to say there's something wrong with her meat grilling. But rather, look at her strengths.

I've been getting a lot of questions from friends and family about why I didn't go and get an emergency credential and get out there and teach *right* now. But I have puzzled out why I didn't and don't. I feel pretty confident I'm sort of ready to teach a programming class (from a purely topic perspective). But I'm not to the point yet where you could plop me down in front of, say a Reimann Geometry book (I know nothing about Riemann geometry, but that's the whole point) and I'd be able to puzzle my way into understanding the fundamentals that it exposes. A few more years on the rocky, harder road and I will.