Programming For Kids

I tried a couple of applications with my four-year-old son: Pictomir and MIT’s Scratch.

Neither seem particularly well maintained and neither are suitable for young children without lots of supervision. Pictomir is easier to get started with, but not easy enough. Scratch is probably more interesting to older children, though they’ll partly be learning about how software is still so often arbitrarily annoying, and I’d prefer that they were introduced via a better example. I’m very tempted to write something better.


Pictomir at first start up.

Pictomir leads the child through a series of levels, telling an R2D2 robot (Don’t tell George Lucas) to move around some isomorphic squares to paint some tiles. At the beginning the program exists and the child just needs to click the play button. In subsequent stages the child has to build part of the program himself, and then all of the program.

The available commands, at least at the start, are icons for left-turn, forwards, right-turn and paint at the top of the screen. These may be be dragged into the available boxes in the program at the right of the screen, though you can instead put them there by clicking to select and then clicking on the empty box in the program. However, the available commands are far away from the program where you must place them, so the child has to spend lots of time moving the mouse pointer back and forth across a wasteland of empty space.

I found an official Ubuntu package in the developer’s PPA. It was last updated to Ubuntu 10.10 (Maverick), but you can install it manually on later versions. All of its UI is in Russian, though you can ignore most of it because the UI is icon-based. When I built the newer code from source a few months ago, I think the UI was translated.

I guess that Pictomir was developed for a specific screen size and generally older PCs. It does not scale the playing area up, so the child has to deal with a tiny R2D2 on a tiny grid in the middle of wide empty space.

pictomir has a bare svn repository, though I can’t see how clean its commits are, and I don’t know if it’s still used. There are no commits since last year. My svn says that the svn format is too old to check it out, though I’ve checked it on on previous Ubuntu installations.

It’s website it quite awful (and only in Russian). I only discovered Pictomir thanks to commenters on Google+.


The Scratch UI has several problems that make life hard for the child:

Scratch, after creating and running a small program.
  • Scratch requires the child to cope with tiny targets (See Fitt’s Law)
  • Scratch demands the use of drag and drop. This is frustrating for normal users, let alone children, and really hard with some laptop touchpads or trackpoints.
  • Update: Scratch requires the child to understand the difference between left-click and right-click. Right-click brings up a help context menu, which just causes confusion.
  • Update: The tiny commands have tiny text edit boxes. Children have a high chance of clicking it instead of clicking the command block itself. This problem could be partly solved by accepting drags on the edit box.
  • Scratch requires the child to double-click (see below).
  • The commands require the children to read, but a subset of the commands could instead be respresented by icons. The words are particularly hard for beginner readers because they are written in such a tiny font.
  • To get started with scratch, you need to figure out that you need to double-click on the first program command to actually start your program. There is no simple run button. You can cause your program to be run by clicking the green Flag button, but that’s something you need to put in your program.
  • When you try to move a command around in the program, it moves the command and all subsequent commands, as a group. So moving just one command means moving stuff around and then moving some of the stuff back to where you started.
  • Your program moves the Scratch cat sprite around the canvas, but that canvas is tiny, and the sprite can move off screen. The only way I found to get it back was to double-click the set-x-to and set-y-to program commands. I can figure that out, but beginners will not.
  • When you’ve drawn all over your canvas, the only way to wipe it is to go to the Pen set of commands and double-click the Clear command.
  • The sprite moves far too fast for the child to understand the relationship between the commands and the motion, without someone explaining it. If the command says move-10-steps then I’d expect the sprite to visibly move 10 steps. Advanced users might prefer it to be faster and smoother, but the default should make things obvious.

There are some other strange things in the UI which are probably a side-effect of its eccentric (Smalltalk) implementation.

  • Scratch has a menu (well, an icon-menu) for changing its language, instead of just using the user’s regular language.
  • None of the UI elements (menus, tabs, buttons, file chooser dialog, etc) match other standard applications on the system.

I think Scratch could be really popular with younger kids if it ran on Android with a touch interface and with less text, maybe as a simpler version. But the developers don’t seem to have any interest in that – they seem to be working on a Flash-based version of Scratch for the web, which is unlikely to work well with touchscreens, even if they can get Flash to work on Android and iPhone (they won’t). And I have no interest in hacking on Smalltalk. There seem to be various programming-language-based forks of at least the underlying engine, but none seem to be successful.


18 thoughts on “Programming For Kids

  1. From my own experience I can tell that using Smalltalk for UI work is very “academic”, to put it in a friendly way. From you actually find out that it uses Squeak, and with that, probably uses “Morphs” for the widgets, the slowest way to draw an (inconsistent, horrible to use) UI.

    I guess the developers behind the project pride themselves for their image-based Squeak development (nope, they don’t use sourcefile based development that could be easily managed, let’s say, in git) when I found image-based development incredibly awkward and error-prone (“hey could you send me your non-corrupted master image per e-mail please? yes, the 100mb version, thanks!”).

    Then the biggest problem: Try to use *any* open-source library (that is likely C-based) in Squeak and you will notice how rotten the FFI support is. Don’t expect much support from the community either, they are simply too small and too elitist.

    Stay away from anything Squeak, it’s simply not a good approach to design an IDE *and* the execution environment as one untangleable mess.

    Smalltalk itself however remains a very useful language to learn about object oriented design. Give GNU Smalltalk a try at some point, you might like it ;-)

  2. As a teacher of CS I am using Scratch to teach programming. My students are between 12 and 15 and they love it. After ~90 Minutes the first soccer games are working (WASD and IJKL for moving the sprites). Works really good and the UI is understood within 15 minutes.

    Of course 12y is not 4y :-)

    1. @Carsten: I would assume your students love it because it gives quick results … initially. Try anything complex and you hit into brick walls (I’ve been there). Now if one of your students actually wanted to pick up a career as a software developer later on, she will be crushed once she realized that Scratch/Squeak didn’t teach her anything useful at all that also applies to the real world (I purposefully didn’t mention Smalltalk, because I think that part *is* useful). Instead, she will have wasted her best learn-how-to-program years within a dead end when it would have been so easy to pick up C in that age.

      So by trying to make it easy for 90% of your class, you make it very hard later on for the 10% that would have loved a programming career.

      (That Scratch doesn’t teach you one bit about modern development backed by a DVCS is a grave mistake, for instance.)

      1. I couldn’t disagree more.

        Teaching C to a 13y old is not going to work for 90% (I’d say 99% but I will take your number) because it takes ages to do something a simple as hello world.
        In scratch they learn about loops, if/else and many other things that are valid concepts in pretty much every language out there.

        Of course we don’t stop with scratch, after 2 or 3 month we go on, usually with python, last time with Progressing (a subset of C). As the students already know all about loops and flowcharts the rest is syntax!

        1. Just out of curiosity, where are this “programming classes for 13 years old” be offered? I would have loved to attend one of this when I was that age, and certainly didn’t know they existed at all.

          1. In india , i am not joking…we were taught C programming in our school.. and we all loved it… 13yr can easily understand C… if I could, I believe anyone can… it just boils down to the point whether you are interested or spoon fed.

        2. That’s the whole point, isn’t it? Not everyone has what it takes to become a programmer. If at that age they cannot grasp the concept of pointers and structs (and how it all looks in memory), chances are they won’t learn it later on, either. Naturally, my argument is also about weeding out those who wouldn’t want to program, instead of getting everyone to pass.

          Of course there are plenty software developers out there who never bothered with C, but I think schools should not try to take shortcuts and lie to kids: C is still pretty much dominant in this world and if you understand C you pretty much understand all other imperative languages out there.

          K&R is what, less than 300 pages? That’s less than a typical course book for math for 13y old.

          Please don’t make C artificially appear harder to understand than it really is.

  3. just an opinion… i don’t think these tools will teach a kid to learn programming… they will have to unlearn this when they grow up… easy things will make them lazy to learn real programming.. and nowadays kids like hard stuff right from the beginning… kids should be learning more math at 4 than learning this.. I would rather teach applications like blender 3d at this age… they will really love it… and will be useful to develop more spacial thinking…. these tools may bring interest to kids but kids nowadays are more advanced than we think and can easily learn any modern language … sometimes better than an adult trying to learn programming..

    eg:- one of my friend’s daughter (just 3+ years ) put parental lock on all the news channels just within 2 days after the brand new TV reached home.. they didn’t realize it until they brought a technician to see what was wrong with the TV…. and she was acting as if nothing happened…. this is nothing unique to her.. its something that almost every kid nowadays are capable of…

  4. You might try “Guido van Robot”. As the name suggests, it teaches a language that leads naturally into Python later on.

    You might also try “Runestone Wisp”.

  5. One system you may want to try is Looking Glass, . Looking Glass is a programming environment specifically designed for middle school aged children. Looking Glass uses storytelling to motivate children to program. The project is very much in it’s early stages, but we are continuing to develop it so that it can also support independent learning. If you go through the Remix process in Looking Glass you have the option of being presented with a tutorial which will show you how to create the remix animation on your own.

  6. Hello,

    (Disclaimer: I’m a member of the MIT Scratch team)

    @Murray, thanks for the feedback. You are right in pointing out that Scratch is for slightly older kids. We are working on something called ScratchJr ( in collaboration with Tufts University, for children aged 5-8, and many of the things you point out (tiny targets, tablet friendliness, move() command refinements) have been dealt with in ScratchJr (and it’s in Javascript). As for the green-flag, yes, that is a convention, but it was the most convenient design choice we could come up with (it has its own drawbacks, I agree.). Moving blocks – not sure what you mean, could you describe it a bit more ? For the sprite moving off-screen, you will notice that it does not completely move off-screen (it gets stuck, so a part of it is always visible) – so you can drag it back in. As with the pen – not sure I’m reading this correctly, but to draw anything on the stage, you need to go to the pen category. So to clear the stage, shouldn’t you also be expected to go to the pen category ?

    @mikhas: It’s not academic elitism. It was a choice primarily determined by the skills that the people we had as our staff members at the time we started working on Scratch, and the fact that we like Squeak, and have had historical ties with the Squeak team :-). At the end of the day, we are a small research team. Scratch is something that came out of a research-lab – not out of a traditional product company or a open source group. It’s hard to apply traditional product-development or open-source methodologies in a lab setting (though we try to do that as much as possible).

    @mikhas and @fazil: Where do you draw the line for “real programming languages” ? Assembly ? Flipping switches manually ? Programming is skill that is increasingly essential for everyone, not just professional programmers. Or at least, understanding the idea of computation is becoming essential. Scratch (and many of the other tools mentioned here) enables you to do that. I’m not saying that we should not teach C – but why not have multiple pathways ? A kid interested in making games can start doing them in Scratch right off the bat – a kid who is interested in messing with system memory can start doing that quickly in C. Scratch is a programming language, yes, but it is also a tool for expression, and has a lower barrier to entry than most other programming languages. There’s nothing to unlearn if you are moving from Scratch to other programming languages. Intro to programming courses in major universities in the United States (Harvard, Berkeley, etc) start from Scratch or Scratch like languages, with pretty good results. outlines the story of the course at Harvard, if you are interested.

    1. Thanks for taking the time to respond. ScratchJr seems like it would be an improvement, going by the screenshot. I look forward to trying it one day. I can only encourage you to work on it in the open. You have little to lose by doing that and much to gain.

  7. > For the sprite moving off-screen, you will notice that it does not completely move off-screen (it gets stuck, so a part of it is always visible) – so you can drag it back in.

    That happens with a single move command, but it doesn’t seem to happen with anything more complicated. See this screencast:

    > As with the pen – not sure I’m reading this correctly, but to draw anything on the stage, you need to go to the pen category.
    > So to clear the stage, shouldn’t you also be expected to go to the pen category ?

    That’s only slightly less than arbitrary. It’s not discoverable.

    I’d rather use a bug tracker, by the way.

  8. Hi Murray,

    I a technology instructor and interactive developer from Vancouver Canada. I’d recommend you have a look at Unity3d. I have an 8 year old son and we are putting a game together with it. It’s a great tool and it’s free.

    I also put an online course together aimed at beginners, young or old that shows them the basics of making a game with Unity. I’d be happy to send you a free pass so you and your son can can try it out and let me know what you think.

    You’d have to assist if you son is 4, but if he can tell you how he wants the game to work, you can work together to make it happen. I think you’ll be pleasantly surprised what you’ll be able to accomplish.



    1. Richard, sure, thanks. I’d be happy to try that out, though I’m very sceptical that my son (now 5) would be ready for it. Right now, the main obstacle to all this for me is the small targets and generally awkward UI for things like Scratch.

Comments are closed.