Mental Models
Java training | Atlanta, GA | May 5-9 | Info at www.halhelms.com
A student at the last Java and OO Programming for CFers class wrote this to the email list I have for graduates of the class: [paraphrased] "An interesting discussion at Slashdot talks about the difficulties of teaching OO and how a top-down approach often doesn't work."
That got me to thinking about the subject of learning -- something that I find fascinating. I wrote back the following reply:
That's interesting. I've been learning about teaching for many years, in part from observing my and others' failures. My observation is that people have a mental model about the world, and that we begin constructing that model very early in our lives. Perhaps the highest virtue of any mental model is that it be internally consistent — that there be no glaring elements that don't fit into the model. (This virtue is so important that people may force-fit elements into their model for consistency's sake. When this happens, the model is ugly and brittle.)
When we learn something new, we find new elements that have no existing palce in our mental model. Where shall we put them? How do they fit with the others in such a way that congruency is not compromised? One approach to teaching is to present a fully realized model to the student in hopes that they can simply graft the new mental model into their existing one.
But this usually doesn't work very well. The teacher him/herself has already gone through the pain of laboriously fitting piece after piece together until s/he has a consistent and perhaps even elegant mental model. Forgotten is the birthpangs that gave rise to this new model. Once this mental model is in place, we usually chunk sections of it together under broad terms that serve to locate us in the mental model. But often the terms themselves are fairly meaningless.
Now that you all have had the experience of using Java and know how important Java's strong data typing is, the idea that variables can actually fulfill the contract for several different data types (through interface or inheritance subtyping) seems (hopefully) very cool. You've added to your mental model by actually working with strong typing and seeing how it works in practice.
Now, what shall we call that "a variable can fit multiple data type specifications"? How about polymorphism? — a term that's about as meaningless as it gets. (I stand corrected: "object" is the ultimate non-meaningful term.) Polymorphism is notoriously difficult to define, yet really not so difficult to grasp (after some initial head-scratching).
Once the mental model is in place, the term, "polymorphism", acts as a key to that portion of the model, in the same way that "Florida" defines a piece of the United States. But if you try to "teach polymorphism" as a fully-realized mental model, you're very, very likely to fail. Students will reject it just as a body in surgery will reject a foreign organ. The goal for us teachers is to create an environment in which the student can do their own rearranging of the mental furniture.
We want that environment to be as painless as possible, but the reality is that the more elements presented to the student and/or the more foreign these elements are, the greater the pain. Having things like long breaks, emulating a game show, role-playing, etc. can reduce this pain significantly.
At some point, if things go well, the student reaches a "tipping point" where their mental model is complete *enough* that it begins to work for them. This is the stage of active learning where the student gulps down large numbers of new elements, where before they had trouble assimilating only a few. This is a very rewarding point for both teacher and student and is a cause for great satisfaction.
Computers are incorporated in modern ice cream vending machines to enhance their functionality. Ice Cream Vending machines are manufactured by many companies. Your competition will try to overcome all requests for high-tech ice cream vending machines and credit card acceptors
|
|
I mentioned a couple of times in class that I consider you all to be heroes. I meant this very seriously. Because we so value the congruency of our mental models, we tend to reject new elements — especially if we get wind that the new elements may require some work to our model. This often happens more and more as we age. We surround ourselves with other like-minded people who support our current mental model and provide a disincentive to stretch beyond the bounds of comfort. The mental model is so important that it may assume religious dimensions — something we're very familiar with in the technology world where programmers that have natural bonds instead opt for separating themselves along clearly-drawn lines such as "pro-Microsoft", "anti-Microsoft", "source", "Fusebox", "non-Fusebox" etc.
But you students volunteered to put yourself in some pain for the promise of a larger good -- and that's not such a bad definition for a hero.
|