Jump to content
Best Way to Teach Programming to Children?
Asked by arjonesiii
Posted May 18 2010 06:07 AM
We've been having an ongoing conversation at O'Reilly around what's the best way to approach teaching children to program, so I thought I'd just ask the community for input. Have you taught programming to kids? If so, what resources did you use? What language/s did you decide were most appropriate? Did you teach one-on-one or in a classroom setting? Did you use any books, and if so, did they work well for you? If not, what sort of book do you think would be most appropriate?
Answered by SyntaxC4
Posted May 18 2010 04:57 PM
Answered by miraklemax
Posted May 18 2010 08:55 PM
As a programmer with two smart little kids, I, too, have been on this quest.
First, "kids" is way too vague. What age, specifically? My oldest is 6.5, and in this department, the option are very limited. However, I'd recommend:
and/or their http://www.terrapinl...-botbundles.php
or any of many LEGO products like Lego Education WeDo:
All of the above provide the basics of learning programming in a very hands-on, fun-result way for littl'uns.
Comment by arjonesiii : May 19 2010 01:01 PM
Thanks for the links. I'm familiar with Seymour Papert's work on teaching Logo to children in the 1970's, but I wasn't aware that there were multiple ongoing products related to it.
The Butterscotch.com site is interesting. Both of these seem to be aimed at teaching programming concepts (rather than a programming language) to young children.
Sorry about being vague. I'm probably most interested in teaching programming to slightly older kids--probably starting somewhere around 12. I realize the "right" time to begin teaching programming would vary according to the individual, but I would think that most kids younger than 12 would probably have a very difficult time moving beyond very concrete (e.g. move an element on screen) programming. If you have a different slant on this, I'd be happy to hear it.
I'm a little resistant to the butterscotch.com approach (at least, the two shows I saw) because they don't seem to be aiming at teaching "real programming." One uses the XBox controller to select items from a menu to get an on-screen character to move, and the other discusses how to make a movie with a Movie Maker application. I realize that both are, in a sense, "programming,"--but they're certainly not code-centric programming, which is still at the center of programming today. While I'm sure young kids will enjoy these, I'm not at all convinced that such skills transfer well to more real-world programming.
I did find one book about programming with Python called "Hello World! Computer Programming for Kids (and Other Beginners)" which has pretty good reviews. The only negative comments were around the book's lack of support for Macs.
Comment by miraklemax : May 19 2010 06:10 PM
For the slightly older kids, I HIGHLY recommend Learn to Program by Chris Pine:
Answered by Renea Mackie
Posted May 24 2010 02:04 PM
I've been working with groups of students in this area for the past 12 months. The students are actively involved in the process of determining what works best for them and we've tried a number of methods.
From our experience, we have found Kodu to be the most engaging program for demonstrating programming concepts to "children" (ages 10 and under). The next step is Visual Studio/Xna Game Studio. For us, there isn't really an effective bridge. The students prefer to get in and give it a go and actually start to learn how to program in a proper environment, using real programming languages. According to the students, they find it easier to learn and retain information using a hands on approach, as opposed to a more linear structure.
Another goal was to try to broaden the field. We wanted to think about how we could attract a variety of students and take a more collaborative approach. To this end, we have been running two classes, a C# programming class and a 3D modeling class, then merging the two groups of students into development teams. This approach is working very well, both productively and socially.
We've just set up Wiki pages for each team on our Moodle site, so students can begin to collectively document the process.
We are working at making the site a template for other schools to use. The idea is to create a structure that will nurture peer to peer support and draw upon expertise from external sources that school communities can build themselves. We need to create a self perpetuating system that learning advisers and teachers can "support" without the need for being expert programmers themselves.
It's going to take us another month to get all the content written up.
We talked about this question in class on Monday. Here are some of the students responses:
Jack Steel (age: 13)
I am a year 9 student from Unlimited Paenga Tawhiti School in Christchurch, New Zealand.
A group of students from Unlimited have been doing a class on C# programming taken by Renea.
When I was at primary school Renea was doing a class there on more basic programming using Kodu and I found that good to learn the basic principles of programming, but it was only good for a short period and now that I am doing proper coding I have achieved heaps more and it is much more interesting.
I am currently working on a game with a few classmates and it is going well we had a template but are modding it to how we like it and have encountered many problems but have persevered and beaten them.
Francis Malloch-Boe (age: 13):
I have been taught a couple of programming languages i was doing websites in primary school i was using html and at high school i started learning c# with visual studio and xna game studio. It was a very simple code and easy to teach if you dont have a big class. I first started learning on a projector it was not that effective but fun then i got a student from unlimited to help me and some mates to make a car game which was fun now I'm in a little group making a tank game. I like Microsoft visual studio because it is very user friendly and is easy to use and has lots of templates which are easy to use.
Rowan Sinclair (age: 12):
It's really good to be able to directly do the programming, and having someone able to directly help with issues, plus being able to modify the code and play around with it as you learn it.
I think a classroom, or even a 1 on 1 is far better than any book or small program that tells you what to do. A classroom taken carefully and assisting needs individually and one at a time is really good, and it means that people can chat until their problem can be solved by the teacher. It just works more interestingly when there's a class.
James Harwood (age: 13):
It was great to create a program instead of just using word or other office apps (what we used at my last school). Using visual studio was tricky but rewarding. We used C# so that we can use the XNA framework and we used both classroom and trial and error way of doing it. The trial and error way worked the best because of the number of people doing it and it worked well on others.
Jay Harris (age: 14):
I think that the best way to learn programming is to be given some code and shown what it does by running the code and then finding in the code what makes everything happen like finding an if statement in the code that has a timer in it for how often that you can shoot or noticing how a method is called from within an if statement, finding the method and examining what it does. I find that an easy program for coding is Visual Studio from Microsoft because there are endless tutorials online that can explain to you how to do just about anything and can be found by typing what you want into Google Search. At first coding is difficult but after a while something clicks and you begin to realize how the code works. For me this breakthrough was if statements. Another great thing about Visual Studio is X.N.A. It has heaps of tutorials and templates that you can download to help you learn.
Comment by Lars_Kongshem : May 24 2010 06:08 PM
This book is a great introduction to programming concepts, written by one of the foremost computer scientists of his generation. It's not a programming manual, but a wonderful (and very readable) layman's introduction to the field -- perfect for capturing the imagination of a young teenager who might otherwise not be inspired to try his or her hand at making software:
The Pattern On The Stone: The Simple Ideas That Make Computers Work.
By W. Daniel Hillis
Answered by Looney
Posted May 31 2010 05:39 PM
Pragmatic Bookshelf publishes two really good introductory programming books depending on your language preference. Ruby fans should consider Chris Pine's Learn to Program while Python enthusiasts should check out Practical Programming: An Introduction to Computer Science Using Python.
Answered by ADP
Posted Jun 05 2010 10:06 AM
The best way to teach kids - make it fun.
Alice is a free (from Carnegie Mellon University) Educational Software designed to teach students computer programming in a 3D environment. Actually, makes learning about objects, methods, properties, variables, events fun because they're not the focus - the students focus is on creating a story in a virtual world.
There are a number of books including a textbook based on this educational software.
I introduced my daughter, at the time 12 years old, to Alice after she asked me to help her setup a web page to share game links with her friends. She played with Alice for a few days creating basic stories and I thought that was it. The other day I was surprised to find her and a friend having a blast programming a character to do a cartwheel. Her real passion is dance.
Hope you find this a useful resource.
Answered by Renea Mackie
Posted Jun 06 2010 02:28 PM
Alice has got a great reputation. I introduced Alice to the students in my Kodu classes last year (elementary/middle/secondary levels). Surprisingly, they didn't take to it. They didn't like the "feel" or the graphics, especially the boys. Kodu won hands down.
Students aged 10+ preferred to go straight into Visual Studio/Xna Game Studio and work on game tutorials. Doing game tutorials is a lot of fun. In our class, the students begin by customizing tutorials. It's a great way to learn. Before long, they're working on their own designs, from scratch. One of the key motivating factors in our class is alpha release dates for student games. As soon as a group has a game ready to play, we have whole class testing/debugging sessions. They love those sessions because they get to play games in class and test/debug at the same time. It creates a more "real world" experience and the feedback is extremely useful.
One of the most valuable lessons I'm learning is, listen to the students. My first instinct was "The students want to learn how to make games, how can I create or find a course to teach them?" In other words, I was thinking about delivering information in a methodical way so they could learn step by step because programming, according to many people, is difficult and not something kids can simply step into.
My second mistake was thinking of it in terms of "kids" and having to simplify it and make it "child friendly". I soon realized, students don't want that. They want to learn the real stuff and they want to work in proper IDEs, just like everybody else. Anyone that spends time with groups of children and teenagers will know just how fast they learn and they don't always learn in a linear fashion. They're explorers, they like to get in and play with things to find out how they work. You can tell them, but they really only learn through their own experience, much like the rest of us. :-)
This might fly in the face of traditional education models, but in our class, the best way to teach students programming is to help them to teach themselves, and each other, by creating what they want to create, and allowing the students to input in regard to the direction of the class. This means, you take on more of an administerial/support role. My time is now spent administering the site, searching for resources, preparing them, and also helping to keep the development teams on track and evolve the processes. It also means, you're not confined by student age, ability level, or school(location). The class model is very flexible.
Comment by bz7 : Jun 07 2010 06:43 AM
There is an excellent project called Scratch which is developed by the Lifelong Kindergarten Group at the MIT Media Lab. It is a fun and easy way to learn the basic building blocks of programming while developing fun stuff such as animations and games. It is also accessible to non-English kids since it has been translated to many other languages.
Answered by CaseyDunn
Posted Jun 07 2010 06:55 AM
I've had good luck with Scratch (scratch.mit.edu) and the neighborhood kids. the MIT crew has done an excellent job of fostering a peer-based community of young programmers.
The most successful experiment was to make 'birthday card' programs. This involved using one of the many sample scratch programs of a monty pythonesque character with a snapshot of a persons head and replacing the head with a snapshot of the friend.
This quickly leads into questions:" How can I make Julian jump?" , "I want to make him say something dumb" and off we go. The plasticity of the environment makes it easy to bring in kid made media and they love to do it. Some of these guys just sit down and hack things up when they're looking for something to do.
the programming language is a visual language which also appears in Lego MindStorms, Resnick's StarLogo NG ( a simulation environment ) and Ed's emerging Arduino controller environment Modk.it ( www.modk.it ).
Alice, previously mentioned, is also fun but I've found 8-11 year olds a bit daunted by the bump up in complexity.
Finally if you can stomach it StarCraft has a rules and triggers based programming environment tied into their map editor. The rowdier of these kiddos enjoy making goofy maps with triggers and rules and sharing them.
Answered by Keverdy13
Posted Jun 07 2010 08:26 AM
Small Basic is an easy, simple, kid-friendly program to teach the programming language BASIC. The only problem is that once someone uses BASIC and is familiar mostly in BASIC, then it will be a hard time to take them away.
Answered by Keverdy13
Posted Jun 07 2010 08:35 AM
My personal favorite is Scratch you can learn more about Scratch at http://scratch.mit.edu/. Scratch is a fun way to make 2-dimensional video games using simple codes like forever tags and if then. In addition, you can create variables for scores or, for something more advanced like Mario, as a move.
Something half-way similar to scratch is a programming program called Alice which you can visit at http://alice.org. It uses the same type of tags, except there is no forever, but there is in order and together tags. Alice, though, is a 3-dimensional program that allows you to make specific body parts move, etc.
Comment by Renea Mackie : Jun 08 2010 12:11 PM
Yes, Scratch is quite good for children. Some of the students aged 10 and under liked Scratch. The older ones preferred Flash.
Answered by AlfredTwo
Posted Jun 13 2010 06:31 AM
I taught high school computer science for several years. I used Visual Basic as a first language because it gave students early success and let them create real looking programs right off the bat.
These days there are many tools for kids but the ones that tend to work best are the ones the people doing the teaching are most excited about. Koduis great for younger kids and there are teaching resources starting to become available. Check out Kodu for PC – a teacher’s tutorial.
Lots of people are using Scratchand Alicewhich have some similarities to each other at least in how the programming works. Both of them (like Kodu) really remove syntax errors from the equation.
Small Basic is a great step between graphical languages like Kodu, Alice and Scratch. Several people have been developing courseware at Teaching Kids Programming. And more is coming for use both in after school or during school learning environments. Small Basic also has a "graduate" feature that converts a Small Basic project into a full Visual Basic project to help move up to the next level.
Regardless of the tool or language the keys are to make it fun, show students some success so they know they can do it, and let them teach each other as they experiment on their own. All of these tools allow for that.
Answered by Renea Mackie
Posted Jun 13 2010 12:18 PM
"Regardless of the tool or language the keys are to make it fun, show students some success so they know they can do it, and let them teach each other as they experiment on their own."
I couldn't agree more. That's why the students in our classes are progressing so rapidly with programming knowledge, because they're learning it their way, and working in development teams on games or apps, rather than one individual working on a basic piece of code makes it far more interesting for them.
Answered by TraceyPatt
Posted Jul 04 2010 04:47 PM
I'm not a elementary or high school teacher but have been in IT for many years and had some experience with programming.
My kids like Scratch, but they really liked using Stagecast. (http://stagecast.com). It's very 2-D but has an excellent tutorial, so if a parent or teach has NO programming, you can sit through the tutorial with the child or let him/her read on their own.
There is a good deal of depth in teaching object oriented programming and is a lot of fun. You can even post the games on a Web site HOWEVER, the viewer has to download this stagecast applet on their machine to play the game from the Web. It was $50 when I bought it and my children where 6 and 5 and able to work with the program. Of course as they got older, they could get more sophisticated.
Now after several years of playing with this my son is ready to move on and we are playing with Kodu and I'm considering Python.
Answered by Renea Mackie
Posted Sep 21 2011 02:07 AM
We lost all our class PCs in the earthquake in February. Our whole school campus was in the Red Zone so we've had to relocate to a temporary premises that doesn't have enough space. So we've had to be particularly creative this year. None of our 3D modeler students had their own laptops and most of the new students coming in, didn't have suitable laptop specs to run the software we use. We're still waiting for a more appropriate space and for some computers.
In saying that, we've had an amazing year! We put our energies into PR and went to Wellington to present at an event called Tech Hui. It's an IT conference organized by high school students. UPT Digital students demonstrated how our games development teams work as part of their presentation on stage. The presentation: http://www.youtube.c...u/1/XnTt1JHVeXY
We also presented at Microsoft Tech-Ed 2011 in Auckland recently. It was a great learning experience for them and Tristan, our youngest speaker, was actually the youngest person to present at Tech-Ed worldwide. http://channel9.msdn...and/2011/INO301
Short blurb on Microsoft's GovTech Blog: http://blogs.msdn.co...n-auckland.aspx
Due to our lack of technology and workspaces, we've focused on 2D games and apps. Jay (Year 11) has just released his first game in the Windows Phone Marketplace. The Windows Phone games and apps are actually working really well for us! Last year, when we were making games for PC, students would sometimes get carried away with huge ideas for games. With the Windows Phone, they think about smaller, more achievable projects, simply because the device is small. Interesting! It's a great place for our beginners to start as well.
A big project we're launching into right now, is developing a hub for our IT PODs. The students are in the midst of planning it at the moment and we're going to build it offline using Visual Studio/SQL Server. Challenging, and interesting.
Answered by macnlos
Posted Jan 02 2012 01:18 PM
I've got a 4 and a 2 year old here. When they each reach 6 years I'm going to start working with them but I'm going to approach it differently. Rather than teaching them how to "program", I'm going to work to teach them how to break down problems and think methodically. If they can't do this then there is no point in teaching them how to program.
1) Legos. Not mindstorm or other fancy stuff... just plain old legos.
2) Modeling clay.
All of these start out with a goal/desire and then you have to assemble parts to realize the goal. If they can do this well then I can work with them on the mechanics of a computer. I have emulators for an Apple IIe and will start out with having them code basic. When the get a little older then I will look at OOP languages.
Sent to you from my
iPad, iPhone, BlackBerry,
Laptop, Desktop, or
Answered by Greg Samways
Posted Feb 13 2012 11:39 AM
I am a professional trainer in the oil industry. One of the things I have learned is the many ways to learn, and this is something I now teach as part of my technical courses. One of the things that sticks out is that we learn best when we are having fun and we have fun when we are playing games.
Which brings me to Code Hero. This is an indie game that lets players shoot stuff with a code gun and in doing so learn to code (java script, unity java scroipt and html5 to start with), in a way that the player can learn to change the game environment. It is very Tron / Matrix like.
I would recommend signing up for the Beta and at the same time help the developers to take the game to the next level at kickstarter: http://kck.st/tlXLYB
Beyond that, the developers belief that all knowledge can be gamified for learning, so learning how to create the games is a must!
Answered by Renea Mackie
Posted Aug 01 2012 05:34 PM
Another follow up:
We're starting our first US pod at North Ridge Elementary School in California! Should be a lot of fun! We've also started some test pods at another high school in NZ, a primary/intermediate school (elementary/middle school) and an after school pod at a community IT project. Our brand to develop the pods is called IT HOTHOUSE (www.ithothouse.com, @ithothouse). We're looking for IT mentors in California to join North Ridge Digital's mentor circle. Let me know if you know anyone! > @Renea
Answered by cetrix
Posted Aug 02 2012 12:07 AM
W3schools is a good way to start web development programming languages for childrens and they do need guidance so you can see a website on learning tutorials-> Learn and Earn.But off course children love to learn those things in which they are having fun so i w'll recommend you to try teach them in a funny way.
Comment by gigihan : Oct 15 2012 04:00 AM
It is not an easy task to teach programming to children, they must look at these lessons as something funny and they will learn more quickly than giving them to read some boring tutorials about programming. I saw a post about behavioral programming and it contained a lot of useful things, I am not a teacher but work as a programmer for a lot of years and I think those tips will help you to find the best way to teach programming.
Answered by CyaNn
Posted Feb 12 2013 07:14 AM
Actually I am programming a little app for Android platform called Algoid.
This app has the ambition to have a small feedback loop with a complete and full paradigm language. It's goal is to learn progressivelly programming through actual greate languages features and be as closed as possible with industrials standards (c / java).
The paradigms are : imperative, functionnal, object and aspect.
The features are : in app tutorials and language reference documentation, DEBUGGER (the only app to have a true debugger in the store at the moment), STEP BY STEP (idem. Used to understand where the programm goes in real time), Scope inspector (And what is the states of the variables)....
For more details, see http://caron.yann.fr...id/features.php
I will offer this app I have designed to my son. (I hope it will like it.... lol....)
Some images :
I hope you will like it (and your son / daughter of cours)....
Answered by Jim Jacques
Posted Feb 28 2013 09:37 PM
The list below is in no order and just provides a simple reason why it may be a good language for kids to learn.
Lisp and Scheme is used heavily in research oriented universities when teaching an introduction to programming and the theory of programming. When I first learned these, I found them difficult to grasp given that I had a procedural background, but academics continue to sing the praises of these languages for ease of learning. There used to be a recommended tool called DrScheme which has now morphed into Racket.
Java would not be my recommendation given the extent of the libraries and the difficulties of teaching object oriented programming. However, given the popularity of the language, there are sites targeted to younger developers and tools like Greenfoot and BlueJ to make learning easier.
C/C++ is probably one of the more difficult paths to take. There are limited resources for teaching children, but given the continued popularity of the languages they need to be considered.
C# would be an interesting choice when you include the .NET libraries. Like C++, there are not a lot of resources but Microsoft does have one guide for “Sharp Kids”. With .NET, you could focus on building web applications which could add to the “interestingness” of the education.
Visual Basic is an easy language for people to learn, given its BASIC roots, and adding .NET give it the same benefits as C#. Again, Microsoft has a guide for “Very Bright Kids”.
Smalltalk and its variants like Squeak continue to be recommended when people ask about learning programming. The most recommended tutorial is now called Bots Inc that is based on the book Squeak: Learn Programming with Robots.
BASIC is the language that many in my generation learned (on a TRS-80) when they were young. It is still in use, and Microsoft offers Small Basic for beginning developers.
Ruby has a solid amount of resources for teaching kids, especially when compared to other popular languages. Ruby for kids and Rails Bridge are good options to review.
Python is another popular language that seems to be recommended to younger developers. The most popular recommendation by far was Live Wires.
PHP was not recommended too often, but I wanted to include it given that it is easy to create a simple website. Keeping kids interested is difficult, and the feedback of quickly building a website could prove beneficial. Not surprisingly, there is a PHP For Kids tutorial as well.
Other languages that were mentioned were ML, Prolog, Haskell and REBOL. These are not nearly as popular as the other languages, and in some cases may introduce some difficulty in teaching because of the typical lack of knowledge that people have of these languages.
Answered by ujas
Posted Mar 20 2013 08:57 AM
Actually, I have the same question, as I have always wanted to teach programming to my daughter. Unfortunately, she got interested in accounting majors and thus, I have never managed to achieve my goal. Hopefully, I am going to make my 12-year-old son be interested in this field and as long as I find some information about that, I’ ll let you know.
Answered by Honch Honch
Posted Sep 24 2013 12:09 PM
This is an extremely relevant topic in this day and age. As more kids and teens are interested in learning how to program and more parents want their children to learn these relevant skills, I have noticed that programming camps are becoming more and more popular. One that I have personal experience with is iD Tech Camps. I directed four of their camps when I had my summers off as a high school teacher. I was SO amazed at what the students were able to accomplish and learn in just a week or two. Here is what I think iD Tech Camps does right (which I think answers a lot of the questions about how to best teach programming):
1) Small class sizes! They guarantee an 8:1 student to instructor ratio, which provides for more individual attention and instruction.
2) Age segmentation: This means that a 7 year old and a 17 year old are not in the same class, helping the instructor gear instruction towards the specific age group he/she is teaching.
3) They use blended learning. As a teacher, I know that this really helps with keeping students engaged and provides more meaningful instruction. This means that they have an online curriculum that the students work through (with the instructor’s guidance) but the instructor also uses hands on teaching methods such as whole class instruction, team activities, and one-on-one time with every student.
4) The classes use specific programming languages and software that are tailored for the age group and experience level of the students. For instance, there is a beginner’s class using Scratch for the ages 7-10 group, a beginner-intermediate class using Java and Scratch for the ages 10-12 group, and then for the teens there are a variety of classes using languages such Java, C++, and HTML.
5) It’s FUN! What kid or teen doesn't want to have fun? Let’s not forget that it’s also a summer camp, so making it fun helps the students get excited to learn and create amazing projects with their new-found programming skills.