- Unfortunately, most of the school kids who learned Logo hit the ceiling of their instructors' knowledge before they reached any limit of the language's capabilities. I'd still like to see how far a group of elementary school students could progress in Logo if taught by a knowledgeable computer scientist.
Good question, how far could they go? Better question: what would they do on the way? What kind of problem would they approach that would require sophisticated programming, but still interest a 10-year-old? (It's a non-parent asking the question.)
Answers so far:
- Music and sound
- Word play
- Simple algorithms with complex behavior (fractals, for example)
Games. Games embody an amazing scope for teaching computer programming, from simple question/answer games to teach I/O, conditionals and looping, up to networked 3D shoot-em-ups which require architecture, OO programming, 2D and 3D graphics, real-time programming, physics simulation, distributed programming, cryptography and security protocols (to thwart cheating), optimization, assembly programming, etc. etc.
Most importantly, games allow students to have a creative input, which helps keep their enthusiasm levels up. It also allows less technically minded students to do well with the art and music, rather than getting disenchanted by mathematical difficulties.
I agree! See the VirtualSchool
node I just started; I'm very interested in educational virtual worlds (mainly text-based but I do see the need and advantage for interesting visuals) like MUSEs. -- ChrisArmstrong
On a related note: last year, on a train going into London, there was a group of mothers taking their junior-school age daughters (6 or 8 of them) up to town. One of the girls had a toy PDA, a sort of Psion-ish thing in pink and yellow plastic. It evidently had some sort of journal ("diary") functionality in it, with password protection. I shamelessly eavesdropped as these youngsters held a remarkably sophisticated (and correct, within its limits) discussion of password security, it's strengths and weaknesses, what would and wouldn't make a good password and so on. The world is changing. [PS: non-UK residents note that junior age < 11, typically]
I got a cousin's kids (ages 9 and 11) interested in computers by letting them play with my synthesizers. Nearly every kid on the planet loves to make noise, so I showed my cousin's kids how to make all sorts of wonderful noise. Big burpy farty silly noises! Bass notes that shook the house (and annoyed the other guests)! After a while, they started to ask me to make their own sounds. So I spent an enjoyable afternoon showing them how to sample themselves and use various waveform editors and signal processors. What kid doesn't like to make their own voice sound two octaves lower?!
But what really got them interested was MAX, a package that lets you draw various digital signal processing blocks on the screen, connect them up graphically with lines, and then have it do things. It's essentially a GraphicalProgrammingLanguage
based on a DataflowProgramming
paradigm. The kids quickly learned how to do things like hook up MIDI controllers to control various aspects of the sound, put notes in a sequencer and have it loop them, and other tricks.
By the end of the day, we found we had spent five hours playing with this stuff, and with the kids begging their parents to know when they would be visiting again. But the best part was seeing that these kids really did understand what was going on. They weren't just wiring up things together at random and seeing what happened. They figured out (for example) that if they wanted a sequence of notes to go twice as fast, that they should multiply the clock rate by two. So they were asking how they could insert a multiply by two block between the clock block and the sequencer block.
I should mention that before I let them play with my synthesizers, most of the time they looked at my computer's screen-- often filled with C code - and thought computers were boring tools. Now they think computers are way cool, and not only want to learn how to do music on their home system, but have expressed a parallel interest in music.
The best part about all this? I was visiting the kids a while after this, and they were listening to the radio. One of them heard some pop song's quirky use of a sweeping filter bank and said, "I could do that!" And you know - he probably could have.
BTW: I made a gamelike environment for experimentation with sound for my children, which is available at http://sange.fi/~atehwa/pimputin.tar.gz (depends: Python2.2, curses). It doesn't much serve the purpose of teaching programming, but it's good for getting children excited about it.
When I was in Junior High School (in the UnitedStates
, 10-12 years old), I learned to program the kinds of applications that interested me the most: games.
Even limited to character-based terminals running across a modem, I managed to do a decent "missile command" game.
I found books like "101 computer games" and even non-computer gaming books useful:
I quickly realized that most published computer game code was really poorly written.
Mostly, I was mentored by high school and college students.
They helped me with my games, as they were writing theirs.
I learned some mathematics - exponents for a "mind reading" card game and practiced my trigonometry for a "star trek" like game.
They were mastering artificial intelligence techniques, to run the computer opponents in card games.
I'm porting the venerable Star Trek Trainer from PaloAltoTinyBasic?
to Java. Talk about pain. -- DavidBrantley
, a set of Python modules designed for writing games. http://www.pygame.org/
I had a computer when I was nine, but I spent a long time trying to get the computer to do what I wanted. (The only help around came from teachers that had done a few simple courses.) I know that mentoring by a real programmer would help children (if the emphasis were on helping them do whatever it was they wanted to program).
did some interesting work on the EarlyHistoryOfSmalltalk
. I'm so jealous of those school kids that had a glimpse of the future and got tutored by world-class people. Just imagine having a CV that said that the Xerox Parc people tutored you in an early version of Smalltalk in school. I wonder what came of those kids and whether those experiences helped them to go on to do something great in computing. It's ironic that the glimpse of the future those children had is probably ahead of what a lot of programmers have experienced today.
(Actually, when I was with KSC I used to work with one of those (former) children -- AbdulNabi
. -- KyleBrown
Games. When I was a wee lad, I remember feeling excited from reading GreenBar
teletype printouts of the Star Trek game. I didn't even get to play the game until a few years later. -- SeanOleary
Language can also be fun ... when I was a kid, I always liked programs that did things with words, like Eliza. Words plus pictures can also be an intriguing combination.
Music. Music has many similarities with programming. Repeated sections (e.g. verses, chorus) and common themes can be likened to functions. Variations on a theme could be parameterised functions. Repetition is like iteration. Instruments are like objects that you can send commands to. Playing an instrument is like a sequence of commands sent to the instrument object. Harmonizing multiple instruments is like concurrent programming in the OccamLanguage
. I'd like to see a language like LogoLanguage
that controls a synth instead of a turtle.
Interactive story-telling with animation and sound. This is like a cross between games and music, which I think are great ideas for kids to get interested in programming. I got into computers at age 8 on early Apple computers, mostly following in my brother's footsteps (11 or 12 at the time). I have this nagging feeling that programming is one of those skills that seems esoteric to most of the population, but will eventually be taught at very young ages such as 7 or 8. The prime example I can think of is mathematics, but reading and writing are also examples. Can you imagine what the world would be like if literally everybody had at least basic programming skills the way most people today are literate and have basic math skills? Blows my mind. Anyway, one of the things I've been thinking about specifically is how to make programming interesting for girls as well as boys. I think music and story-telling (like make-believe) would be interesting for girls.
Beware of things that computers don't do well or easily.
My boys were taught how to make HyperCard
animations when they were young. I could never understand why they had little interest in continuing with HyperCard
once their assignments were done. Years later I helped my older boy write a PrimeNumber
finding program. This he found fascinating and ran it for days. I wondered why this program had appeal when the graphics and animation didn't. I finally decided that his animations had always turned out to be less than he had imagined while the prime finder was more. -- WardCunningham
Depends on the development environment. It wouldn't be so easy to make animations in Java, but Flash or MacromediaDirector are pretty easy to learn and teach (probably to highschool level students). I think it's more important that the interface is tailored to younger students than it is what computers can or can't do. These days of 3D multiplayer networked games with AI opponents, it's not really a question of what the computer can do; it's definitely the interface. There's a high barrier to learning programming these days. The curve is steep. In my opinion, the goal is to lower the barriers and flatten the curve. We shouldn't be trying so much to teach the interface (using HyperCard or Flash, or a text-based programming language) as to improve the interface so that kids can use it to learn about computers.
was fine software. My son just couldn't draw to his satisfaction.
The sort of computation that interested me when I was first learning to program (and still do) were simple algorithms that produced complex images. MandelbrotSet
s, cellular automata, Koch fractals, that sort of thing. They fit the description of turning out to be more than I had imagined. I was also fascinated by Taylor series and rotating 3-D wire frames.
I am fascinated by a community of 'child programmers' who use a line of tools by a company called Clickteam. These tools are often known as 'Click' based, you create the program by choosing events (conditions and actions) via menus with dedicated animation and level layout editors for setting up a game scene for example.
There is a 10 year old version of their product which is free for use in schools and otherwise can no longer be purchased. It has very low hardware requirements and is called 'Klik & Play' - get it from http://www.clickteam.com/English/klilk&play.htm
Whatever the consensus is for one's FirstTimeLanguage
- Junior School children are expected to learn all kinds of math - algebra, simple set theory as well as logic; they can comprehend a lot more than just turtle graphics. If they learned the basics of languages like Scheme or Smalltalk early, they could apply that knowledge to help understand their other subjects. And these languages can do any amount of graphics too if they are so inclined. Of course, they would not learn all the nuances right away but then by the time they see it again as their "FreshmansFirstLanguage
" it would be OldSchool
(sorry, I could not help it).
Daddy, Daddy how do you do a fast fourier transform?
I remember being fascinated with the GameOfLife
when I was around that age. Also robotics, that is, making the computer do something physical. -- IanOsgood
See also MeatBall
for a junior school wiki approach
I think the trivial answer would be simply that it's all very personal; junior school and younger kids are people. I started out being eight (that's twenty years ago, and with Logo as my 1st), and basically I'm still interested more or less in the same sort of problems. When working with kids a bit last year, I found out some are really keen on ComputerGraphics?
while others find it boring but get absolutly hyped about AI; I worked them through a 'guess-which-animal' implementation in Perl (which proved to be a wrong choice for 5 out of six kids, 12-13 years old; it was their choice, not mine). One should remember kids are very smart, can do well in much more abstract things than programming (for example abstract algebra), and tend to have a lot of patience if it triggers into the right niche for them.
I'd like to add I think there are two important aspects of so to say 'adult' or 'professonal' supervision:
- an adult is better equipped to setup the 'work-environment' for the child; if the environment is broken it can be very frustrating for the child,
- see in which directions the child goes, and try to arrange a meeting for them with somebody in that field, who can slightly direct them towards the right problems (or solutions).
My sons love Scratch. You can learn more about it here: http://scratch.mit.edu
. It's a Smalltalk based development environment with a very smooth learning curve for that age group. And, yes, you can write video games in it.
- Is this related to the graphical programming system used on LegoMindstorms?