This section documents my experiences teaching a class kids to program, including the lesson notes.
The focus on teaching in schools implies the following:
- You are teaching several kids at once, it's not 1:1
- You are time limited, probably under an hour a session, certainly less than 2.
- Since you probably need 20 copies of everything it needs to be cheap, preferably free.
Motivation
When I first offered the course at the local school to ages 11/12 there wasn't much take-up, mostly due to competition from a Judo course running at the same time; However I've now dropped the age-range to 9 year olds and up and the take up has been good, interestingly mostly at the younger end of the range.
I think the easiest way to sell programming is to make it a fun activity, I do this by:
- Emphasing the programming of games.
- Offering a prize each term for the best project.
Scratch makes this very easy as you can upload the projects to MIT's web site (or your own) and let the kids vote. - Make it a 'graduated' experience, for some the less motivated kids 'modding' is a good way in.
Age
I think you could start really young if you have a talented, motivated child who you are going to teach 1:1 (or close to); perhaps 7 years.
I'm starting with 9 year olds and they can easily grasp it; I have a group of about 12 and that's not too many.
Of course teens and older children are going to find this easier than the younger ones.
Early teens and complete beginners would probably still enjoy using Scratch to get a feel for it but a keen older child would probably be best to rapidly move on to Python (see below).
The Modules
It's hard to say where each session will begin/end as it's going to depend on the number, age and ability of the children.
Therefore I've divided the content into 'modules' with the idea that I'll start at the beginning and progress as far as I can in each session.
Resources
Check out my new longer kids programming reading list page.
There are now a few books about Scratch:


Challenges
I've found that with younger kids (say 9-10) it's
best to give them a somewhat completed game and a set of suggested
'mods' that are progressively harder. Then the ones who are less
able/interested can still do something fun (adding a new level say) and
the ones with more ability can still do something challenging (adding
scoring and more advanced features).
Challenges
Comments? Contact?
You can contact me at M A R K at Teach Kids To Program dot com (no spaces, all lower case).
Programming Environments Suitable for Children
Environment |
Link |
Notes |
Scratch |
http://scratch.mit.edu/ |
Free, cross platform.
Good starting environment especially for younger children, I would estimate most kids 8-9 years old could start and probably smart 7 year olds.
Programming is all drag-n-drop but has a reasonable set of control structures (loops, ifs) and a good event based model.
|
SmallBasic |
http://msdn.microsoft.com/beginner/ff384126.aspx |
New in 2008, a simple Basic environment for .NET, I haven't tried it yet but I think it could be good.
Update: I did try it very briefly and it wasn't as good as I'd hoped.
|
Phrogram |
http://phrogram.com/ |
Commercial programming environment for kids.
Currently ruled-out because it costs and the free alternatives are good.
|
GameMaker |
http://www.yoyogames.com/make |
Not strictly targetted at kids but I think it would make a good next step after Scratch. Again no hand-writing of scripts its all drag-n-drop and dialogs but much more fully featured than Scratch (and hence more complicated). |
Python with PyGame |
http://www.python.org/
http://www.pygame.org/
|
For somewhat older kids I think you could get useful stuff done with a generic programming language (like Python).
Add in a library like PyGame and you've got a pretty good basis.
|
Kudo |
http://research.microsoft.com/en-us/projects/kodu/ |
Microsoft Research visual coding environment, my 9 year old enjoyed using this. |
Khan Academy |
https://www.khanacademy.org/cs/tutorials/programming-basics |
Khan Academy has an introduction to programming using JavaScript. |