[Edu-sig] Rich Data Structures

Kirby Urner urnerk at qwest.net
Sat Oct 1 00:54:13 CEST 2005

So I'm meditating on pedagogy again, having signed up for quite a few hours
of presentation time, regarding Python etc.  I've got a PSU class (high
schoolers my target audience), and a volunteer gig with PPS, teaching
math/CS to 8th graders (under a union member's supervision).

For a long time, I've felt some frustration with published CS teaching texts
because they don't put much textured information into their example data
structures, by which I mean, I've never seen the Roman emperors, in chrono
order, or the succession of rock bands played in by drummer X or guitarist
Y.  Not much about the history of trains, pre or post diesel.  Or lets
compile some data on Barbie's boy friends (just Ken?) -- or Buffy's (most of
them vampires).

Here's an opportunity to impart the humanities entirely tangentially to the
engineering curriculum.  As drivers of a new math/CS hybrid, I think we now
realize that such opportunities for orthogonality should be prized, not
sneezed at.  Retaining student attention and interest, a precious commodity,
is a worthy goal, and if a percentage of your student gain most from gazing
absently at your wall posters, then at least make sure you've got some
interesting wall posters (like, have you considered plasma?).  

Pile on opportunities for your lurker/auditors to jump to a higher
bandwidth, even at the risk of pointing to content beyond your own specific
scope (e.g. I'm no pro astronomer, but I'm happy and eager to share the
experience with my students).

So like here's what I mean (somewhat decayed fragment, imagine found in some
archeological dig):

moons = {
    'Jupiter': ['Metis','Adrastea','Amalthea','Thebe',
    'Saturn': ['Pan','Atlas','Prometheus','Pandora',
    'Uranus': ['Cordelia','Ophelia','Bianca','Cressida',
There're a few goals here, not just to impress ourselves with the number of
moons Jupiter's got, or Saturn.  And pretty cool how much Shakespeare got
mapped, at least in this particular namespace.

We also want to demonstrate nesting, and here in this example I've not yet
gone very deep:  string-indexed lists of strings, basically.  But of course
we could go with things like lists of tuples of dictionaries of tuples of
named functions (one could write some algorithm to randomly deepen nesting,
always/only per the grammar of the language, e.g. per Python in this case).

The push here is towards ultra-fluency when first learning the language, and
then it's OK when adult-minded rust sets in, and one's data structures
retreat to sane depths.  That comes later, in the workaday world, when we've
got weekend plans and want to get home and don't necessarily have time to
appreciate some geek's damnably clever code.  

We acknowledge extreme fluency as a phase in the training, yet we don't
insist these standards be met in the average workaday world.  On the
contrary, we insist on more a mellow programming style -- and that's both
reasonable and right. Overly clever code is simply overly taxing to decipher
and debug.  Yet sometimes we need it and use it.

We like our clowns to stay clever over time, true, however not every Python
programmer should come to work wearing big shoes and a red nose.  At least,
not all at the same time.  Vary your diet -- the usual middle way type
teaching, as relevant in CS as in everyday living.


More information about the Edu-sig mailing list