July 16, 2004

On the pedagogy of intro CS

The workshop I've been attending this week is called How to Design Class Hierarchies, about how to teach introductory computer science. It follows on the heels of TeachScheme!, whose primary philosophy is that the job of an intro class is to teach CS concepts, using a language with a very light, transparent syntax, rather than having to get bogged down in the heavy syntax of a language like Java. Of course, eventually you do get to Java, and what then? The thesis of this pedagogy is that you should keep developing concepts, and introduce language constructs only as they are well-motivated by the conceptual development.

The most revolutionary development, though, is that right off the bat it teaches class hierarchy. The notion of Shape being a class that is the abstract union of Circle and Rectangle (for instance) is one of the first things developed. The only concept taught before that is that of structured data, of treating objects as collections of related data. As crazy as it may sound at first, I think it'll work pretty well.

My main worries have to do with fitting it into our larger curriculum at Knox. Much though I'd like to start with a term of Scheme (as is presumed by the HtDCH book, at least), we don't right now. That means that there are some concepts, like boolean logic, that are presumed for HtDCH but that I'll have to teach. Furthermore, when kids finish the first term course, someone will have to take over teaching the second class, and so I need to bring them to a good stopping point, which could be tricky. And finally, the current plan is that after Winter 2005, I won't be teaching 141 (I think John is taking it), so I really need to get the other CS profs on board.

The IDE is also causing me some concern. I really like the notion of language levels, restricting kids to just a subset of java until they're ready to move on (and giving them error messages tailored to the level). But BlueJ doesn't implement them, and ProfessorJ---the official IDE of the program---strikes me as possibly not ready for prime time just yet. I'm pretty conflicted about which one I should use, since they both have their pros and cons. Just today, I think I decided that I'd teach in the Linux lab---which we control---rather than the Windows lab, so that I can maybe update the IDE mid-semester. We'll see.

"Well, I figured it was Anime, and thus I needed to know how japanese it was before deciding if I cared. By "japanese" I mean does it tend to throw out lots of pseudo-mystic crap that never gets even perfunctorially explained? Are all the female voice actors most comfortable conversing in a frequency only heard by dogs? Are there commonly unexpected and earth shattering deus ex machinas, uh, I mean, "plot twists" that happen at the end of every episode then completely ignored in the next episode?
Ie: How japanese is it?" --Sam Walker

Posted by blahedo at 1:55pm on 16 Jul 2004

Screw Java. They can learn syntax on their own. Teach them Smalltalk. Class hierarchies are a small-minded hack to provide static type-checking. You don't bother with static type-checking in your first teaching language (Scheme), so why bother in your second? Java is a practical language, but not a good teaching language. Smalltalk, however, is as purely object-oriented as Scheme is functional. It also gives you first-class functions and such, like Scheme.

Teach some Java at the end of the course if you have to. But teach them object-oriented programming with a properly object-oriented language. (Note: there is a GNU Smalltalk environment.)

Posted by Greg at 3:08pm on 16 Jul 2004

I have difficulty enumerating the many, many ways in which this suggestion fails to be at all useful. Already, I can't start the class in Scheme; why do you think I'd be able to add Smalltalk? You imply that because my first-language-of-choice doesn't have static types, the second needn't; indeed, why ever add anything at all? I'm not sure if the comment about hierarchies is just a diss on type inheritance or on the entire concept of type checking, but either one's going to require a lot more backup than just a bald statement like that if you're going to try to convince me. In any case, Smalltalk isn't as purely OO as you might think. Self, now Self is OO.

Posted by blahedo at 10:58pm on 17 Jul 2004
Actually, it was tongue-in-cheek language war flamebait. Though I may get to do some work in Smalltalk pretty soon. It really wasn't intended to be a particularly useful suggestion. Posted by Greg at 6:15am on 19 Jul 2004
Valid XHTML 1.0!