[Edu-sig] The keyhole problem and learning environments
Paul D. Fernhout
pdfernhout at kurtz-fernhout.com
Thu Jul 13 22:58:58 CEST 2006
While looking around the web looking at issues related to Squeak and
Python and 3D GUI issues(*), I came across this:
"The Keyhole Problem".
http://www.aristeia.com/TKP/
From there: "This is the web page for my current book project, The
Keyhole Problem. The book explains how some kinds of constraints in
software systems decrease the quality of those systems in many ways. It
proposes practical steps programmers can take to avoid these constraints.
I call the constraints I'm interested in keyholes: arbitrary restrictions
on your ability to see or express something. The name is motivated by the
analogy of looking at a room through a keyhole in the door. I'm especially
interested in keyholes that programmers can easily avoid, i.e., on
gratuitous keyholes. The book defines a number of such keyhole types,
gives a variety of examples of how they manifest themselves, explains why
they are harmful, and describes how they can be avoided or mitigated. "
While much of the book seems to be more about specific smaller programming
issues, metaphorically I think that the general metaphor relates to my
concern about promoting web-based development environments for Python
beginners. Especially having seen the alternative as advanced by Smalltalk
development environments thirty-odd years ago, I am concerned that such
efforts may be creating experiences of looking through lots of keyholes
instead of feeling increasing mastery of a powerful development
environment. Maybe this is also a spin on what Kirby uses other language
to describe related to when people try to hide the guts of GNU/Linux.
Now, that doesn't mean that it is not worth making web tools, just that
this is a concern, to be weighed against the advantages of getting people
doing any programming at all or having an easy way to deploy educational
Python simulations, and I think it worth reflecting on to see if one can
both get the cake of people using Pythonic simulations easily and eat it
too by letting them change those simulations in unexpected ways.
Consider again my previous mention of "transient" versus "sovereign"
http://www.cooper.com/articles/art_your_programs_posture.htm
applications. I accept the idea that when you want to know something
specific it may be nice to find a canned simulation about it on, say, a
Wikipedia page. But, what I want is a way for people. when they wish, to
go further, and turn that "transient" experience of interacting with a
canned simulation into an ongoing expandable experience using "sovereign"
development tools. For a decade that has always been my indirect goal with
plans for our garden simulator -- to present something complex and
educational, yet open to the user to easily build on, tear down, or just
go further with, and that has been part of what has driven my interest in
Squeak and now Python. Essentially, after the user looks through the
keyhole of the specific simulation running, ideally they can open the door
and walk into the simulation with easy-to-use development tools and start
making changes. For the web systems, I would have less problems with the
concept if it was easy to easily point your large development tool at the
web page, download the code, and then keep modifying it (and republish it).
I think this also returns to earlier comments on how to design a good
graphical context for Python newbies -- one that just lets you do some
interesting things easily (a keyhole) versus one that makes such things
easy but still gives you power to move beyond that and do general graphics.
Thinking about a 3D turtle vs. 2D turtle in that context, then maybe a
same idea would be to have a turtle that does 2D by default with a simple
API but also supports complete 3D operations in an extended API for people
who suddenly have an interest in going further.
Part of this of course comes from pedagogical philosophy -- restrict what
kids can do at the moment versus point them to interesting things and see
what happens. I guess one could have a system that restricts at first and
gradually unlocks. Games are often structured this way as you proceed
across levels or acquire new abilities. While that is looking at it from a
pedagogical point of view, this issue pops up in lots of contexts. For
example, emacs has tons of key bindings, and it is easy for a beginner to
press one by accident and instead of getting a "beep" they get some
completely unexpected behavior which they may not be able to back out of
easily. It might be nice if for beginners only some of the key bindings
worked, and they could be gradually added as needed in an easy way.
Similarly, a criticism leveled in the link below on Squeak is that it is
very easy to just break Squeak in various ways from the advanced shooting
yourself in the foot by making a base class change that causes an error
window to open when opening a window :-) to simple things like tearing off
a window's close box in Morphic. PataPata has variations of the same
failure modes too, so it isn't specifically bas about Squeak, just a
general class of problems that are not always easy to solve. Somehow one
want to lock certain features, or hide certain things, but still make them
unlockable under certain situations. LearningWorks (based on VisualWorks
Smalltalk) also addressed some of these issues hiding frames in the
debugger related to internal operations from beginners.
Anyway, just pointing out that "The Keyhole Problem" is perhaps another
metaphor to use in thinking about how to design software which is both
easy to learn and also worth learning and using for itself over the long
term. :-)
--Paul Fernhout
(*)Some random snapshot links along my thought path leading to that:
http://pyui.sourceforge.net/ [Just started a 3D PataPata version and am
thinking about using this]
http://twistedmatrix.com/users/glyph/rant/sqcr.html [5 years out of date,
but echoes my own similar frustrations with Squeak; came across as I need
twisted or another API if I can get a Tkinter process to inspect the 3D
OpenGL GLUT world I just started]
http://www.twistedmatrix.com/users/glyph/rant/python-vs-java.html [For
comparison to Squeak, six year old negatives about Java, but they have
been mostly resolved technically (though license issues remain).]
http://patricklogan.blogspot.com/2003/12/game-programming-with-python-and-pyui.html
[when looking to see comments on PyUI]
http://patricklogan.blogspot.com/2003/10/craving-rich-gui.html [Which
mentions the Keyhole Problem]
More information about the Edu-sig
mailing list