As a parent, I am always looking at what my children are learning and what they like. As a software developer, I hope that my daughters embrace their inner geek one day and get involved with technology. That being said, I was wondering at what age kids should learn programming and what resources there are to teach kids programming.
I found that some people were starting the education as early as 6 years old. That seems a little early to me as the child barely has any formal educational background, and logic is not something children embrace that early. A more common age seemed to be around 12 or 13, or the equivalent of 7th or 8th grade. Obviously, this should not be taken as a strict rule given that some children will be more advanced, or even just figure out things a bit earlier.
Now that we have addressed the age issue, the big question is what programming language should the child learn? This type of question is a bit narrow as it eliminates the learning environments that are programming based, but not syntax based. The other problem with this question is the near religious fervor it tends to attract as people try to promote their favorite language or discredit their most hated language. With that in mind, I decided to collect the information that I could find that could help kids learn programming.
This section will probably draw the most criticism. Traditional programming languages, meaning the ones that the parents are using in their jobs, are the most direct way to teach programming. However, a direct approach may not work as well with teens or preteen children. Given that this is not a new problem, many people have written tutorials on how to teach their favorite language to kids. 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 are 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 RailsBridge 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 LiveWires.
- 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.
Learning Environments And Other Things
- MSDN Development for Beginners, Kids Corner is an interesting resource from Microsoft for teaching children. Some of the tutorials mentioned above are from this MSDN resource.
- Teach Kids To Program is a site focused on teaching kids programming using games.
- Alice is one of the most highly recommended programming environments for kids. There is a Storytelling version that is geared towards middle school education as well as the base version for high school and college.
- Logo is one of the oldest teaching languages and it has evolved into many things. There are Windows versions, Mac versions and plenty of tutorials available through some simple Google searching. LCSI Microworlds is one of the more advanced (and commercial) options available.
- Phrogram (previously known as KPL) is another often recommended environment. It has grown from being child-focused to being a general purpose environment based on .NET.
- Scratch is a programming language developed by the Lifelong Kindergarten Group at the MIT Media Lab that allows you to create interactive stories, animations and games. This is another popular recommendation with a lot of information and tutorials available.
- Colobot (Colonize With Bots) sounds like another interesting option. The Wikipedia page explains the education portion of the game, “The main feature of the game which makes it educational is the ability of the player to program his robots using a programming language similar to C++ or Java.”
- Terrarium is another graphical environment and game, which was developed by the .NET team. It is not focused on children, but it is considered a learning environment for .NET.
- Lego Mindstorms are robots that have interfaces and projects in various languages. This is a cool concept because you can easily craft a program to control the robot. It definitely keeps people interested, and there is a ton of information available.
- Stagecast Creator was recommended several times, specifically when targeting younger, preteen children. The biggest reason kids will like it is that they can build games using the environment.
- ToonTalk, “Making programming child’s play”, is an animated world where kids solve challenging questions. Interestingly, it is one of the few resources translated into several languages.
- GameMaker is not targeted towards children, but is a game building application that does not require you to write code. Given the non-code basis, it was recommend several times as a good way of learning programming while keeping kids interested.
- Interactive fiction is something that I remember fondly, and Inform, the most popular interactive fiction language, is still being used. It is based on natural language, so it could be easier to learn than other code based languages.
- Learn to Program a book by Chris Pine has been recommended several times and is one of the few books recommended at all.
If you start searching, there are a ton of game programming sites, interactive programming environments and variants of the languages listed. You could spend days creating a list of all of the information available. Hopefully, this list gives you a good starting point in educating your children.
There were a bunch of sites that I used in this research, but I wanted to highlight a few as being quite helpful and useful resources in their own right.
- Teaching my kids to program by Don Box is an interesting post with a great list of comments.
- Teaching kids how to write computer programs by Marshall Brain has some game-based resources, but also gets into some device programming with a BASIC Stamp.
- Environments for Teaching Kids to Program and Explore the World Through Code by Mark Verber focuses more on the learning environments than traditional languages.
- The Wikipedia list of educational programming languages has a good set of links for the various languages available and some more descriptions and history of the languages and environments themselves.