[plt-scheme] The perfect teaching language--Is this too much to ask for?
On Jun 13, 2009, at 7:04 PM, Todd O'Bryan wrote:
> Have you never had a student try to return a number instead of a posn?
> Or (much more common and much more painful) in the chapters on binary
> trees and family trees, students get confused about the kinds of
> structures they're building and bury a mistake so deep in a structure
> that by the time they get the error message it's not clear where they
> painted themselves into a corner. These are the problems that they
> spend ten or fifteen minutes staring at, and when I get there, I know
> it's a type problem, but there are three or four functions, all with
> working test cases that could have triggered the problem, and I have
> to spend 5 minutes unwinding everything with them.
One of the things I've run into frequently in student programs is
event handlers (for world.ss) that return a different type of "world"
than they took in. This doesn't generally produce an error message
until the NEXT event, at which point the student gets an error
message from a different handler that may be perfectly correct.
Here's a suggestion: add to world (now universe) an optional "legal"
handler (defaulting to (lambda (x) #t) ) that is applied to the model
returned by every handler, before doing anything else with that
model. If it returns false, the animation ends with an error message
saying "Invalid world returned by ___ handler" (fill in the blank
with "mouse", "tick", or "key").
For example,
; The model for this animation is a non-negative number.
(legal-when (lambda (r) (and (number? r) (>= r 0)))
; End the animation when the model exceeds 300.
(stop-when (lambda (num) (> num 300)))
; Tick handler: add1
(on-tick add1)
; Redraw handler:
(on-redraw (lambda (r) (circle r "solid" "blue")))
This would not only make it easier for students to find their bugs,
but give them some actual code to write at the "choose a type for the
model" step of the animation recipe. Students have a tendency to
skip steps that don't produce code.
Of course, enforced contracts would take care of the issue too, but I
think we'll have to wait longer for them; this addition to "universe"
could be in the next release.
Stephen Bloch
sbloch at adelphi.edu