From: thacher@renbourn.unx.sas.com (Clarke Thacher)
Subject: Getting 10 year old started in programming, Summary (long)
Date: Wed, 12 Aug 1992 13:51:22 GMT
Organization: SAS Institute Inc.

I posted about this subject last week, and I've been keep the 
responses that I've gotten.  Here's the summary.  Thanks to everyone 
who responded.

------------------------------------------------------------------------
First my original posting:

From: thacher@unx.sas.com (Clarke Thacher)
Subject: Getting a 10 year old started in programming
Originator: thacher@atlas.unx.sas.com
Date: Thu, 6 Aug 1992 14:37:07 GMT
Organization: SAS Institute Inc.

My ten year old daughter has been asking me to teach her to program.
She has had a little exposure to computers at school, but there has
not been any real programming.   I've gotten a copy of mswLogo,  but
now I don't know what the next step should be.

I would like her to be working independently as much as possible, but
it would be good to have an idea of where to nudge her.

It would be great if there were an interactive tutorial system that
could teach the fundimentals.  One of the first systems that I learned
on, the Dartmouth Time Sharing System, had a "teach" command.  "Teach"
would let anyone who wanted to sit down at the terminal (a tty33)
learn BASIC at their own pace without anyone else having to help them.

I'd like to hear from others who have experience with teaching their
own children.  I'd also be interested in some discussion about the
merits of some of the other programming language choices:  BASIC,
SCHEME, SmallTalk, C, anything else?  By the way,  I'm using a
pc clone running DOS 5 and windows.

------------------------------------------------------------------------

From: CREECH@LSTC2VM.stortek.com (Teresa Creech)

My 9 year old sometimes types in the samples out of the BASIC manuals
and executes them.  She pretty much does things on her own, with us
stopping by sometimes to see how she is doing.  She seems to enjoy it.
I know it's not programming, but it's exposure.

------------------------------------------------------------------------
From: mcw@cs.rice.edu (Michael Wirth)
Newsgroups: comp.lang.logo
Subject: Re: Logo is based on 1960s programming language research

Brian Harvey, in response to a discussion on visual programming environments,
says:
>I *still* hate GUIs.  Let's see you do "rm *.o" on a Macintoy.  They trade off
>making certain things really simple against making *everything but* those few
>things completely impossible.

Interesting comment.  He's right.  But the important thing about it is how much
it reveals about how he thinks.  Go back and read C. P. Snows lectures on "The
Two Cultures" and then review the research on left-brain/right-brain dominance.
People really do think differently.  And it's interesting to engage them in a
conversation on a test topic (my litmus test used to be: What do you think 
about Macs vs. PCs? -- Now a bit dated by the arrival of Windows), and then
rank them on the left-brain/right-brain scale.

But here's the important point:  It's not where you're centered on that scale,
it's how broadly based you are.  How many different points of view can you 
handle.  Alan Kay and Marvin Minsky are right.

Back to the issue of Logo futures.  Here the real issue is NOT whether visual
or analytic/text-based environments are better, it's: How do we integrate them?
As Peter Wegner(?), the physicist/mathematician said: All the interesting stuff
is in the cracks.  It's the interdisciplinary areas where the real payoffs are.

So I'm very interested in attempts to integrate the visual and (text) language
based paradigms.  Here are some comments on a few attempts thus far:
* Logo: A wonderful, conceptually clean programming language which can be used
	to produce programs which are often wonderfully visual and spatially
	interactive applications.  But what about visual programming?  Visual
	traces of program execution? What about encapsulation and abstraction
	of state and behavior, i.e., objects?
* HyperCard, the "programming environment for the masses": What a joke. A 
	brain-dead, trivial programming language (I probably wouldn't have
	given one of my MS students a passing grade on a language design
	project for it.)  As Ward Cunningham said: Yeh, it's "object-oriented,"
	but you don't get to pick the objects.  BUT, it does have the
	beginnings of an interesting interaction betweeen visual and text-based
	programming environments.  If we could only have HyperCard with a real
	MOP (meta object protocol) and a real programming language.
* Prograph: As noted here before, this is a VERY interesting visual programming
	environment.  I'm interested in it as much for its data flow approach
	to programming, as its visual aspects.  Because it's so different, it
	helps stretch the mind and force you to take that different point of
	view.

So as a system builder/former physicist/father, I'd be very interested in an
environment that allows me to encapsulate and deal with many levels of
abstraction, to experiment and iterate (which probably means "dynamic 
languages"), and to both program and interact with the results in both visual
and text-based modes.  I want a tool that takes advantage of both sides of
my brain.

Comments?

Mike Wirth
mcw@cs.rice.edu
(a guest at Rice.  "my MS students" refers to a former life of mine elsewhere)

------------------------------------------------------------------------
From: gam@beta.lanl.gov (Gim Mark)
Newsgroups: comp.lang.logo
Subject: Re: Logo is based on 1960s programming language research
Date: 5 Aug 92 14:31:04 GMT
Organization: Los Alamos National Laboratory

My $.02: 

My wife and I teach our boys (12, 9, 6) at home.  I tried
unsuccessfully a couple of times to teach the older boys something
about programming, first with Pascal and then with C.  This summer we
tried Object Logo, and the results have been spectacularly successful.

It seems to me that Logo succeeded where the others failed for three
main reasons.  First is the simplicity of Logo's syntax, second is the
immediate feedback of its interpreter, and third is the ease of doing
interesting graphics with Logo.  Adding current software-engineering
techniques to Logo would not, in my opinion, improve it in these
respects.

There are a couple of features of Object Logo that we have hardly
used at all, namely robotics and software objects.  In my mind
robotics is not conceptually all that different from turtle graphics.
There is a great difference perceptually, however, and I believe that
programming physical objects--things that are built and modified by
hand--will make Logo even more interesting and exciting to my kids.

Object Logo allows you to use traditionally "pure" Logo, if that's
what you want.  It offers in addition a systematic and complete
object-oriented version of Logo.  We have used OO facilities a little,
when they provided a natural way to deal with problems we were working
on.  As we attempt increasingly more complex projects, I expect that
we will increasingly adopt an OO approach.  This is partly due to the
fact that Object Logo requires the use of objects to do some things
(eg robotics and sound).  But it's also a natural way to deal with some
kinds of complexity.  So it seems to me that incorporating OOP into
Logo is a good thing to do, although it's likely to be useful only
after one has explored some of the traditional parts of Logo.

These remarks have had to do mainly with Logo as a programming
language, as opposed to Logo as a promoter of wide and rich
educational growth.  Traditional Logo offers a huge variety of
interesting ways to explore and experiment with a wide range of issues
in logic and math.  It gives practice and experience in analysis and
problem-solving.  As Pappert wrote, it can give kids their own
universe to fashion and control.

Other programming languages surely have the power to provide these
things also.  However, as my experience with Pascal and C proved to
me, other languages impose too many impediments; the language itself
must be mastered before its power can be used.  If some modernized
successor to Logo were to be planned, I hope that it would follow
Logo's lead.  Most importantly, the language itself must seem simple
and unobtrusive, but at least as full of possibilities as Logo is
already.


Graham Mark
Los Alamos National Laboratory
(505)667-8147
------------------------------------------------------------------------
From: Steven King (503) 627-2736 <sjk@stapledon.labs.tek.com>
Status: RO


You write:

My ten year old daughter has been asking me to teach her to program.
She has had a little exposure to computers at school, but there has
not been any real programming.   I've gotten a copy of mswLogo,  but
now I don't know what the next step should be.

I would like her to be working independently as much as possible, but
it would be good to have an idea of where to nudge her.

It would be great if there were an interactive tutorial system that
could teach the fundimentals.  One of the first systems that I learned
on, the Dartmouth Time Sharing System, had a "teach" command.  "Teach"
would let anyone who wanted to sit down at the terminal (a tty33)
learn BASIC at their own pace without anyone else having to help them.

    This is how I taught myself BASIC in 1974.  Brings back fond
    memories...

I'd like to hear from others who have experience with teaching their
own children.  I'd also be interested in some discussion about the
merits of some of the other programming language choices:  BASIC,
SCHEME, SmallTalk, C, anything else?  By the way,  I'm using a
pc clone running DOS 5 and windows.

    I would recommend that you teach her how to "think" instead of
    "do".  In other words, emphasize thinking in objects and/or
    structures.  Teach her how to translate what she wants the
    computer to do into actually doing it.  (The actual
    implementation is merely a mechanical issue.  The thought
    process that preceeds the implementation is what is most
    important).

    I would also keep the creativity element in there.  Have her
    draw, paint, whatever.  Playing with computer graphics, video
    or multimedia would probably be interesting to her.

    Don't forget typing lessons!  I took four years of typing in
    high-school, and it really paid off during school and in my
    career.  (I am amazed at the number of programmers who can't
    touch-type).

    Math skills help in critical thinking, and s/w in general.
    Math Rabbit may be a bit below her.  I don't know about any
    other math programs (since our oldest is only three).

    And don't neglect the "fun."

    As Knute Rockne used to say to his football players when they
    were playing poorly "Gentlemen, this is a football."  Keep it
    in the basic skills.  She will have plenty of time to pick up
    on the higher-level concepts and language mechanics involved.

    
    I think that we would all appreciate a summary of the
    responses you receive.  Good luck!

    Steven

-------------------------------------------------------------------------
e-mail: sjk@strl.labs.tek.com       |  Steven King
phone: 503-627-2736                 |  Software Technology Research Lab
voice mail: 503-727-6651            |  Tektronix, Inc.
fax: 503-627-5502                   |  P.O. Box 500   MS 50-662
                                    |  Beaverton, OR  97077
-------------------------------------------------------------------------
"Sometimes if you have a cappuccino and then try again it will work OK."
(Dr. Brian Reid)  "Sometimes one cappuccino isn't enough." (Marcus Ranum)
"A double vanilla latte always works."  (Me)

------------------------------------------------------------------------
From: salisbur@cs.washington.edu (Mike Salisbury)
Return-Path: <salisbur@cs.washington.edu>
Message-Id: <9208061624.AA10896@chilliwack.cs.washington.edu>
To: thacher@unx.sas.com (Clarke Thacher)
Subject: Re: Getting a 10 year old started in programming
X-Status: 
Status: RO

I started learning BASIC when I was nine, but this was in 1977 and
my dad was one of those 'must always have the latest gadget' kind of
guys.  He and I learned together through the beginning stages.  After
a few years, I got bored and didn't really do much more learning until
about eleventh grade when I taught myself Pascal.  C came a few years
later.

As for suggestions, I would steer you away from having her learn C first.
I think it's too confusing to start with.  I would, however, suggest
Pascal.  (Ada is okay too, except that it is far from being a standard,
and as a result the compilers aren't nearly as cheap as Pascal compilers.)
My favorite Pascal book is Oh Pascal! by Cooper and Clancy, published by
W.W. Norton & Company.  You will have to help her through the first few
chapters just to get her used to the notation, but if she's sharp, she'll
be able to handle the rest.  

If you yourself are a programmer, I'd suggest that you help her along and
keep asking her about what she's doing in the book.  Ask some related questions,
and try to clear up points that might be confusing later.  Some complicated
concepts like recursion are probably too abstract for a nine-year-old to 
comprehend on her own.

As for compilers, I'd suggest a small, cheap one without all of the supplemental
debuggers and assemblers.  I've always liked Turbo Pascal, but I suspect
Quick Pascal is good too.

I'd be glad to answer any questions.

-- Mike Salisbury
salisbur@cs.washington.edu

------------------------------------------------------------------------
From: dsmythe@netcom.com (Dave Smythe)
To: thacher@unx.sas.com
Subject: Re: Getting a 10 year old started in programming
Organization: Netcom - Online Communication Services (408 241-9760 guest)

I started at 11 on an ASR33 programming in BASIC.  It shouldn't be too
hard, especially with the nice BASICs that are around now (although I
doubt she'll see any use in the matrix-invert built-in function for a
few years... :-).  I never did anything with LOGO.  I just got a copy
for the PC off the net for a friend, but haven't done much with it.
I guess that and PILOT are similar (PILOT is more complete, I've heard).
I wouldn't recommend a compiled or strongly-typed language.  That leaves
thinks like lisp/scheme, smalltalk/self, etc.  LISP might actually not
be too bad.  Scheme might have an easier-to-figure-out scoping strategy,
but who knows (fresh mind).  What about something like Hypercard?  I've
never used it but it might be something that is similar to programming.

Of course, there is always sh/csh/ksh/bash...

Why don't you just write a language she can understand?  :-)

D

-- 
========================================================================
Dave Smythe   N6XLP    dsmythe@netcom.com (also dsmythe@cs.stanford.edu)

------------------------------------------------------------------------
From: mills@athena.lkg.dec.com (George Mills)
Newsgroups: comp.lang.logo,misc.kids
Subject: Re: Getting a 10 year old started in programming

I find the best thing is to "challege" him/her. If you nuge then they
think it's work. If you do nothing they do nothing. But if you say
things like "I bet you can't draw a grid on the screen in less than 10
lines" they go crazy. But they catch on after a while. Also acting dumb
works, like saying "I wonder how this works" and let them help you figure it
out.

------------------------------------------------------------------------
From: dsmythe@netcom.com (Dave Smythe)
Subject: Re: Getting a 10 year old started in programming
Date: Thu, 06 Aug 92 21:01:50 GMT
Organization: Netcom - Online Communication Services (408 241-9760 guest)

In article <1683B8458.CREECH@LSTC2VM.stortek.com> CREECH@LSTC2VM.stortek.com (Teresa Creech) writes:
>My 9 year old sometimes types in the samples out of the BASIC manuals
>and executes them.  She pretty much does things on her own, with us
>stopping by sometimes to see how she is doing.  She seems to enjoy it.
>I know it's not programming, but it's exposure.

Actually, I think this is a great way to learn how to program.  You will
invariably make typing errors, so your first exposure to BASIC will be
to look at something that should work and try to see why it doesn't.  Then
you fiddle with it to see what happens.  *Much* easier than writing new
code from scratch.  Also, different implementations are usually slightly
incompatible.  This is a good lesson in learning to extract the idea behind
what is being done (well enough to come up with an alternative).

D

-- 
========================================================================
Dave Smythe   N6XLP    dsmythe@netcom.com (also dsmythe@cs.stanford.edu)

------------------------------------------------------------------------
From: brent@amber.ssd.csd.harris.com (Brent W. Benson)
Subject: Getting a 10 year old started in programming

I don't have experience teaching a child that age, but I started
programming around that age (maybe a little older, I was 10 in 1977).
What really got me hooked on writing programs was graphics.  My
favorite part was fiddling around to see what the computer could do,
discovering something, and then letting it keep generating ideas until
it got boring.  Then I'd choose something else to work on.  The
important things were:

	1) interactive programming with graphics (I didn't have Logo,
	I used BASIC on TRS-80 machines).

	2) simple reference manuals:  a list of the available
	commands/functions and what they do.  If there isn't something
	like that available, you could write down a few of the
	important Logo constructs yourself with a short description.
	At that age, lists of commands were easier for me to
	understand than prose descriptions of how to program.

	3) sample code:  I learned tons by looking at example programs
	and modifying them until I figured out how the worked.

I'm sure that every child is different, but I enjoyed my parents not
being too involved in what I was doing.  Intellectual stimulation
helped, though.  Talk with your child about what she is working on.
Show some interest.  Then let her hack away.  I bet you'll be
surprised what she comes up with.  

Maybe you could write a couple of simple graphics programs in Logo and
demonstrate them to her.  Show her how to interact with the system and
do a little interactive graphics.  Once you get over the hump of
getting sharp kids interested, they do the rest.

After she works with Logo a while (if that's what you choose), it
might be fun to expose her to Scheme.  It's a beautiful language for
developing programming ideas and it's similar to Logo in some
respects.   "The Little Lisper" by Friedman and Felleisen (MIT Press)
is a great book for learning the basics of Scheme/Lisp.

Best of luck,
Brent

------------------------------------------------------------------------
From: murphyg@Software.Mitel.COM (Gary Murphy)
Subject: Re: Getting a 10 year old started in programming
Date: 7 Aug 92 12:20:17 GMT
Organization: Applications Software II, MITEL Corporation, Kanata, Ontario,
	Canada
In-reply-to: mills@athena.lkg.dec.com's message of 6 Aug 92 17:11:41 GMT

In article <mills.713121101@jisuzu.athena.lkg.dec.com> mills@athena.lkg.dec.com (George Mills) writes:

   thacher@unx.sas.com (Clarke Thacher) writes:
   >I would like her to be working independently as much as possible, but
   >it would be good to have an idea of where to nudge her.

   I find the best thing is to "challege" him/her. If you nuge then they
   think it's work. If you do nothing they do nothing. But if you say
   things like "I bet you can't draw a grid on the screen in less than 10
   lines" they go crazy. But they catch on after a while. Also acting dumb
   works, like saying "I wonder how this works" and let them help you figure it
   out.

I may have mentioned this before in my review of Ladybug, but this is
exactly what I did with my son's grade 3 class.  The school board had
purchased a computer for each class room, but gave them the most
uninteresting (and juvenile) software available.  Since it was a PC, I
dropped by (it is an 'alternative school' where parent's are eagerly
welcomed) and installed Ladybug, a "Dance of the Planets" demo, and the
shareware SkyGlobe program.  The teacher suggested I take three students
and show them how to start each program (I had 10 minutes) and then they
could show the others.

My logic goes like this:  (a) I learned more in my first year of owning a
computer than in 4 1/2 years of university-level Comp.Sci (to be fair,
that was 1975), and in those days, there was no such thing as 'help' or
any tutorials for anything on a PC.  (b) My son and his friends had  zero
trouble learning every game they encountered, even very tricky games
like Commander Keen; they all eventually beat the game.  (c) Kids love to
explore so long as there isn't someone standing over them to insist on
what is the 'right' way, and in an alternative school, this isn't
supposed to happen.

The only nudges needed were the technical details of installing Ladybug
in their menu system and my suggesting he pick up a book on LOGO on a
trip to the public library (the school library had none).  By the end of
the school year, they had only just discovered 'TO' and never invoked the
editor, but they sure understood 'REPEAT' and all the turtle-graphics
commands; I consider this fare progress for unsupervised
eight-year-olds.

The moral of my story:  children are learning-machines --- you don't
teach them so much as you provide raw materials.  At most, a few
examples is all they need, which is _amazing_ if you stop to think about
it!


--
Gary Lawrence Murphy - Gary.Murphy@software.mitel.COM - (613) 592-2122 x3709
 "Read not to contradict nor to believe, but to weigh and consider."
       (East wall inscription of Harper Library, U of Chicago)

------------------------------------------------------------------------
From: kgatling@mailbox.syr.edu (Keith E Gatling)
Subject: Re: Getting a 10 year old started in programming

Hi.

I saw your message about programming and I had an idea.  Does your
daughter play with Lego at all?  I just saw a demonstration of something
called Lego/Logo, in which you get a special Lego set with motors, lights,
and tone generators that can be controlled by writing Logo programs.  I
haven't seen it in any toy stores around me (although I've seen regular
Lego), but I did see it for sale in the gift shop of the Computer Museum
in Boston.  You might want to write to Lego for more information.

If you're interested, I can get the address for you.  Actually, I want a
set of Lego/Logo for myself!

Okay, I've found the address.  For more information on Lego/Logo, write:

     Lego Dacta Educational Products
     555 Taylor Road
     Enfield, CT   06082

As soon as I log off, I'm gonna sit right down and write myself a letter
(to them).

-- 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Keith E Gatling                                  kgatling@mailbox.syr.edu *
*          Opinions?  I've got plenty of them.  Just ask my wife!           *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

------------------------------------------------------------------------
From: piaw@pure.com (Na Choon Piaw)
Subject: Re: Getting a 10 year old started in programming

Give her a copy of Brian Harvey's wonderful book, "Computer Science
Logo Style" or something like that.  Volume 1's subtitle is
"Intermediate Programming," but don't let that put you off.

Piaw
------------------------------------------------------------------------
From: jerry@qcktrn.com (Jerry Bauer)
Subject: Re: Getting a 10 year old started in programming


When Jeremy (now 15) wanted to program our Apple II (now antique) in BASIC,
I gave him the manual, opened it to the section on ERROR MESSAGES, and
"challenged" him to write programs that generated each message.  Thereafter,
when he got such a message, he understood at least one way his code could
have caused it.

One of the most instructive things he did was enter the "one-and-two-liners"
(very short programs, often cryptically so) from NIBBLE magazine.  As much
as they did anything else, they taught the value of clear code and comments.
I know of no real equivalent in the PC-clone world; these were quite specific
to Apple II.

Now, he's learning `C' on his own, from books I've provided him.  I am a
software engineer, fluent in several programming languages, and I can
answer his questions (when they are well-formed), but I try not to.  As
much as I can, and it is hard, I encourage him to blunder his way to a
solution.  When he has it working (or is completely baffled), I show him
one way I might address the task.  I often do this on paper, in pseudocode.
(Pseudocode is "imitation" code, with arbitrary structure, that leaves
out irrelevant detail.  To implement the pseudocoded solution, Jeremy would
have to provide the missing information.)

I've heard it suggested that BASIC is a bad place to start. I'd have to
agree, if the student just learns BASIC, rather than programming.
Programming is much more about problem solving than it is about the
syntax and semantics of the language used.  Once the concepts are learned,
the actual language does not matter much; it is just the tool.  Granted,
some tools are better suited for some tasks than others, but who among
us has never used the pliers when we couldn't find the wrench?  If BASIC
is what you have, use it.  It is a good idea to learn at least one other
language.  In Jeremy's case, the second language was LOGO.  BASIC and LOGO
are about as different as you can imagine, and it is a real challenge to
implement the same solution in each of the two languages!

Jerry Randal Bauer

------------------------------------------------------------------------
-- 
Clarke Thacher        OSRD/HIP Software Developer          SAS Institute, Inc.
thacher@unx.sas.com         (919) 677-8000    SAS Campus Drive, Cary, NC 27513
Newsgroups: misc.kids