top | item 4215118

Isla, a programming language for young children

117 points| wyclif | 13 years ago |isla.herokuapp.com | reply

50 comments

order
[+] maryrosecook|13 years ago|reply
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|13 years ago|reply
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.
[+] nemo1618|13 years ago|reply
Do you think that a professional programming language based off a spoken language would be feasible if it were based off of something like lojban? It would be pretty neat if the distinction between code and language could be blurred.
[+] lcrs|13 years ago|reply
from your third point above I immediately wanted to be able to write 'maybe' clauses, like 'if door is red then maybe door opens' :)
[+] ThomPete|13 years ago|reply
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|13 years ago|reply
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
[+] adrusi|13 years ago|reply
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.

[+] VMG|13 years ago|reply
I agree. Kids get taught math symbols "+", "-" and "=" pretty early and don't write equations as full sentences.

Using symbols is a vital skill and makes things easier to understand, not harder.

[+] drsim|13 years ago|reply
I agree. This language is too far abstracted from the standard paradigms, hell I even have trouble bending my brain to this structure. I've been programming for 12 years.

When I was eight we had a turtle in our classroom, driven by Logo on a BBC Micro. No child had trouble understanding Forward 30, Left 10 and seeing the physical turtle make those moves. Adding in recursion was pretty straightforward too, and you could see the results (right or wrong) straight away as the little guy makes his moves.

I'm not suggesting Logo is right, but kids shouldn't be underestimated. This language seems patronising. App Inventor is much more in the right direction http://www.appinventor.mit.edu/.

[+] beshrkayali|13 years ago|reply
I think not actually.

I think it's pretty helpful to get young kids to understand the logic first and then get introduced to programming operators and other weird characters.

It would be interesting to see if there's any research or papers on this.

[+] ThomPete|13 years ago|reply
I think you are thinking about this exactly the wrong way.

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

[+] joelhaasnoot|13 years ago|reply
This example might work if they implement a rich grammar, since a generation of people who are now in their 20-30s were used to text adventures. If you knew text adventures I think you'd understand the scope of this.

But yes, if you're new to programming you'll probably be quite frustrated by the limited grammar.

[+] netcan|13 years ago|reply
Isn't there an advantage to just being able to intuitively read it, even if there is no advantage when writing?
[+] loup-vaillant|13 years ago|reply
Current programming languages already use English words. I believe we already have experiences that demonstrate that it helps. If the syntax of the language also match English, my intuition tells me it will probably work.

Care to experiment?

[+] Scaevolus|13 years ago|reply
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|13 years ago|reply
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.

[+] ThomPete|13 years ago|reply
I agree that the turtle is good but again remember Paperts point is to allow children to assimilate knew knowledge into their already existing library of models.

The power of the computer is that it can simulate virtually everything and thus allow for children (or anyone else) to build their knowledge by using models they already have an intuitive understanding about.

[+] GuiA|13 years ago|reply
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|13 years ago|reply
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."

[+] antihero|13 years ago|reply
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|13 years ago|reply
Another problem with natural language languages is they can be very tricky to localize, because grammar can be highly variable across different languages.
[+] dchichkov|13 years ago|reply
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...]

[+] asto|13 years ago|reply
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.