I'm looking for a self contained application that would assist in teaching basic programming concepts to 4th graders (9-10 years old).

NOTE: I'm looking for an actual application that would help in teaching them loops, conditional logic, etc. in a fun and interactive way. I'm a computer engineer and know Python, Ruby, Perl, and C among other languages, and very well could teach them one of these languages, but I wanted to teach them more about the concepts rather than how to code in programming language X.

I've found but never used any of the following packages:



web based free & commercial

As you can see, there is a huge selection of choices (these are what I found in ~30 minutes of searching). Which of these would be well suited to getting my kids off the ground and interested in becoming code monkeys?


  • Should teach the concepts rather than be language-specific
  • Must be interactive
  • Commercial or open source is acceptable
  • Should run in Linux (preferably Ubuntu or Fedora)



5 Answers 5


I'm going to recommend Scratch. Scratch is a free program that is specifically designed to do what you are looking for: teaching kids the concepts of programming in an easy way without making them worry about learning syntax.

Scratch is programmed in a drag-and-drop interface. The commands are all color coded by type, and are shaped in a way that they snap together like Lego blocks. This makes it easy for kids to figure out what goes where.

When you start Scratch, you are given a simple sprite and you can write code to act on that sprite. Here is an example of a very simple program:

simple Scratch program

Control commands are yellow, motion commands are blue, sound commands are purple, operators are green, and variables are orange. The shape of the commands tell you where they go. Events go at the top, and commands that do something go below that. Comparison operators and variables are shaped in a special way so that it is easy to figure out which goes where.

Even with a simple program like the one I showed here, kids can learn about variables, events, conditionals, comparisons, initialization, etc. My kids are a little younger than the official Scratch recommended ages 8-16, but even they had fun rearranging the commands around and watching the sprite do different things. It inspires experimentation.

Scratch also features an online community where kids can share their programs and download programs that others have written.

Your requirements:

  • Scratch teaches concepts without having to teach syntax.
  • It is interactive. As soon as you drop the command in the window in a meaningful way, it becomes active.
  • It is gratis and open source.
  • It is available as a web app or a desktop application for Linux, Windows, or OS X.
  • 2
    This is what I'd recommend. The tutorials, and examples on the scratch websie are pretty great, and it shows the basics like loops brilliantly. Commented Feb 25, 2014 at 16:19
  • Scratch won't run on an iPad as it requires flash. An HTML5 version is apparently under development, but the timeframes seem vague.
    – rossmcm
    Commented Jan 6, 2017 at 22:57
  • I never saw this translated. My problems is that the kids I'm teaching can read, but cannot understand English. Commented Apr 17, 2018 at 14:54
  • @ThomasWeller The online version of Scratch is available in 50 languages, including German. To switch languages, open your Scratch project and click on the globe icon in the upper left corner.
    – Ben Miller
    Commented Apr 17, 2018 at 15:04
  • @rossmcm Scratch 3.0 does not use Flash.
    – Eric S
    Commented Dec 31, 2020 at 15:41

Greenfoot, Scratch, and Codecademy are good options. It really depends how advanced your student(s) is/are.

Scratch is good for young students to first get involved in programming. It teaches basic programming concepts in a simple, block based, way. It can be used to make almost any type of 2d project relatively simply. Although scratch is simple and less scary than code for first-time programmers, it also is a bit far from real programming, and doesn't teach as many basic programming concepts as it could. For example, it doesn't include for loops, and custom blocks are limited to command blocks (as opposed to number/string and conditional(boolean) reporters. This sort of problem results from the scratch team's desire to make everything simple for beginners. That might be fine, or it might lead to a student's programming for loops with a manual count variable until corrected. Nevertheless, Scratch is still a very good entry point into programming for young programmers, especially if code is still scary to them.


Greenfoot teaches object orientation with Java. Create 'actors' which live in 'worlds' to build games, simulations, and other graphical programs.

Greenfoot is visual and interactive. Visualisation and interaction tools are built into the environment.

The actors are programmed in standard textual Java code, providing a combination of programming experience in a traditional text-based language with visual execution.

I recommend Greenfoot for older starting programmers who are not afraid of code.

Codecademy is good for anyone motivated to learn one or more of the languages offered there. Former programming concept knowledge may help you progress faster, but it is not necessary. Just read the step-by-step guide to each lesson carefully, make sure you understand it, and fulfill the task to progress. Codecademy teaches what they teach well, but in a very structured fashion, closer to the classroom type instruction. You have to write each script the way they say to, which may be a little bit boring, but you come out knowing your way around the language. This is as opposed to scratch and greenfoot, where you can choose what to make.


You could also try Netlogo - it is more a modeling environment and quite advanced actually. However simple models contain few GUI elements and very few lines of code. It is free and probably open source. Needs Java.

Simple models could be used to explained to kids. And Netlogo puts a focus on documentation. The downside is that the teacher needs to be an advanced user of Netlogo herself (in order to avoid the more complex features)

Another example worth having a look is Racket (specifically the "Beginning Student" dialect of Racket) and the accompanying How To Design Programs HTDP initiative. John Carmack's son has programmed 40-level jump-and-run game Fly in Racket when he was 10 years old in 2015, but John disliked HTDP's teaching materials though.


I would use a tool which gets used in real life instead of something which was created for teaching.

Why not use PyCharm as IDE and a very simple basic example?

As basic example I suggest:

Print out "hello world" 100,000 times. Kids love this. Creative pupils might change "hello world" to "my sister is annoying". And then one fundamental building block was created: They have fun.

If you avoid to print a newline, then the screen does funny shaking. This gives the subjective experience that there happens a lot :-)

import sys
for i in range(1000000):
    sys.stdout.write('hello world. ')

Next thing to discover could be the endless loop and how to end it.

  • On one hand side, Python is very simple and good for children and pupils. Duck typing e.g. is helpful for children. But then there's __init__(self), if __name__ =="__main__" and a bunch of stuff that's really tough to explain. Commented Apr 17, 2018 at 14:58
  • @ThomasWeller - But you don't have to teach those features anywhere near the beginning, if ever. Lots of people use Python as a system administration scripting language, and they never have to use those features. Also, your argument could equally apply to virtually every programming language.
    – John Y
    Commented Apr 17, 2018 at 22:14
  • What I am wondering is why you would start with import sys and not use the classic print. We are talking about beginners, right? (Heck, I have been using Python for many years, including at my job, and I have never used sys.stdout.write. Ever.)
    – John Y
    Commented Apr 17, 2018 at 22:16
  • @ThomasWeller yes if __name__ =="__main__" is hard to explain. But kids learn better than grown-ups do. In the beginning a simple "it is like it is" is enough.
    – guettli
    Commented Apr 18, 2018 at 9:10
  • @JohnY I use sys.stdout.write() to avoid the newline which gets emitted by a print(). The fancy screen shaking only happens if you omit the newline.
    – guettli
    Commented Apr 18, 2018 at 9:10

I'd like to recommend the python LOGO module - turtle (part of the standard library, and thus pre-installed on most linux distros). I suppose it's best suited for the older kids, but (in my opinion) it's much more gratifying than scratch or the like, since it's a real programming language. After teaching programming basics using turtle, you can naturally move on to using other libraries in python (etc. cherrypy for web development).

For example, here are two tutorials I know that are used for turtle workshops:

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.