
How computer programming languages for kids have evolved and where they're going - junelin
http://blog.makewonder.com/evolution-programming-for-kids/
======
methehack
I've always been suspicious of the looks-like-an-animal-with-a-name-and-a-
smiley-face-I'm-a-grown-up-and-this-is-what-kids-like approach. I remember one
of the coolest things about the apple II was that you could 'poke' the right
memory address and get the speaker to click. That was magic when I was 12 and
it didn't need a friendly name and a stupid grin. Until they're old enough for
K&R (12?, 13?, 14?), maybe they should do something else... or maybe anything
else...

~~~
jerluc
I was certainly in a similar boat (though a later generation of computers)
whereby I found around age 9 that "poking" at a computer (either plugging
random things in, or clicking random buttons or keys) enough yielded some
interesting/mildly entertaining results. Of course, many times, these results
ended with being grounded for breaking something, but nonetheless, the endless
possibilities of random keystrokes and mouse clicks seemed to exude some kind
of strange primitive allure.

Also, K&R for kids ages 12-14?!

~~~
snerbles
At 14 my first programming class was in C at a local community college. One of
the texts was K&R 2nd edition.

So, if unusual, it's not totally unprecedented.

------
kzhahou
Why is BASIC totally left out? An entire generation was inspired by power-on
basic in C64 and other platforms. More than just "inspired"... Some huge
amount of today's technology wouldn't exist otherwise.

    
    
      I know I'm stuck in the past, but that's what I want for my kids.  Flip open the laptop and boom, theres my programming environment, except now with easier graphics/sound APIs.  
    

Anyone know how to get this, without buying a c64 + CRT monitor?

~~~
chongli
It's really hard to do something like that with kids today. They have so many
options now between consoles, iPads, etc. There's way too much instant
gratification. You're never again going to see a generation that has the
patience to type in the source code to a game published in a magazine.

~~~
panic
People have been saying "you're never again going to see a generation that has
the patience to X" for generations, when really X is just no longer a thing
anyone wants to do.

When was the last time you typed in source code from a magazine? These days we
all expect software to be more complex than what you can fit on a printed
page. People have patience for the things they find exciting: nobody is
excited by dinky type-in games any more.

~~~
chongli
I still type in source code when I'm going through tutorials for new languages
or libraries. I find I absorb it better than I'd I copied and pasted.

------
unabst
Having animals and colorful bricks is okay, so long as we're not in conflict
with what is actually fun about what is being taught here...

Programming is fun because we can control the machine, and make it do
things... magically, at our whim, with the right combination of instructions.

So compared to that, having a cat walk towards a barn seems like a completely
irrelevant layer of entertainment forcefully tailored to the taste of the
students, who at best are distracted from the real fun, or at worst presumed
to be incapable of understanding why programming itself might be fun.

For all practical purposes HTML is a great place to start. Immediate output,
can share it online, and it's easy. And easy to expand upon with CSS and
Javascript and everything else. Also Processing is great for an art cs class.
Not to mention both web development and computer graphics being two highly
relevant skills in today's job market (thought that is thinking a bit ahead
considering the ages here, but better relevant than sorry).

~~~
kevhito
Have you programmed in scratch for any significant amount of time? I have, so
have my kids, and as a CS prof (at a small non-engineering college) I
encourage my students to do so too. Before age 10, almost entirely on their
own, my kids discovered ideas like abstraction (writing custom blocks),
recursion, data representation (e.g. encoding/decoding pairs, structs and
lists into arbitrary-precision integers), asynchronous vs. synchronous
functions, performance tuning, 3d perspective graphics, and race conditions.
At bedtime it's not unusual for them to ask about, say, what happens if you do
recursion without a base case, or wonder whether you could simulate the
scratch language within scratch itself.

All of these things are fundamental CS concepts, and they seem to grasp these
at a much deeper level than I did at that age, and better than most of my
college students. Yes, they also do some python, html/css, a little java, a
bit of javascript. And those all have their place, and they like making
websites. But the scratch infrastructure is fantastic. Good learning curve.
Just enough language power to do amazing things (threads, fork, async
notifications, custom blocks, cloud variables for multiplayer online). Instant
publishing. Great community. Fantastic programmers (hi Griffpatch!) putting
out incredibly clever programs to admire.

So all this is to say that it is unfair to dismiss scratch as "a cat walks
towards a barn".

~~~
unabst
I was trying to be careful not to do that, and you'll see that I didn't. So
long as we're not in conflict it's okay, and certainly Scratch is more than
cats and barns.

But my point remains that cats and barns could be interpreted as "fun because
they're kids" since no CS prof in their right mind would teach students that
way at, say, MIT. Maybe robots.

The problem isn't with teachers who teach the magic of computers with cats and
barns. It's with the teachers who confuse the fun with cats and barns and
underplay the real magic, which then leads the students to be confused and
unimpressed as well.

Whenever I saw educational games as a child I'd immediately sense the "adults
intent to entertain" through boring characters and ugly art. Now, that isn't
to discredit their effort, but when you're a kid obsessed with Super Mario
Brothers, it's tough competition. Needless to say, educational NES/Famicon
games did not fair well on the market. Everyone loved Mario.

~~~
kevhito
Yes, perhaps I was being a bit unfair.

However, bad teachers will always be with us, and won't start teaching the
magic of computers just because you give them a c64 or basic. They'll just
make kids write endless employee pay calculator programs and other drudgery.

I do agree with your general sentiment about the transparency of "intent to
entertain". But I really don't see it with scratch. There's a silly cat on the
front page, and comic-book logos. But 5 minutes after first being introduced
to that, kids are already looking at Griffpatch's latest multi-player cloud-
based platformer, or the cool 3d render program, or the interactive fractal,
or the simulated ice-cream shop factory, then 5 minutes later they are staring
at code trying to figure out how they did it so they can make their own.
Really. On the frontpage right now, the top-featured studio (i.e. a collective
hacking club) is called "Lindenmayer Systems!" [1], showing their latest
L-system fractal fern generator [2]. I really don't see a lot of "forcefully
tailored" entertainment here. Just a site filled with projects made by kids
and adults on a huge range of topics, from lipstick, fashion and silly
greeting cards, to mathematical and engineering.

Incidentally, I'm assuming you know scratch was designed at MIT, and many
aspects were deliberately designed to teach advanced concepts. And that it
has, in fact, been used in college classrooms (Harvard [2], others I believe).
Still, I contend that my kids with no formal CS education have a far better
concept of an abstract data type because of scratch sprites, and this has
carried over very naturally to other languages (Java objects, smalltalk
message passing, etc.).

[1]:
[https://scratch.mit.edu/studios/1677151/](https://scratch.mit.edu/studios/1677151/)
[2]:
[https://scratch.mit.edu/projects/1318150/#editor](https://scratch.mit.edu/projects/1318150/#editor)
[3]: [http://paradox1x.org/2011/11/introducing-programming-in-
coll...](http://paradox1x.org/2011/11/introducing-programming-in-college-with-
scratch/)

~~~
unabst
Yes, made at MIT for kids, not students. Building Scratch was the assignment,
and it was probably a lot of fun. I in no way wish to discredit the efforts of
those who use and maintain Scratch.

The only meaningful point I might add would be that kids love to compete with
adults. They want the real thing. Of course, most can't handle the real thing,
so we give them what we _think_ they can handle. Except, for the smart kids,
the bar is always too low because it has to be adjusted for the averages. So
they feel like they're being treated like kids, and that their intelligence is
being undermined, and they may even feel discriminated against. Basically,
they don't think of themselves as kids. We the adults think of them as kids.
Not that they aren't kids of course, but we should never limit their
intelligence based on what we think they can handle.

It's a shame modern video games are so complex and cinematic. To Scratch's
credit, here is mario:

[https://scratch.mit.edu/projects/31583772/#editor](https://scratch.mit.edu/projects/31583772/#editor)

and:

[https://scratch.mit.edu/projects/71455048/](https://scratch.mit.edu/projects/71455048/)

------
akkartik
It is a perpetual puzzle to me why learning programming isn't considered to
involve learning about functions. In my experience the hardest thing about
programming is teaching people the facility of "uncoiling" in their heads the
coiled representation of a loop or repeated calls of a function. That in turn
requires as a prerequisite the ability to consider a function being called
with multiple different inputs, and hold multiple possible situations as you
build the function. Until you attack this, the hard problem of teaching
programming, anything you come up with will only help learners with the first
few hours of their learning. Which is invaluable, don't get me wrong. But what
then? There's got to be something better than, "ok you're done with blocks and
turtles, now go learn JavaScript."

(I have a start of a solution to attack this problem:
[http://akkartik.name/post/mu](http://akkartik.name/post/mu))

~~~
thunderbong
Scratch has the concept of functions. They are also called blocks. Custom
blocks which kids can create. The blocks can take parameters and are
conceptually identical to functions.

I don't know about the other languages mentioned though.

I prepare curriculum for Grades 4 and 5 on Programming using Scratch and
Flowcharts and teach kids to create blocks whenever they see that
functionalities are getting repeated.

Kids tend to learn a little differently compared to adults. Adults tend to
want to know the 'big picture' before they begin and tend to have different
preconceptions based on what they've learnt earlier. Kids' learning is much
more playful, motivated more by inquisitiveness and curiosity. They don't have
the urge to prove anything to anyone, including themselves.

At those grades, their brains are very flexible and they can think of strange
combinations and the ultimate goal of having a program solve a problem is not
the aim. Even after many years, I find it hard to let go of trying to guide
kids towards a goal, rather than keeping my mind open to new things that they
are able to see just because they're not motivated the same way we as adults
are.

~~~
akkartik
That's true. Logo has functions too. But for all the innovation that has gone
into making the notion of an instruction easy to learn, functions everywhere
look the same. For example, why can't a function in Scratch change its shape
based on the number of arguments?

When I learned programming it took me years to stop "ping-ponging" between
bugs. I'd fix the most recently discovered bug, only to simultaneously break
the second-most recently discovered bug. My students show the same behavior.
That's a sure sign that just giving kids functions doesn't help them
_understand_.

Your observations about the differences in learning strategies were useful,
thanks.

------
Ultimatt
As someone who started programming at a young age where using three meta keys
on the ZX Spectrum was something my hands literally couldnt do... I say to all
the people suggesting give kids a raw language interface, think about how
accessible that interface really is. First you have to learn typing and unlike
the spectrum you need to remember and learn most keywords. You are eliminating
perfectly smart kids immediately. Because they have a massive barrier to the
reward of programming. I remember using a pencil in my mouth to get the third
meta on that keyboard. Fairly sure thats a health and safety nightmare. But
the frequently used commands were single finger. As my desire to program
increased the interface to my own goals got harder. I had the advantage
distribution of my software to friends was trivial too. Thats not true anymore
outside of JS in the browser. Raspberry Pi goes some way to aid that for
scratch.

------
ericssmith
I recently gave an intro to coding to young Girl Scouts using Pyret
([http://www.pyret.org](http://www.pyret.org)). The screencast is here:

[https://vimeo.com/163949506](https://vimeo.com/163949506)

I had to wing it because the ages turned out to be younger than I expected.
I've taught my 6yo son using Racket and Pyret so I had the basic approach
already. Although I shot over their heads in spots, overall the girls seemed
to be really engaged, as were their parents. For my money, Pyret is THE
language for an intro to programming, almost regardless of age.

~~~
eyan
I like Pyret a lot. The guys banging on Pyret and Racket are a great bunch as
well.

------
kriro
While this is not truly for kids since I was teaching university students I
always wanted to investigate if domain specific languages should be used more.

We did some unpublished experiments for an AI class on agent development where
groups developed a card playing agent in Prolog and a domain specific language
for that card game. The DSL agents were quite a bit more sophisticated.

My point being...I think usually we assume kids should be taught general
programming. It might be more fruitful to pick a cool domain and a language
suited for that domain. Unfortunately a lot of the programming
exercises/projects across all age groups are rather boring for lots of the
students from anecdotal evidence. I'm envisioning something like this:

Educator: Tell me something that's cool.

Kid 1: Pokemon!

Kid 2: Football!

Educator: Ok, tomorrow we'll learn how to program (Pokemon stuff here) and
(football stuff here). Educator goes home, configures the PokemonLanguage and
FootballLanguage and starts teaching that language with Pokemon/Football
specific examples. Does it scale...probably not but we're in the business of
doing things that done't scale, right?

~~~
jumasheff
This made me think of Micropython on a $1.79 ESP8266 board[0]

Educator: Tell me something that's cool.

Kid 1: Pokemon!

Kid 2: Football!

Educator goes home, gets ESP, modules, sticks them together, write examples.

Does it scale? It's doable: there should be common libs (pre-written snippets)
for moving chassis, limbs, RC over wifi, object detection[1], swarm
control/collaboration etc. Educator would fit hardware/software together and
rock the class.

[0][http://aliexpress.com/item/New-Upgraded-version-
ESP-01-ESP82...](http://aliexpress.com/item/New-Upgraded-version-
ESP-01-ESP8266-serial-WIFI-wireless-module-wireless-
transceiver/32633226881.html)

[1]Look at [http://openmv.io](http://openmv.io)

------
jdeisenberg
I'd like to point out the very underrated DrRacket ([https://docs.racket-
lang.org/getting-started/index.html](https://docs.racket-lang.org/getting-
started/index.html)), with some very nice material that works at the middle
school level
([http://www.bootstrapworld.org/](http://www.bootstrapworld.org/))

------
jerluc
Does anyone know of any published research on the efficacy of this "block
based programming" standard the author mentions? I can't seem to find anything
on the subject in the Scratch website's "Research" section
([https://scratch.mit.edu/info/research/](https://scratch.mit.edu/info/research/)),
and in their early papers they simply list it as a "core feature" rather than
explaining why they use blocks in the first place.

~~~
neovive
I've been a CodeDojo and Scratch mentor for a few years and, although I
haven't read much of the research, block-based programming fills a great niche
for kids that know how to read, but have a hard time typing. Typing and syntax
issues hinder the experience for very young children learning to code.

Scratch allows children to learn computational thinking concepts through a
creative computing experience. Keeping it simple and focusing on the creative
aspect of programming is a major emphasis of Mr. Resnick's team at the
Lifelong Kindergarten Group.

The kids that choose to continue with programming eventually reach a wall with
Scratch, where the block-based aspect breaks down. At which point they are
ready for syntax-based languages. However, it's amazing how complex some of
the featured projects are on the Scratch website with regards to both art and
logic.

~~~
jerluc
Ah that's a good point that both you and scottcha make regarding the typing
strengths/weaknesses of children, which would make a typing-based approach
maybe non-practical. I guess more generally what I was trying to better
understand was whether or not the use of these _fitted_ blocks (as I
understand Scratch to do) has been studied enough to be considered more
fruitful in developing an understanding of rudimentary programming rather than
a more free-form way of doing so (maybe just blocks that can be combined in
any way, even if they don't work as intended). Maybe said a slightly different
way: why did MIT researchers choose to use a "coloring in the lines" method
(which may hinder creativity and potentially interest)?

~~~
neovive
From my experience and interactions with the LLK group at MIT, they have been
very careful to position Scratch as a creative, story-telling tool, where the
connecting of blocks is just one form of expression. Making your creations
come to life through art and logic and sharing with the community is at the
core of the Scratch. You actually won't find the words "coding" or
"programming" on the homepage
([https://scratch.mit.edu/](https://scratch.mit.edu/)). I find that any
understanding of rudimentary programming tends to be side-effect of trying to
make things work :-)

Here are a few good links that might help.

[http://www.npr.org/sections/ed/2015/12/11/458782056/a-kids-c...](http://www.npr.org/sections/ed/2015/12/11/458782056/a-kids-
coding-expert-says-were-making-computer-class-way-too-boring)

Mitch Resnick's TED talk from 2012:
[https://www.ted.com/talks/mitch_resnick_let_s_teach_kids_to_...](https://www.ted.com/talks/mitch_resnick_let_s_teach_kids_to_code?language=en)

------
partycoder
I never liked anthropomorphic neotenized animals. Create a programming
language with transformers or thundercats not a cat on meds (j/k, that project
is cool, but you know what I mean!).

I learned to program with QBasic and I know many others learned to program
with the ZX Spectrum or similar machines.

If kids can learn the abstractions of the English language, be high dans in
Go, get accepted into college, and achieve incredible things, they can learn
programming too.

I highly recommend the book "Surely you're joking Mr. Feynman", especially the
chapter about how he fixed radios. This really reflects the magic of learning
as a kid.

~~~
jacalata
The question is whether you want learning programming at 14 to be as rare as
getting accepted into college at 14.

~~~
partycoder
What I think is that education systems will evolve eventually that will be a
reality for the ordinary person.

Text from educational materials can be optimized for readability, and
explanations/illustrations can be enhanced to be more interactive and
immersive (e.g: VR).

------
harryf
This ignores Minecraft and things like Scriptcraft (
[http://scriptcraftjs.org](http://scriptcraftjs.org) ) which I've found are
far more effective at home my kids attention than Scratch. Scratch is nice but
IMO the end result is too limited - kids sense their program is "stuck" inside
the window of the Scratch environment and is missing out on much of what the
computer is capable of.

~~~
greendestiny
Yeah I just introduced my kids to
[http://computercraftedu.com/](http://computercraftedu.com/) and its visual
minecraft programming language. They got the hang of it quickly because they
really want to create things in minecraft.

~~~
harryf
Nice - hadn't seen that before - thanks for the tip

------
noamyoungerm
Why aren't kids able to read text written in rows like everyone else?
Programming languages just for kids seems mostly like a way to limit them.

~~~
stephengillie
The first PC videogame I ever saw was a gorilla throwing a barrel at
buildings. It was written in BASIC and came with our 286 back in 1989. I was
really excited to learn how the monkey was drawn - out of the same ASCII
blocks as everything else, obviously, but _how_? - and excitedly opened the
file in a text editor.

It was a little overwhelming to my 7-year-old self to see just how many little
subroutines and subprocesses were needed make the whole program work. It was a
very complicated set of math processes, not unlike how a car engine is a very
complicated set of physical processes. (I'd been helping with car repairs for
a few years at this point, and rigged-up a pair of copper wires between the
cable box and TV once when we only had 1 coax cable.)

Several years later, I was overjoyed to find the TI-82 calculators we were
loaned in school could interpret the same BASIC commands, and happily started
writing tiny utilities, competing with classmates for the coolest function,
and joining debates about whether pre-programming the Quadratic Equation into
a calculator counts as cheating on tests.

Despite setbacks like a lack of programming education in rural WA State in the
early 1990s, that monkey throwing barrels planted the seed that made me want
to write and understand software.

~~~
snerbles
Gorillas for QBASIC:
[https://en.wikipedia.org/wiki/Gorillas_(video_game)](https://en.wikipedia.org/wiki/Gorillas_\(video_game\))

~~~
bigger_cheese
MSDOS 5 used to come with QBASIC. Nibbles and Gorillas were great games and
they included all the source code.

I used to play Gorilla's all the time when I was a kid. That was how I learnt
about angles. My Dad drew a picture for me "This is 90 degrees, This is 45
degrees" it used to sit beside the computer.

I learnt a lot about programming from the DOS environment come to think of it.
Our home PC used to have a text based menu program it would boot into. In
order to add a program to the menu you needed to edit it, using something like
a markup language. My Dad used to sit over my shoulder and talk me through
adding programs to the menu.

------
marianoguerra
Last weekend I built a project to do music with sonic pi[1] using google's
visual programming blocky[2], take a look if you are interested:
[https://github.com/marianoguerra/sonic-
blocks](https://github.com/marianoguerra/sonic-blocks)

[1] [http://sonic-pi.net/](http://sonic-pi.net/)

[2]
[https://developers.google.com/blockly/](https://developers.google.com/blockly/)

------
freekh
I wonder why people are in such a hurry to teach their children CS/things? {
rant: `One of my primary complaints from (engineering) school was that we/I
never had the time to absorb knowledge and become intuitive with anything (the
French engineering school I attended was particularly bad). We were spoon-fed
knowledge. In order to sink enough time into a topic and understand the
parallels with other things (at least in engineering science/craft) you need a
lot of time and focus. This should (must?) not come from discipline but from
curiosity. I would argue that (though I am a layman in this subject) adding
another exercise to a child's schedule with soccer, birthdays, school,
PlayStation, ... doesn't make them more curious. It makes them tired and
unfocused just like a grown up if they have too much to do. Give them time to
learn and grow instead! Give them the chance to experience mastery and to feel
confident, be it playing with rocks in the yard or programming. Let them be
bored. Give them time and focus. Do the things you like together so you can
share of your experience. If that's is programming then fine, but do it with
the tools you like or create so they can see how enthusiastic you are about
something. If you like these learning tools, then go for it, but don't force
it if you don't. If they are 18 years and still haven't learned to program:
relax, there's is plenty of time for that! I suppose this is controversial,
but in my experience the hackers that I know learnt coding really young aren't
necessarily better than those who learnt it later. Those who have a genuine
interest in coding are multiples of their peers.`}

------
mbubb
I looked around the Make WOnder site for a github repo or something to
download and try the language. Don't see it. How do we try this out?

I have co-taught a Scratch club 4 times for kids in the 10-12 yr old range.
And will teach a Python club in the coming Fall semester for kids in the 10-14
yr old range. I am nto a real teacher but am lucky to work with a CS professor
from a local college.

For the Python class I am thinking of a Raspberry Pi per kid, plus KVM. And
NoStarch text as class material.

So how do I evaluate Make Wonder?

~~~
glaberficken
Wonder seems to be entirely closed of within their apps. Only available on
mobile / tablets

[https://www.makewonder.com/start](https://www.makewonder.com/start)

------
jordigh
Scratch is a great idea, but it's a pity that the current implementation is
Flash-only. The HTML5 repo has not seen any work in 2 years:

[https://github.com/LLK/scratch-html5](https://github.com/LLK/scratch-html5)

Is it really impossible to have Scratch without Flash?

I want to play this Scratch game without Flash:

[https://scratch.mit.edu/projects/63476480/](https://scratch.mit.edu/projects/63476480/)

~~~
hardmath123
Try Phosphorus, an HTML5 Scratch interpreter:
[http://phosphorus.github.io/#63476480](http://phosphorus.github.io/#63476480)

Also, Snap _!_ is basically Scratch without Flash, but with everything awesome
from SICP: [http://snap.berkeley.edu/run/](http://snap.berkeley.edu/run/)

~~~
jordigh
Neat! But I guess it doesn't work for all games?

[http://phosphorus.github.io/#64974428](http://phosphorus.github.io/#64974428)

Snap looks cool, though! It can even import Scratch projects! Neat!

~~~
hardmath123
Yeah! Funny, I was the one who wrote the original Scratch->Snap! converter,
"Snapin8r". :-)

------
dpcan
I built an online IDE for creating HTML5 games in Javascript that is perfect
for the classroom. Then I taught a class using just Javascript and HTML5
Canvas to 11 year old kids in my son's class.

They were fully capable of using straight black-and-white code to get things
done. And they were thrilled to see their colorful results on the screen.
Learning how to clear the background with different colors got them pumped.
Drawing circles and moving them across the canvas was an actual thrill.

After only an hour, I lost control. They were off trying to make their
programs do great things without me. They were trying and failing, and then
succeeding, on their own. I was running around the classroom helping them
figure out little syntax issues so they could keep going, and everyone was
having a blast.

One kid would get his program to do something strange, and he'd call everyone
over, and everyone would ask "how'd you do that!?" and he would become the
teacher for a moment - and the kids would run off and keep trying new things.

There is just something magical about going from plain text to a working
program. Writing "DrawCircle 10,10,50" to draw a circle is pure awesome. When
you are learning - this makes you feel like a real hacker. You take this kind
of thing home and blow the socks off mom and dad too.

Side-note, before I created my little web-IDE for this class, I looked at a
bunch of these kid-style languages. I opted for straight code because I
remembered my own beginnings. I used QBasic for everything, but when it came
time to learn more advanced programming, I struggled for too long because of
it. I didn't want my kids growing up like I did, not knowing what to do
without GOTO. I didn't want them not knowing what to do if they couldn't drag
and drop an IF block into their IDE.

~~~
imakesnowflakes
I am of the opinion that kids should not be taught to program computers for
these reasons..

1\. Programming can be too much gratifying, almost drug like, and will keep
the vulnerable kids in front of the computer whole day long, building stuff.
This will help them blow the socks off mom and dad, but will make little real
difference in their future.

2\. learning to program early does not make really better programmers. But
there are skills vital to life and experiences that SHOULD be picked and gone
through, when they are still kids. This should not be sacrificed for learning
coding.

So I think kids should not start programming until they are past their teens..

Source: My experience as a kid who used to blow their parents socks off by
making games and 3d graphics in qbasic and turboc...

------
pklausler
Honestly, I don't think that cute interfaces matter all that much. An ASR-33
teletype dialed into a Control Data 6600 with a Fortran compiler was a pretty
damn cool thing to my ten-year-old self.

------
punnerud
[Follow up read] Why developers never use state machine:
[http://www.skorks.com/2011/09/why-developers-never-use-
state...](http://www.skorks.com/2011/09/why-developers-never-use-state-
machines/)

~~~
jops
State machines in games should be a lure enough for the kids:
[http://gameprogrammingpatterns.com/state.html](http://gameprogrammingpatterns.com/state.html)

------
Secretmapper
I fully agree with the sentiments here. For all intents and purposes, I think
that block style languages might not be the best way to introduce programming
- I'll have to say that Bret Victor's Learnable Programming makes much more
sense
([http://worrydream.com/LearnableProgramming/](http://worrydream.com/LearnableProgramming/))

However, there is no (to my knowledge) better way to introduce programming in
an easy 'non-keyboard' way than blocks. I ask this because I'm currently
brainstorming ideas for tux4kids (an open source educational suite for kids -
yes tux as in the linux mascot), and we've come to the conclusion of using
block structures (since the game has to be playable for mobile too).
Unfortunately, we've come no better than 'move here, use functions' a la
Lightbot (lightbot.com)

It's quite timely that this has been posted here, since we're still
brainstorming concepts and I wanted to take this opportunity to ask - what
would you suggest for a 'programming game' for kids?

------
rastapasta42
Shameless plug: I'm working on a small graphics environment to teach my
7-year-old brother programming. It doesn't have any advanced graphical GUI,
instead it has a Scheme/Lisp REPL connected to OpenGL window and it lets you
draw various shapes (such as triangle and squares) as well as load shapes from
.obj files exported by blender. Once you load a shape, you can assign it a
color or texture from PNG file, then move, scale and rotate the shape, and get
basic keyboard and mouse inputs

[https://github.com/kostyakow/skomakare](https://github.com/kostyakow/skomakare)

Note that error handling in my language isn't great, and I don't have proper
tail-call optimizations, but I'm working on v2 which will add more real-world
features to the language.

------
rcarmo
Only the other day I started keeping track of stuff for kids here:

[http://taoofmac.com/space/dev/Kids](http://taoofmac.com/space/dev/Kids)

(my kids are moving on from Scratch, and we eventually settled on Python, but
I'm keeping tabs on other options)

------
srdeveng
My introduction to markup was the Geocities era HTML. I was in 3rd grade or so
at the time.

Got access to my dad's Casio digital camera and took pictures of my friends
and teachers and then swapped heads and bodies using Kidpix.

In computer lab, I'd set the start page on the few computers with internet to
my Geocities page. It was a huge hit and the computer teacher didn't know
whether to applaud or punish me for the work.

I got cut off from the 'internet computers' indefinately and played Organ
trail everyday instead of doing the typing assignments since I was already
proficient.

I think a large part of my comfort with code came from getting rid of the
'curly brace phobia'. I've attributed my comfort reading code regardless of
language at an early age to this exposure to HTML markup.

------
VPrime
Our app hyperPad ([https://www.hyperpad.com](https://www.hyperpad.com)) is
being widely used to teach kids programming. It was never intended for that,
but it's really interesting to see schools around the world using it to teach
kids to code.

We actually built it as an easy way to make games, but hey, if people are
using it to learn, we won't complain ;).

Since our app is primarily a tool to make games and other interactive apps, we
take a different approach to our behaviour system. The hyperPad behaviour
system is our take on a node based event driven programming language that lets
users focus on the design and the fun parts. But still give them the power
they need :).

------
igravious
> Research shows that children as young as 5 can grasp computational thinking
> concepts, so why not go there?

"computational thinking concepts"

What are they? I ask this in all seriousness.

Why are there no links to the talked about studies in the article? Or are they
there and I missed them?

~~~
junelin
Tufts is doing some great research in this area. They've seen kids as young as
5 learn these concepts by manipulating tangible blocks -
[https://ase.tufts.edu/DevTech/publications/computersandeduca...](https://ase.tufts.edu/DevTech/publications/computersandeducation.pdf)

------
ravenstine
Anyone else remember Widget Workshop?
[https://en.wikipedia.org/wiki/Widget_Workshop](https://en.wikipedia.org/wiki/Widget_Workshop)

I loved this game as a kid and, while it's not really a programming language
of sorts, it's great for getting you to think in a programmer's mindset. Logo
bored the crap out of me, but I could make neat things with it. I feel like it
was completely forgotten but something like it could have a real educational
use today.

------
theoapps
I think a good intro to programming is video games, especially ones that let
you build custom maps (for me it was Age of Empires and Starcraft). All the
units and such can be seen as a huge metaphor for object-oriented programming.
With some games you can also add in custom scripts. Of course this doesn't
teach practical skill, but at least can get them thinking of the concepts
while engaging them with something more exciting than hello world or a
calculator.

------
burfog
Scratch is pretty much a traditional text-based language, but with a
structure-aware drag-and-drop editor.

Maybe you can't quite literally build a compiler for the bare text...? It's at
least mighty close to being doable. That would make a great transition.

You could also make a similar drag-and-drop structured-text editor for a
fairly large subset of C.

------
csense
The most interesting part of this article is the bunch of home-brewed "learn
programming" environments listed in these comments.

