[Edu-sig] pedagogy, programming environments, and readings

David Scherer dscherer@cmu.edu
Sun, 6 Feb 2000 13:57:18 -0500


At the risk of holding a mere signature quote up as a straw man, let me hold
your signature quote up as a straw man :)

>"Computer Science is no more about computers than astronomy is
> about telescopes."
>                                             -- E. W. Dijsktra

Is CP4E about computer science?

Computer science is certainly a discipline valuable to software
professionals, and I happen to think that it would be valuable to people in
many other fields, also.  However, I don't think that teaching CS is a
primary goal of CP4E or of all of the people in this SIG.

CP4E *is* about computers.  It's about the incredibly versatile machines
sitting on all our desks, and (soon) in our pockets and around our wrists
and in our clothing and cars and walls.  It's about giving ordinary people
some real control over those objects, the basic tools they will need to
learn more about them, and the freedom to change or extend software that
isn't right for them.  It's about billions more eyes to make bugs seem
shallow.  It's about the (perpetual) software crisis.  It's about the
powerful ways that computer programming can be used to teach *other*
subjects.  If you can write a computer program to do something, you
understand how to do it.  If you write a computer program to model
something, you might reach new insights about it.  If ordinary educators can
write educational software, there will be great educational software.  If
ordinary scientists can write scientific software, there will be better
scientific software.  If ordinary writers could write writing software,
maybe there would be better word processors!

THAT is how CP4E should differ from "the rest of the world."  CP4E will
teach everyone to write (perhaps small) REAL software that serves their
needs.

None of this requires the deep understanding of computational processes that
computer science provides.  None of it requires tail recursion.  None of it
requires proofs of program correctness, or asymptotic analysis of running
time, or new results in graph theory.  What it *does* require is a
programming language capable of interacting with the world around it, and
environment that does not present unnecessary obstacles to the use of the
languge, and a curriculum for teaching basic programming, and evangelists to
spread the word once it's all ready.

Certainly one of the things that could be built on that foundation would be
real CS instruction.  Imagine a first-year CS course that did not have to
spend *any* time on syntax or basic programming, because everyone already
learned that in first grade.  It is, however, silly to ignore the value of
programming for teaching geometry, physics or engineering.  It's worse to
ignore the value of programming, even in the hands of someone with little
theoretical understanding, for getting real work done in the real world.

Further, I don't think that the attitude about pedagogy advanced by Dijsktra
is at all useful to CP4E.  He had this to say about the old MacGNOME
environment:

|I was recently exposed to a demonstration of what was pretended
|to be educational software for an introductory programming
|course.  With its "visualizations" on the screen it was such an
|obvious case of curriculum infantilization that its author
|should be cited for "contempt of the student body", but this was
|only a minor offense compared with what the visualizations were
|used for: they were used to display all sorts of features of
|computations evolving under control of the student's program!
|The system highlighted precisely what the student has to learn
|to ignore, it reinforced precisely what the student has to
|unlearn.  Since breaking out of bad habits, rather than
|acquiring new ones, is the toughest part of learning, we must
|expect from the system permanent mental damage for most
|students exposed to it.

My aunt taught me BASIC programming at age 5 or so, not that long after I
learned to read.  Despite everything Dijkstra and others have said about
that language, my brain was not damaged, any more than learning to say
"Da-da" or "Di-di-di-dat" (don't do that) permanently damaged my
professional writing ability.  Instead, it gave me one more perspective with
which to look at the many other things I was learning as I grew up.

Much later I taught myself Prolog.  Played with Visual Basic 1.0.  Taught
myself C++.  Learned Pascal.  Forgot Pascal (good riddance, too :).  Wrote a
couple of little languages, then forgot them, too.  Wrote the computer game
that won the first annual Independent Game Festival.  Then I learned some CS
(actually, I'm still a sophomore in Carnegie Mellon's excellent program).

Every year our society unleashes millions of 16-year-olds on the roads.
They hardly know how to drive, let alone how a car works.  A few of them
die; the rest learn :)

If we can do that, we can teach people to write code and hand them the keys.
Then we can worry about whether they understand what they are doing.  Maybe,
having glimpsed all the power available to them, they will actually *want*
to learn more.

Dave Scherer

> -----Original Message-----
> From: edu-sig-admin@python.org [mailto:edu-sig-admin@python.org]On
> Behalf Of Matthias Felleisen
> Sent: Sunday, February 06, 2000 12:36 PM
> To: edu-sig@python.org
> Subject: [Edu-sig] pedagogy, programming environments, and readings
>
>
>
> Dear Python CP4E-ers:
>
> I follow your discussions with great interest as an outsider
> and would like to comment/suggest a few things.
>
> It surprises (and saddens) me that so much enthusiasm is spent on
> discussions with so little background information. Our discipline
> is a science with a large body of research (not educational)
> literature. Other communities have gone through the discussions on
> how implementations of IDEs relate to pedagogy and vice versa. For
> example,
>
>  1. Your community is not the first one to discuss case-sensitivity
>     and case-insensitivity. Why not check how they dealt with the issue?
>
>  2. You're not the first to discuss the merits of tail-call optimizations
>     in a pedagogic context. Study some of the recent pattern literature
>     on OO design and then consider why tail-call optimizations are
>     essential. Don't shoot from the hip with lots of <winks> and <grins>
>     and <G:->. Unless, of course, you have too much time at your hands.
>
>  3. The same applies to GC.
>
>  4. The connection between IDE design and beginners, at all levels, is
>     important and has been recognized as such. We have published
> a paper on
>     this, among others.
>
>  5. Nobody (as far as I can tell) has raised the question how you want to
>     differ from the rest of the world. What value do you add? Playing with
>     worlds? Yes, Pappert has suggested it. Has anyone checked
> whether he and
>     his team have done anything about it? (They did.) What is new about
>     Pythin's pedagogy vs the prevailing, argh, C++ pedagogy? Etcetc.
>
> My goal is not to be negative. I am only suggesting that you study what
> exists, clarify where you want to go, and advertise why your ideas and
> (future) curriculum is better than what's out there. While we, the
> outsiders, discuss, the rest of the world gets entrenched into the next
> fashion wave and we will have to battle it.
>
> -- Matthias
>
>
> Matthias Felleisen
> Professor of Computer Science
> Rice University
>
>  For a new way to look at the world of high school computing,
>        see http://www.cs.rice.edu/CS/PLT/Teaching/Workshops/
>
> "Computer Science is no more about computers than astronomy is
>  about telescopes."
>                                              -- E. W. Dijsktra
>
>
> _______________________________________________
> Edu-sig mailing list
> Edu-sig@python.org
> http://www.python.org/mailman/listinfo/edu-sig
>