To keep us occupied during the summer months my eldest daughter (aged 9) and I have decided it would be fun if I were to teach her programming. For obvious reasons Perl is my language of choice but the problem I have is in devising a syllabus that will both teach her the rudiments and keep both her and me entertained.
(Sadly) As I guess that most of the monks are closer to their childhood than I am I would be interested in any suggestions that you have on appropriate topics that will lead us from the basics through to more advanced topics.
It’s not that the teaching worries me – I’ve done lots of courses on lots of topics but mainly to “computer literate” people – and in general they understand what it is you are trying to teach them and why. But perhaps this is very difficult and very different to convey to a 9-year-old.
As a first shot I was thinking about something on the lines of:
Suppose you spend x at a shop and give a note of value y – how does the shopkeeper give you change?
Teaches: simple arithmetic, looping, lists, sorting, etc. – and also relates well to the real world.
Background
The first “useful” program I wrote did ‘straight line of best fit’ - given a set of x,y coordinates it told you the mean x,y value and the intercept on the y axis. Historical Note: this was written in BASIC and ran using a dial-up connection to a time sharing company with an acoustic coupler (ask your parents!) – I later converted it to ALGOL. At the time this made sense to me as, in 1970, I was doing O-Level (I don’t know the US equivalent but it’s the exams you do at age 16) physics and chemistry. Then I got more interested in maths and the next program solved cubics – Newton-Raphson iteration to find the first root, synthetic division to turn the cubic into a quadratic solved by the usual means. And on and on but always with a practical basis.
So my background has been programming as an aid to solving problems rather than something in itself – my problem is how do I translate this into something that a 9 year old will be enthusiastic about and learn from? – and that both of us will enjoy and learn from>
You have lots of time to think about this and we can discuss suggestions – we are planning to start in July – if people are interested in this topic then I will be more than happy to provide regular feedback on how we are getting on.
Odud
Update: Thanks to everyone who has commented on this node - I'm very impressed with the feedback that has been provided - I'm now working slowly through them so that I don't miss any important points
Re: Junior Perl
by footpad (Abbot) on Jun 12, 2001 at 00:30 UTC
|
I would say "keep it relevant." Consider a number of different scenarios important to her, things she can relate to and learn from. Some example applications:
A simple contact manager for tracking email addresses, phone numbers, birthdays, and other tidbits. This lets you lead into the rudiments of database theory, SQL, reporting, and so on.
A "wish list" application for tracking gift ideas, one that allows people to log in, locate an appropriate gift for a person, and then "reserve" it (to prevent multiple people from sending the same gift). This gives you authentication, cookies, and more database design opportunities. (Naturally, the recipient can't see who reserves a gift or even if it's been reserved.)
If she's into any form of competive sports, perhaps a stastistic tracking thing.
If she collects anything (comic books, glass figures, whatever), then a catalog system, perhaps, one with ties to the wishlist.
If she's into astrononmy, then perhaps a viewing log.
and so on...
In other words, identify programs that she'd find useful, relevant, and interesting, and then design the course to lead to their development. Also, get her input. I'll bet she'll enjoy the collaboration. In turn, this should generate enthusiasm and additional commitment.
In turn, make these deliverables, with milestones, requirements, documentation, and pay-offs for hitting the goals. These don't necessarily have to be monetary, but they should be tangible. Perhaps you do her chores for a week or something similar.
In addition, make sure she knows your responsibilities and that you have milestones of your own.
--f
| [reply] |
|
These are all good ideas – thanks. Currently she is into reading and borrows loads of books from the library. A simple program to record title, author, and her comments on the book would be a good start. This could be expanded to use databases for storage etc., and perhaps a simple web interface. I like the idea of introducing milestones and deliverables etc. at an early stage – it’s something that very good programmers often struggle with, probably because it is not learned at the same time as programming.
| [reply] |
|
And an automatic reminder (conditioned on weekdays, a few days earlier, possible vacations) to give them back.
| [reply] |
Heresy Re: Junior Perl
by Zaxo (Archbishop) on Jun 12, 2001 at 08:06 UTC
|
I have a radical suggestion, and a touch of disagreement with my esteemed brethren.
Some observations about children: they pick up language and patterns easily. They dislike sustained projects (though they often are obsessive about an interest). To them, the real game is learning the rules, not making a product.
What do you think of teaching text manipulation and regexes? Start with tr///, a Secret Decoder Ring. She can have fun with literals: s/Fido/Gimlet-Eyed Guardian/; s/Father/Couch Creature/; s/cat/dog/ .. hehe dogalog. Hmm.. can we avoid that? Time to find out about word boundaries
I think she needs no relevant project, just to learn the syntax and enjoy making lots of tiny programs. Like any other language, she will soon stitch together what she's learned into programs you never dreamed of.
Even experts like to do their learning on tiny irrelevant programs -- hence golf, obfu and poetry.
After Compline, Zaxo
| [reply] |
|
I guess you are saying to introduce lots of small building blocks and see what she can build from them. It sounds good and I think I’ll try to do that. I wasn’t planning on keeping the difficult stuff for last but rather to introduce it when it appears natural. s/// in its simple forms shouldn’t be too hard to understand and the more complex use can be built up gradually as the need arises. Simple text processing should be introduced from the start. I always found this to be hard in the languages that I first learned – because they didn’t have the features that make it easy.
| [reply] |
Re: Junior Perl
by shotgunefx (Parson) on Jun 12, 2001 at 00:49 UTC
|
My start in computing was totally driven by games. There's not many computational problems that you won't hit eventually, so game programming would be a good start to hold her interest I think.
I'd keep it real simple at first. Since vanilla perl isn't graphics oriented I would stick with maybe a simple game like blackjack to start perhaps or maybe even a MadLibs type of program. The both would cover input, conditional logic etc. I don't think you want to go to far, right off the bat.
I don't know if anybody here remembers Gorilla that shipped with QuickBasic but that might be a good second project. It's simple but fun.
-Lee
"To be civilized is to deny one's nature." | [reply] |
|
Games sound good – I remember a program that guessed what animal you were thinking of by asking a series of questions (has it got four legs?, wings etc.) – it also had the ability to learn about new animals and would fit them into its classification tree. I guess something like that would introduce all the programming concepts pretty quickly and yet still be fun
| [reply] |
Re: Junior Perl
by pmas (Hermit) on Jun 12, 2001 at 01:01 UTC
|
I understand that perl is your language of choice. But is it the best language for solving tasks relevant for your daughter? I believe perl is good language for many tasks, but sure not for all tasks. I have also son, 10 years old now, and am also thinking about introduction to programming. But I was thinking about something different:
LOGO is excellent, because Jr. can have visual clue what is going on, and what might be wrong. Visual clue is rather important, at lest on the cognitive level of my son (he is reading sfi-fi Foundation series now)... Also, it is simple to define subroutines in LOGO, to extent language where you want to. You can do a lot of things without even begin to worry about variables.
My another choice is some language for programming adventure games, to program simple game. I want to research it little more...
Yet another choice might be "Baltazar the Wizard" from Czech republic. My older son played with it a lot on DOS couple years ago (I just recalled this - no idea if it is still avalable). I was impressed how smart animations were pssible in it - with custom graphics.
I'll bookmark this node. Insight of fellow monks is sure much appreciated.
Update: LOGO is language oriented to 'turtle graphic': To give comands to draw shapes. For your 'feeling' about Logo, here is how to define a procedure to draw a square:
TO SQR :SIDE REPEAT 4 [ FORWARD :SIDE RIGHT 90 ] END Then, SQR 20 will draw square. You get the idea.
pmas
To make errors is human. But to make million errors per second, you need a computer. | [reply] [d/l] |
|
I cheked with Yahoo, found LOGO for Palm, downloaded it, tried - it was fun!You can even define procedures with parameters!
freeware TinyLogo for Palm III and up:
http://www.palmspot.com/software/detail/ps3104a_98232.html with simple documentation, many sites with sample programs and examples how to teach Logo your kids, i.e.: http://mckoss.com/logo/, online textbooks, LOGO users Web ring:
http://www.atlantic.net/~caggiano/logo/logoring.html etc etc.
Logo was invented in MIT, so there is Logo Foundation in MIT: http://el.www.media.mit.edu/groups/logo-foundation/
I know this is off-topic from perl, I may get -- for it, but now I know how I will introduce programming to my son over this summer. And maybe next summer he will be ready for real programming. Did you know that Logo in language for LEGO Mindstorm?...
pmas
To make errors is human. But to make million errors per second, you need a computer.
| [reply] |
|
I don’t yet know what her school are planning to do – if they are going to introduce LOGO or something similar I don’t want to clash with what they are doing – however thanks for the links and I will explore them as I am sure they will have many ideas that I can use even if I don’t use the language directly.
| [reply] |
|
| [reply] |
Re: Junior Perl
by Xxaxx (Monk) on Jun 12, 2001 at 10:53 UTC
|
In addition to the many good comments in the above material I'd like to suggest a deliberate use of XtremeProgramming. That's just a fancy schmancy phrase for two people working at one computer on a program of mutual interest.
If you daughter happens to be a fanatic on any given subject, such as a singing group or favorite cartoon it might be possible to create a useful script which would serve her keen interest. A database of all known Pokemon might be good for some kids. Or perhaps for a young girl a Barbie's Diary program. For an introduction to programming it might be great fun to do a project with you. But the results will need to be very inspiring.
If you want to get a youngster interested (and capable) at solo programming it might be a good idea to look into something such as Legos robots. They have a fun interface. You can "write" programs to make the robots do things, then download the program into the robot. While this is not a highly developed language it is one you can quickly turn a youngster loose with. This is very similar to the old Turtle program from Pluto (Plato?) days.
For a rather young programmer I think the best approach is to infect them with the delight in having the environment do stuff based on commands written into a "program". For this the loop (and frustration cycle) between command and "cool stuff happening" should be minimal. Later when they are a trifle more developed Perl is excellent.
Have a fun and productive summer,
Claude
| [reply] |
|
I was reading about XP a few weeks ago - lots of the ideas will translate well into teaching a youngster I think: stories rather than specifications, incremental changes, testing first etc. From the start I wanted this to be a joint exercise rather than just sit her in front of the screen and let her get on with it - we should both gain from it - she learns to program and I learn to teach at a much lower level than I'm used to.
| [reply] |
Re: Junior Perl
by dragonchild (Archbishop) on Jun 12, 2001 at 01:35 UTC
|
I remember back to my first programs (in Apple Basic). They were very simple things, like "Whodunit" or "Twenty Questions." Things that take input, parse it, make decisions, then give output.
Once I got to school and started learning in a structured fashion, most of the first semester's assignments were like that as well. "Write a program that will solve arithmetic problems." "Write a program that will check spelling in a given file." "Write a program that counts the number of XYZ."
I think most of the respondents have the right idea - give her problems that are relevant to her life. Perl may not be the best language for this. Personally, I plan on starting my kids (when I have them) on Turtle-Logo or VB - languages that are graphically oriented. That way, they can write stuff that they can get immediate results out of.
Then, once s/he comes up to me and says "How can I do X?" and Perl is better, I'll introduce him/her to a more structured language, like Perl. Or, maybe, just leave them in VB for a while.
Now, this may sound like heresy, but the point is to teach good programming practice, not advance a religious belief. I learned good programming habits in PASCAL on a VAX/VMS. C was this really neat thing upper-level students used ... until I got to learn it that summer. Then, I realized it was just PASCAL with funny syntax and new operators, but allowed you a lot more leeway to make mistakes. Once I realized that every third generation language is essentially the same, I realized it didn't matter what language I wrote in, so long as it was appropriate for the task. (It just so happens that Perl is most appropriate to the types of stuff I tend to work on!) Teaching a child to code in XYZ isn't a bad plan, just cause it's XYZ. Teaching a child good programming habits and style is a good plan, regardless of language. A younger child will benefit from the easy graphical coding that VB or Turtle-Logo has. Then, let them decide when that language doesn't have enough tools. They're learning the language, not you. | [reply] |
|
Oh Perl wasn't any sort of religious choice - it was just to avoid "now the way I'd do it ..." issues. Since she hasn't done any programming already at school I felt free to pick any language - and Perl provides a huge amount of power and flexibility without (very) complex syntactic effort - or at least that's how I see it, but then it's so long since I had to learn any language from the ground up what do I know. I appreciate your suggestions for first programs however, I'd forgotten the delights of such simple programming tasks.
| [reply] |
Re: Junior Perl
by xphase_work (Pilgrim) on Jun 12, 2001 at 01:22 UTC
|
I know that when I firsted learned BASIC, I was interested in the
choose your own adventure books(This was 4th grade back in '90)
So my classmates and I would program little choose your own adventure
text games. In general you either died at the end, or turned into a
girl(died, this was 4th grade). Writing the programs was fun, and
we'd plop it on a disk, and trade with each other.
So now that I'm done with memory lane, what you might want to do is
pick something that interests her... Music = make a music catalog,
something that you can expand upon and increase the challenge throughout
the entire learning process.
I was going to say more, but while writing this, my boss came and spent
20 minutes telling me nothing at all
-xPhase | [reply] |
Re: Junior Perl
by mattr (Curate) on Jun 12, 2001 at 15:49 UTC
|
I can tell you about a project I did which was a lot of
fun. I was somewhere between 11 and 13, with my Apple II.
That should tell you when it was, since it came with only
Integer Basic (no floating points) which didn't get fixed
until I added a 16KB Language Card for Pascal and Floating
Point Basic (Applesoft).
Anyway my Dad had this amazing collection of National Geographic
magazines, you know with the yellow spines, going back for years.
It was in a cabinet in the basement and we would often go down
and search the several keywords which were on the spine of
each one of the magazines. We'd be talking about something
and suddenly my father would say, let's check out the National
Geographic, or maybe it was let's see what the Encyclopedia
says. I do remember reading a couple sets of encyclopedias
but Geographic was great because of all the maps inside.
Well maybe the best of all was a year end compilation of the
World Book encyclopedia set we had, because one edition had
a fantastic description of Smalltalk and how you could control
an actor on a stage (well that's Director and Lingo now..
maybe another good avenue for you to check). Images of this
incredible personal, programmable environment danced in
my head for years. I dreamed it existed inside an infinite
digital watch, etc. I think my dreams were better than those
space invaders watches they came out with. Anyway, next best
is probably the map of the Moon in Geographic. Point is,
these things stick with you. I took two classes at a high
school on Saturdays, fortran with punch cards (it was fun
but horrible since we had no idea what we were programming
or how) and astronomy (which was plain great, this high
school had a mini planetarium!). Now, I program and I'm
into astronomy.
Anyway I got this idea to build a system to organize them
and in the end you could input the keywords, date, and
article names in each issue and run a search. This was
in Basic but it would be similar in Perl. The interface was
a plain text terminal display, maybe ANSI and curses would be
good.
I also remember once doing a school art project that consisted
of an animated drive through a vector graphic drawn desert,
you drove with a game paddle. These were ideas I came up
with after learning some of the basic things that were possible.
Anyway to go on about the Geographic system, I think if you have a similar
collection at home and use it similarly this would be great
since your child likes reading. Or maybe if you have
dinner time discussions that turn educational like we did,
you could assign something to look up (all us kids would
get picked on one night or another to run up the stairs and
come back with the right encyclopedia entry for example).
You need to keep it very simple, relevant, and hopefully
rich in the sense that you can keep using the same system
to work out different things to try in the future (if she
is still exploring and not bored with it). So you
might just start with hard coding the names of some
tv shows and printing them out. Then you could sort them.
Then maybe what time they start, and then you could
print everything on Friday Night, and so on.
If there is an analogue now, maybe the
first place to start is learning how to draw colored
bars on the screen in vertical or horizontal orientations
using commands like "color=xxx" and "line a,b to c,d".
You can draw pictures together easily and if you have
thick bars (maybe they are one character thick) you can fill
the screen with impressive designs in no time. This was
a lesson that sunk in. If you are on a budget or want
to keep everything in the same programming environment so
the tools are always at hand, you might even create Perl packages
for your daughter, I'm thinking of something that uses Readline
and maybe curses to provide a prompt and mimic some of that great Apple
visual feedback from minimal inputs. Maybe you would
separate the prompt from the plugins, and provide another
plugin which draws each letter she types as big as the screen.
Maybe you could have it print a page for each letter. This
kind of thing is easy for kids to understand and is fun, but
an explanation of how it works is always possible too.
One possibility that is quite easy is for you to get an
Apple II simulator like Catakig. I love it not just for
nostalgia but because it has less clutter and more meat.
You can also get software for free, one I recommend is
Infocom's Zork, a text adventure (like unix adventure) but
with a very good natural language parser. "Go North" and
"Examine Lamp" are the kinds of commands that would get her
used to a keyboard, creating her own imagery based on
detailed descriptions, and getting her used to navigation
in virtual spaces.
The other thing is, Perl is wonderful but there are lots of
interesting things out there for kids to learn programming.
I tried Logo but didn't like it. To clarify that since there
is a related comment above, Logo is great for some things
but once you get the basics, I at least felt constricted by
a sandbox, which is exactly where you are. You don't get
dirty. The Apple and Basic was just right for me since
I could do graphics, mess with the modem, even mess up the
monitor's frequency by blitting values to the framebuffer
from 6502 assembly code. So while I do know Perl will
grow with your child for a long time, I'm not sure she
will be able to do visually exciting things unless you help
her.
I think you might want to supplement your Perl lessons with
use of other visual programming methods (if there are any
which aren't actually harder to use than Perl). I'm thinking
of my 150 in 1 electronics set, which was a blast even though
I got stumped by most of the poorly documented schematics
in its manual. I still wish I had had more help with electronics
at that age, I just remember being stuck with the schematics
and then a heavy tome on logic and gates.
Maybe a visual music synthesis environment would be good.
I'm thinking of
MAX
which lets you wire components together on a screen and
actually control external devices or generate tones. It is
professional but I think kids appreciate that. However it
can get pretty technical so you will have to answer a ton
of questions. The neat thing about both MAX and Perl
is that you could purchase things to attach to your computer
so that your child can control physical things with it,
for example lights, speakers, cameras, and so on. One
friend I know is a digital artist who used MAX, Perl, and
the web to wire up a seismograph in California with an
exhibit space in Tokyo.. and with MAX the data sent over
the net drove all kinds of great bass rumbles on a 5 speaker
system in a cave-like environment. You could lie down on the
floor over the bass speaker and feel the rumble intensify
as the Earth released the stress in tons of rock. I'm sure
that sort of experience, and understanding how it all works and
being able to tweak it, is wonderful for giving creativity
free reign and learning concepts with all the senses. At
least I know I would have been pretty impressed as a 9 year
old!
One last idea is Sim City. I have always remembered a trip
to the Toronto Science Museum where they had a few color
displays built into podiums with touch screens that showed
a fire fighting simulation. You could start fires, dig trenches,
spread foam from helicopters, and so on over a map of a forested
area. It was very fast, interactive, and had great sound
effects. It was similar to the exhibits in the Franklin
Institute I saw once too, which had a button for almost every
exhibit which you could use to make things move. A simulation
gives you a good tactile feeling of dynamics, and all of the
three systems above are transparent and to some degree conducive
to hacking. There is a little known title called Sim Tunes
by a friend named Toshio Iwai. There is a demo
here. This and other related
titles (he has done one for the playstation) let you compose
your own music in a wild animated environment in which you draw
your composition.
If you can keep things simple and let your
daughter think up her own ideas while shielding her from
the daze we sometimes get from information absorption overload,
you both will have a lot of fun and she will have a great
head start in whatever field her interests end up taking the
two of you. | [reply] |
Re: Junior Perl
by busunsl (Vicar) on Jun 12, 2001 at 11:05 UTC
|
I'm thinking about that too.
One of the problems I face is the lack of good books for children in german, though here is a good reading about that.
Another point is keeping the tasks interesting. footpad made some good points here.
25 years ago I was happy programming space invaders in ASCII but times have changed.
Kids like to do something graphically and that's not easy in perl, so I even considered switching to java.
Further reading: Perl as a first language, Not-So-FAQ about learning Perl | [reply] |
Re: Junior Perl
by hsweet (Pilgrim) on Jun 12, 2001 at 05:50 UTC
|
Interesting idea. I'd be interested in how you go about it and how well it works. I am the father of a 9 year old and have taught (none too successfully) a VB course in a high school. Next year I'm planning on switching to perl and looking for good beginner projects. | [reply] |
Re: Junior Perl
by hsweet (Pilgrim) on Jun 14, 2001 at 06:06 UTC
|
Just tonight I sat down with my 7 year old daughter and we wrote this snippet and had a lot of fun with it. (Just prints words backwards) We might add a bit to it to print a whole story backwards.
print "Type a word\n";
$word=<STDIN>;
chomp $word;
$backward=reverse ($word);
print $backward;
Anyhow, I think this is about the right speed for a kid. Language things are fun, and it was easy to explain that $word is a kind of noun, print a kind of verb, ; is like a period at the end of a sentance. The idea of algorithm will kick in as problem solving if we try to work with whole (English) sentences, since we will have to reverse the words first, then the letters in each word to keep the whole thing in order.
Plus you would be using Perl as a text processing language which it is real good at. I figure it should be possible to do simple s///'s at some point to screw up certain words.
| [reply] |
|
That looks just the right sort of thing to do - it's fun, silly, and instructive all at the same time. As long as s/// is approached simply at first it shouldn't be too difficult to introduce and can do fun things. I was planning on something similar to start with. You could probably do something good with splitting a sentence into words and then printing them out in random order - introducing split, lists, etc. Then perhaps have a hash that holds replacements for words etc...
The only thing that concerns me is the lack of graphics as I'm not sure how long simple word games will hold her attention. I might look at doing something with Tk - perhaps create a very simple interface that lets you do things with colors and text, it should be possible to package away most of the complexity - I'll post it if it works out.
| [reply] |
|
|