[plt-scheme] Re: plt-scheme type of language

From: Carl Eastlund (carl.eastlund at gmail.com)
Date: Fri Dec 11 18:22:14 EST 2009

Moving this part of the thread back to the list, because it was only
accidentally moved off.

On Fri, Dec 11, 2009 at 5:52 PM, Raoul Duke <raould at gmail.com> wrote:
>> At the beginner level (which I take to mean a first-year college
>> course), I would say unequivocally that only one notion of scope
>> should be introduced, and that notion should be lexical scope.
> ok, as a non-teacher, i can buy that people with real teaching
> experience might know better than i do here. :-)
> (on the other hand i'd still be devil's advocate and wonder if there
> might yet still be ways to be more holisitic even in an intro course.
> on the other hand, i'm assuming the students actually want to learn ha
> ha. i say that as a former less than ideal college student.)
> sincerely.

On Fri, Dec 11, 2009 at 6:04 PM, Carl Eastlund <carl.eastlund at gmail.com> wrote:
> I don't know if you intentionally or accidentally made this a private
> response, but I'll assume it was intentional for now.
> I'm purposely putting my rationale with all of my responses so you
> don't have to take my word for anything or assume that I know better
> than you.  If you have a different rationale, I'd love to see it.
> Then I can incorporate it into my understanding and my answer -- and
> maybe you'll change my mind.
> My reason for leaving out complexity is that beginners still have to
> grasp the fundamentals.  There are lots of fundamentals to grasp, and
> I think a first year course (or two-course progression, even) needs to
> be *more* holistic, not less, than any that might present dynamic
> scope.  Dynamic scope is a deep issue of the meaning of variable
> references.  Learning dynamic scope does not teach students how to
> represent new kinds of data, write new kinds of computation (in the
> way that recursion gives more power than flat functions, or mutation
> more power than pure), or understand and articulate new properties of
> their programs.  It just gives them another tool to solve the same
> problems.
> Once students have mastered the basics, you can compare lexical scope
> to dynamic.  Lists to vectors.  Recursion to loops.  Conditional
> dispatch to pattern matching to OO method calls.  The first time
> around, the students just need one of each.  That's the kind of
> "holistic" approach I have seen work very well.
> --Carl

On Fri, Dec 11, 2009 at 6:11 PM, Raoul Duke <raould at gmail.com> wrote:
> hi Carl,
> it was a mistake (i hate gmail a lot sometimes, blah) but it wasn't a
> bad one :-)
> there are lots of things i'm forgetting or unaware of or ignoring when
> i say that more can be presented (like: unpassionate students; that i
> know more now than i did then; the ability of teachers; the amount of
> time anybody has in class vs. the highly compressed syllabus; that our
> educational system might be fubar from the get-go; etc.). and it
> depends on what we're talking about -- i mean, if dynamic scope of
> variables is basically bull-hooey then fine (but, if we're talking
> about other similar-but-not-evil dynamicness, then...)
> my main thought is that i think showing opposites or failed attempts
> can be great didactic tools, even and sometimes especially for
> beginners. i base this on my own experience. i am often better able to
> learn / learn more quickly when i get things from a compare/contrast
> perspective.
> sincerely.

Certainly, Raoul.  I agree 100% that showing failures can be a great
tool.  There is a question of the level of abstraction, though.  I
would not suggest introducing a whole new topic, the opposite of the
previous topic, to contrast success with failure.  I would, however,
discuss correct and incorrect ways to design or implement a program
within a given topic.  We often do this in our beginner course -- we
let students present solutions (or parts of them) to classroom
exercises, and see through most mistakes until they hit a stumbling
block and have to analyze the issue.

Dynamic scope is a great counterpoint for an upper level undergrad (or
lower level grad) course.  For a beginner course, I think a better
counterpoint is using 0 instead of 1 as the base case for iterative
multiplication, or forgetting to give a second argument to cons.


Posted on the users mailing list.