free your darlings

Published: 2022-09-01

Monkey Machines

Teaching kids to think like programmers before they can read or write

I had an idea that I wanted to teach kindergarten kids to understand basic computer functionality and to think like programmers before they could read or write. The Monkey Machines idea started to form.

Monkey Machines is an app intended to be used on tablets. In kindergarten or at home. The user can drag and drop monkeys and other props on to a landscape. Each monkey represents a simple programming function such as an IF-statement. A monkey thinking of a red banana will pass all red bananas to the right and all other bananas downwards. An IF-statement where the variable is the color of the banana. Chains of monkeys passing bananas around in the landscape is what forms a monkey machine.

The monkeys are animated as a way of explaining their function. In the functions library or when clicked a constantly looping animation shows how the monkey interacts with the surrounding environment. For instance, how it handles a banana depending on what color it has. Animations of the monkeys once they are put in the landscape is more situation based as they react to the running code. Idling monkeys can still be animated for a better understanding of what they are waiting for. They can even react to not being properly placed in the landscape, just like a developer's code editor highlights coding mistakes.

A monkey machine can be run at any speed. From very slow, where every animation frame is visible, to super fast, where you can hardly see the bananas as they pass by. Slow speeds are useful for debugging or if the kids just want to play around with the monkeys in the landscape. Full speed is for running interactive apps such as games.

Even if Monkey Machines looks like a video game the chains of monkeys can form really advanced code. Of course I don't expect kindergarten kids to be able to program advanced machines from scratch. Instead, there has to be vast library of ready-made machines, such as games, painting apps, animated clips, drum machines and interactive musical instruments. And just like kids are used to swipe and select videos on YouTube kids they can choose from thousands of machines in an online shared library. Once the machine is loaded on to the local landscape the kids can start reverse engineer it and move monkeys around as they like to see how it affects the machine. Just like a lot of us developers got into programming.

Here is a screenshot from my proof of concept web app. I can just mention that I am not a designer. This is a MVP to test if it was at all possible. It was, but the app needs to be re-worked. In this landscape I have created a very simple random sound generator using chains of monkeys and a looping water stream. In the top you have the machine library where kids can choose ready-made machines to use in the landscape. The monkey with the camera can take a snapshot of the current machine and save it in a local library. Machines can also be shared with others. On the left you have the speed selector and on the right the functions library.

Here is a simple chain with three caller monkeys explaining the canvas functionality. The canvas is used to paint pixels. A caller monkey calls the crane operator monkey and tells him what to do, one instruction at the time. Pretty much like instructions sent to your graphics card that paints pixels on your screen. What the instructions are depends on what is on the caller monkey's mind. If it is a yellow banana the caller monkey tells the crane operator "yellow". Crane operator monkey shouts out the color to the painter monkey who paints a yellow pixel. The caller monkey can also communicate directions (arrows) to the crane operator monkey who will then use the crane to move the painter monkey accordingly. When the caller monkey is done it passes the banana to the next monkey. In this example another caller monkey with other instructions.

Here is a setup of howler and listener monkeys. Howlers and listeners can be used as a way of interacting with a machine when it is running. When a user push a button the howler monkeys screams out loud because his tail got pinched. Each button has a howler monkey associated with it and each of these monkeys make a unique sound when their tail gets pinched. In this example the monkey screams out Uuu! In the landscape there can be one or more listener monkeys listening for the sound Uuu. If they hear Uuu, they will immediately pick up a banana from their pile and pass it to the next monkey in the chain. In this example a trumpeter monkey who plays a note.


Unicorn Rainbow Machines (was Monkey Machines)

The underlying logic for the Monkey Machines app is pretty straight forward but I think it is wise to make room for re-evaluation and changes in the development process. Adding, removing functionality and simplifying chains where possible. A lot of works needs to go into the animations to make the unicorns really cute and functionality self-explanatory.

5% Done
  • Present the idea (this article)
  • Make functionality flowchart
  • Create functioning demo app
  • Evaluate and optimize app logic
  • Design default unicorn theme
  • Animate theme
  • Develop app
  • Setup app backend, machine sharing etc
  • Create library of Unicorn Machines
  • Merge logic and theme as final app
  • Release app


  • Make functionality flowchart $4 000
  • Create functional demo app $12 000
  • Evaluate and optimize app logic $6 000
  • Design default unicorn theme $12 000
  • Animate theme $24 000
  • Develop app $12 000
  • Setup app back-end, sharing library etc $8 000
  • Populate Unicorn Machines library $30 000
  • Merge logic and theme as final app $4 000
  • Release app $2 400
  • Total $114 400

When this idea formed in my head I saw everything as monkeys, water streams and bananas. It was not until I was almost done that I realized that I had started out wrong. It is not supposed to be Monkeys Machines, Monkey Basic etc. The initial branding should be unicorns, rainbows and candy. Very stereotypical, I know, but an easy way to introduce girls to the world of programming. Hopefully an early start can help even out the gender inequality in the developer community in the future. Of course the theme can still be monkeys if users prefer that. Changing the theme is just a matter of changing the sprites in the animations. The machines could be chains of dinosaurs, robots, Pokemon characters or whatever you like. The logic is the same. But as the father of two daughters I really want this to primarily be an app for girls. I would also like to see this app in as many languages as possible to get kids all over the world thinking in terms of programming. In a way, using animations to explain functionality is already language neutral. But is it enough? Maybe voice-overs are needed to really make it kids friendly. We will see.

Now read this article again and imagine that the monkeys on a lawn are instead super cute unicorns in a fluffy cloud environment.