

Isla, a programming language for young children - wyclif
http://isla.herokuapp.com/

======
maryrosecook
Hi everyone. I'm Mary and I am making Isla. It's exciting to see the language
posted to HN, and great to see so much discussion.

I agree with the people who say that a programming language that apes natural
language can be frustrating. Inevitably, it cannot support even a fraction of
the constructions that a human brain can parse. What made me try a natural
language approach is the following (contentious) ideas:

* Children find it hard to type punctuation. Natural language can be parsed without punctuation.

* Someone new to programming probably knows nothing of conditionals, loops, logical operators and functions. So, a language that codifies these concepts as jargon in the form of keywords is going to be alien.

* If you ruthlessly constrain the features of a natural language-like programming language, it's possible that you can keep the advantage of human readability and dodge the disadvantage of the "uncanny valley", as `antihero` succinctly put it. In Isla, the only expressions are instantiations, assignments (with support for objects), `if this then that` style rules (maybe), and invocation of built in functions.

* The joy of programming is in building something. To get children interested in programming, the language they use needs an application. Children love telling stories, so why not make the application a story-telling environment? This gels nicely with the sparse feature set of the language: writing a story is mostly a matter of data definition.

This is the first programming language I have ever made. All these ideas are
theories. Isla is just my first shot in the dark.

~~~
mattvanhorn
I thought the example was intriguing, but it would be nice to have some
minimal installation instructions for someone with no Clojure experience.
Often the initial investment in getting something to function the first time
is the biggest obstacle to using it. I'd like to play around with this
language with my son (age 11), but I've got a ton of other things on my plate
and he's got a ton of distractions (Roblox, WoW, etc.), so having to go off
and look up a Clojure reference moves this pretty far down the queue for me,
unfortunately. But, it's bookmarked for revisiting later.

~~~
Zak
I stuck an executable jar on my server just for you:
<http://classifyr.com/~zak/isla.jar> \- run this with

    
    
        java -jar isla.jar
    

then follow the instructions starting from the part about connecting with a
web browser. On some operating systems and configurations, you can just
double-click it and open your browser.

------
ThomPete
This is IMHO the correct way to do these things. Seymore Papert wrote a
brilliant book on the subject.

Here is the forword to his book:

<http://www.papert.org/articles/GearsOfMyChildhood.html>

From the link:

* One day I was surprised to discover that some adults--even most adults--did not understand or even care about the magic of the gears. I no longer think much about gears, but I have never turned away from the questions that started with that discovery: How could what was so simple for me be incomprehensible to other people? My proud father suggested "being clever" as an explanation. But I was painfully aware that some people who could not understand the differential could easily do things I found much more difficult. Slowly I began to formulate what I still consider the fundamental fact about learning: Anything is easy if you can assimilate it to your collection of models. If you can't, anything can be painfully difficult. Here too I was developing a way of thinking that would be resonant with Piaget's. The understanding of learning must be genetic. It must refer to the genesis of knowledge. What an individual can learn, and how he learns it, depends on what models he has available. This raises, recursively, the question of how he learned these models. Thus the "laws of learning" must be about how intellectual structures grow out of one another and about how, in the process, they acquire both logical and emotional form.*

This kind of programming environment despite the stars in here scolding it is
exactly how to teach IMHO.

What this allow children to do is to tinker with words and through an
input/output model allow them to learn about variables.

There is no right or wrong output here (perhaps besides gramatically) there is
only input/output.

The basic of computer-science is it not?

~~~
bryansum
Excellent reference. Papert created his own theory called _constructionism_
based on the tenants of learning by doing and accumulated knowledge
acquisition (genetic epistemology). He emphasized making learning tools
meaningful and relevant to children, so that they could use their prior
experiences to help model new concepts. With LOGO, children used imperatives
to command a turtle around on screen. When things went wrong, children could
"act like a turtle" to debug, often by physically acting out the commands
themselves. He called it body _syntonic_ learning, as opposed to the more
traditional _disassociated_ learning we typically see. Shameless plug: I
recently wrote more about this in a review of the book "Mindstorms" that this
was an excerpt from: <http://bsumm.net/2012/07/01/mindstorms.html>

~~~
mark_integerdsv
Dammit! Can you people please stop adding to my reading list! ...sorry, two
very good reads in the lat two posts.

I am currently teaching a Saturday morning LOGO class at my daughters school.
Who'd a thunk kids (and parents) would forsake Saturday morning in the mall to
futz with a little turtle on a screen... But they love it and for once the
kids are learning a non-consumptive use of computer technology.

------
adrusi
I don't like these natural language programming languages

you see that it makes grammatical sense and then the brain infers that it can
understand anything that makes gramatical sense. In the end, it's just as hard
to remember what subset of the english language it can understand as it is to
learn a new grammar.

~~~
ThomPete
I think you are thinking about this exactly the wrong way.

You don't start with the abstract. You start with the concrete.

~~~
Zak
I disagree. That approach might work for teaching CS to college students, but
most young children would find it _boring_. A much larger percentage would
find the idea of making an interactive story _fun_ than would enjoy learning
about the low-level mechanics of a computer.

~~~
ThomPete
Why do you think they would find it boring?

~~~
Zak
In part, because I did.

I started with BASIC, but didn't really get in to it before being introduced
to Hypercard. With _that_ , I could make cool stuff almost immediately. A year
or so later, I was told that real programming meant programming in C, so I
tried that. It made me lose interest in programming for quite some time, as I
couldn't imagine making any of the things I wanted to make with it.

It's more or less the same issue that affects technically cool products that
don't actually address the needs of consumers.

~~~
ThomPete
You are asuming that everyone is like you? Bad premise to begin with.

There are a lot of children to whom programming isn't even in their
vocabulary, but storytelling is.

~~~
Zak
I also remember other kids learning to program as pre-teens or early teens.
Most of them wanted to learn to program so they could _make things_ , not for
its own sake. Most things that were interesting to them would be burdensome to
write in C.

------
Scaevolus
Logo has been successfully taught to 4 year olds.

It has very simple syntax (lisp without parentheses), and the imperative style
is easy to reason about. Direct control of the turtle has a lot of appeal--
probably more than making a text adventure.

[How to train your robot](<http://drtechniko.com/2012/04/09/how-to-train-your-
robot/>) is a programming game that follows similar ideas.

~~~
objclxt
I can't believe we're 30 comments in and nobody has mentioned Scratch yet!
(<http://scratch.mit.edu/> or
<http://en.wikipedia.org/wiki/Scratch_(programming_language)>)

If you're not familiar with it, Scratch was developed by the Media Lab and
heavily influenced by Logo. It's used in thousands (tens of thousands?) of
elementary schools to teach programming concepts. It's a really great
language, and is _incredibly_ visual.

One of the great things about Scratch is that whilst it's certainly heavily
slanted towards children it's not exclusively for them. Actually, Scratch is
used at Harvard for the first week of their Intro CS course. If you're
interested in programming languages for children and those new to CS then
Scratch is well worth a look.

~~~
creamyhorror
Yep. I introduced my little brother to Scratch and he quite enjoyed playing
with it for a week or two, making a little game or three in the process with a
bit of help from me. It's a great experience.

I think it might be slightly confusing for younger people, because it's almost
'real' programming, especially once you try implementing things like side-
scrolling animation. But it's certainly powerful, and the way the code is
created by dragging and snapping parts together is neat.

Give it a try with your young cousins, and give them an early taste of
programming! When they're modding their games in the future they'll thank you
for it.

------
GuiA
I'm not necessarily drawing a direct parallel here, but this example of
teaching programming through the concrete example of telling a story reminded
me of this paper[1], in which the authors show that teaching math through
abstract concepts leads to better understanding of material than teaching
through several concrete examples in undergraduate students.

[1]: Kaminski et al., "The Advantage of Abstract Examples in Learning Math",
2008 — <http://www.physics.emory.edu/~weeks/journal/454.pdf>

~~~
delinka
Anecdote warning:

I'm not going to _get_ the abstract unless you start with a concrete example
and then head for abstract territory. "Learning abstraction" is memorization.
Until you can tie it in to something real, the concepts aren't.
Coincidentally, I suspect this is the difference between "computer scientists"
and "programmers."

~~~
SudarshanP
hackers learn by tinkering :). I'd personally learn as little as possible in a
way suggested by the paper. I'll do it even if it takes 3x longer, because for
me it is more fun to learn by tinkering. I'll learn the deep stuff after I get
my feet wet. The real question is what fraction of the class has the patience
to soak in the abstraction for years together so that they can apply it once
they have have become experts.

I've also encountered people who prefer abstraction over concreteness and it
works for them. So the best is for each student to learn according to his
preferred style. I hope courses like udacity and coursera slowly evolve into
something where each student learns by his/her preferred method.

~~~
ThomPete
This allows you to tinker.

------
swannodette
People keep bringing up Inform 7, I think this is closer to the mark:

[http://comments.gmane.org/gmane.comp.lang.smalltalk.fonc/317...](http://comments.gmane.org/gmane.comp.lang.smalltalk.fonc/3171)

<http://www.michaelslevinson.com/satevepost.html>

------
antihero
Honestly I think the more you make stuff "for" kids, the more complexity they
have to deal with in addition to learning the programming concepts. With
natural language languages, there's an uncanny valley where some of the
dialect they are already working, and some doesn't, and it becomes a guessing
game.

~~~
objclxt
Another problem with natural language languages is they can be very tricky to
localize, because grammar can be highly variable across different languages.

~~~
antihero
Exactly, Haskell for instance, would be fantastic as it just relies on symbols
that can be commonly read by everyone, we don't have to grok the meaning of
"function" and "and". The only time you'd need to learn English to program
Haskell is using the functions from the STL or Prelude.

------
pja
Reminds me of Inform 7: <http://inform7.com/>

------
dchichkov
Just get them indestructible python-controlled helicopter (ages 7+) or slower
moving car (ages 5+). Once they've get the connection between car movements
and writing statements in iPython it'd be a lot of fun for them. And time to
find some cover.

Don't worry about trying to simplify modern general purpose language. Modern
languages are already as simple as they could get. [And whatever you do, don't
make them write machine code in binary. Although it is a lot of fun for a kid,
that could seriously screw them up. Don't ask me how I know...]

------
leke
I always thought REBOL was quite a word like language that kids might 'get'.
Check out... <http://www.rebol.com/docs/reference.html>

You can even use 'add' instead of '+' if it helps.
<http://www.rebol.com/r3/docs/functions/z-plu.html>

It also has a neat gui dialect, although a little retro looking.

------
asto
I don't understand the purpose of this. Stories are best read, written and
told. Using a computer to do it would be rather restricting. I wonder if kids
would get the point either.

The best way to interest kids seems to be to show them ways to do things
better. Like draw perfect circles and rectangles with very little effort using
a program like logo. Or show them how to write python programs to solve their
math homework at top speed.

------
abecedarius
Reminds me of <http://www.cc.gatech.edu/~asb/thesis/> although it's not really
clear to me where they're trying to go with this.

