Teaching Primary School Students Programming? 198
NotesSensei asks: "Recently I was teasing the teacher who runs the computer club in my sons' primary school: 'You teach the kids only how to use software but not how to make software.' Today I got an email: 'OK, you're in: teach them programming.' Now I wonder what language should I pick? My first lesson will be the board game c-jump, but after that? The contestants are: Kids programming language KPL (ab VB.net derivate; Java using BlueJ; Greenfoot (and the BlueJ); and HTML. Does it sound like I'm on the right track or should I try something completely different? We are looking at primary 3-5 (that's 10-13 in this part of the world). Where can I find inspiration for the curriculum?"
Karel (Score:4, Informative)
What about a snake? (Score:5, Informative)
Alternately, perhaps something more graphic-oriented would be desirable. If it were still around and supported, I would suggest Apple's Hypercard [wikipedia.org] program. It appears there are some clones [wikipedia.org] out there also, although I have no idea how good they are. (The first alternative listed says it is popular with educators.)
Good luck.
CeeBot (Score:2, Informative)
Squeak (Score:1, Informative)
Squeak (Score:3, Informative)
kids programming language (Score:2, Informative)
Python and Blender (Score:3, Informative)
Also there is predone games of a wide variety of types that they can play with, take apart, and rebuild into their own.
LetterRip
Re:the turtle (Score:3, Informative)
Logo is another excellent suggestion. It has many basic control structures (like FOR loops) and is also very visual (which is good). With a few simple commands it's easy to make geometric shapes, snowflakes, or just color the screen with a neat pattern. For a plus, you could have them do assignments like draw a square, draw the letter "R", draw your name, draw a house, whatever.
For ease of results, Logo is probably the best suggestion I've seen yet.
Of course it's not a general purpose language (like Python, which I suggested in another comment). But it will get the kids making little programs fast that they get to control and they can make do what they want easily.
My Curriculum (Score:2, Informative)
Grade 6: Drape [christianthompson.com] - A drag and drop programming language (No longer free but you can downloa it from my homepage).
Grade 7: Game Maker [gamemaker.nl] - A more complex drag and drop programming language created by the same person who created Drape.
Grade 8: Kids Programming Language [kidsprogra...nguage.com] - A BASIC-like programming language with easy to use graphics (sprite) capabilities and built in functions such as collision detection. Note that an updated version with 3D graphics capablities will soon be released (around Sept. 2006).
Grade 9: JavaScript - I use a program called Max's HTML Beauty++ [htmlbeauty.com] for editing JavaScript and NVU [nvu.com] for web design.
I have also used Small Basic [sourceforge.net] and my own JavaScript Interactive Fiction [christianthompson.com] engine.
You can find downloads of most of these programs and some lesson plans at my homepage. [christianthompson.com]
Feel free to contact me [mailto] if you have any further questions.
BASIC, Logo, ToonTalk (Score:4, Informative)
Logo [mit.edu] became available to me after I was "too advanced" for it, but certainly deserves a look as the "other" classical language for introductory programming.
I've heard some good things about Toon Talk [toontalk.com].
Or there's always BrainFuck [muppetlabs.com].
Re:Scheme? *ducks* (Score:4, Informative)
But how about Logo Programming language?
http://en.wikipedia.org/wiki/Logo_programming_lan
Another lisp dialect that is very easy for the kids. I find the 3 choices of the submitter (not the parent) a little too restrictive - and the limited experience I have with VB taught me it's absolutely horrible as a programming language. Variable settings I specified to be done wasn't because of some arcane rule or something else. Beginning programming languages should be as straightforward as possible.
Re:Squeak (Score:3, Informative)
Squeak is actually a Smalltalk [smalltalk.org] derivative.
[/pedant]
Re:Scheme? *ducks* (Score:3, Informative)
I strongly suggest checking out:
The Teach Scheme Project [teach-scheme.org]
How to Design Programs [htdp.org]
The first is a project designed around teaching programming through scheme, and the second is the text book for the project (full text online, free).
Re:Squeak (Score:3, Informative)
If the teacher finds the Smalltalk paradigm incomprehensible I'd suggest (s)he try Ruby. [ruby-lang.org] The author, quite truthfully, claims it's a 'surprise-free' language. Together with Smalltalk it's one of the few truly Object Oriented programming languages. It's been reported that both Squeak and Ruby are going to be installed on the OLPC machine. ( The OLPC folks change their minds so frequently that I'm now not certain of that though )
Re:Scheme? *ducks* (Score:1, Informative)
I strongly second that. It is one of the easiest possible languages to learn, and one of the most expressive. It is also a real programming language, not in any way dumbed-down for easier grasping.
I would especially suggest the DrScheme [plt-scheme.org] implementation. It has a nice, simple GUI with great features for teaching programming. One of the coolest things in that regard is the ability to use images as objects and actually visually see them represented in your code (a simple example [htdp.org]) -- I think that this could be especially great for children who may find understanding the processes demonstrated easier when they see the outcome visually. Also, generating any kind graphics is really simple.
Re:Wrong question (Score:2, Informative)
http://www.livewires.org.uk/python [livewires.org.uk]
*not* too young for abstract thought (Score:2, Informative)
Secondly, abstract is not required to understand at least some programming languages. If somebody suggested teaching them the Lambda Calculus, I'd be a bit worried, but something like C/BASIC/etc. is sufficiently procedural to make things easy. Don't confuse procedural languages with algebra just because both involve variables, because the concepts are actually very different in different languages. (I'm unsure whether Lisp/Scheme would be "too abstract" for people. I don't think functional programming would be the problem; if anything, it'd be the syntax (not the parenthesis.))
Thirdly, you divide people into "12-13" year-olds and "13-14" year olds. Leaving aside that people 13 years old fall into both classes, one year of age difference is very little basis on which to delay teaching people programming.
Finally, and most importantly, you mention that those ages are where abstract thought develops "on average". Other people in this thread who have supported you have again cited average cases. NotesSensei is not going to be teaching a school-wide programming class. NotesSensei is going to be teaching programming to people who have joined a computer club. There's a big difference there.
As for precisely what to each them, I wouldn't recommend VBScript or, therefore, KPL. I also would not recommend Java; while I think Java is a nice programming language and has many decent uses, I don't think it'd be a language that kids would like to learn as there first language. There's way too much figurative red tape to wade through to get anything done. The same probably applies to greenfoot. I would probably recommend Python.