Isla: a programming language for young children
github.com
github.com
Just FYI, the Clojure version of the language is deprecated. For the last year, I have just been working on the JavaScript version:
https://github.com/maryrosecook/isla
My latest work has been on a programming environment and programming demos:
Why are numbers quoted? It seems that many of the quotes could be optional (except when needed for parser disambiguation). From your examples:
age is 1
name is Mary
friend is isla
You could also use '.' as an optional command delimiter (in addition to newline) for more prose like, such as: age is 1. name is Mary. friend is isla.Quotes are required around number literals to maintain consistency with string literals.
My unanswered questions:
() What are the pedagogical principles upon which Isla is founded?
() How is the language tied to models of developmental psychology and to what models?
() For what age is the language appropriate?
() What does it do better than other similarly targeted languages, e.g. LOGO or Alice?
Isla looks as if it could be a game changer. I want to know more.
1. No principles at all. I know little about education. Since the time I started Isla, and since the time I joined Hacker School as a facilitator, I have been learning as much as I can.
2. It is not tied to any models.
3. I am aiming the language at children who are just learning to read and write. So, children between 5 and 8.
4. I don't know enough, yet, to know if Isla is better than LOGO or Alice.
The effect of that could be interesting to study. Would it cause difficulties for learning "real" grammar, or would exposure to a non-natural language help linguistic development (and to a lesser extent social and intellectual development more generally) as some studies have shown growing up around several natural languages does?
Follow up question: Have you stuck it in front of kids to see how they take to it?
Without being based in theory, I'm curious how the language works out in practice.
There are some definite mistakes in the language.
It uses named nouns, yet in real world, we usually refer to things with adjectives and types. We say "pass me the red apple", not "that apple is called Jimmy, now pass me Jimmy".
People get confused about the difference between strings and variables.
To define a function, you make a list and add built in functions to it. This is awkward.
That's an interesting insight. The "pass me the red apple" version seems a bit like a declarative query language.
[1] http://en.wikipedia.org/wiki/Indexicality
[2] https://en.wikipedia.org/wiki/Demonstrative_adjective
In a way (when you think about it) "pass me the red apple" is too succinct. Maybe, "there is a red apple", "pass me it" would be expressible is Isla.
And honest to God. I swear I had an Isla-like mini-epiphany about 6 years ago where I wondered if a homoiconic computer language could be fashioned using white space instead of the () of the Lisps and use regular words instead mathematical symbols. It's interesting that you don't have numbers yet. Numbers (written arabic numerals) are very special words. Also it'd be nice considering Isla is using natural language that it speaks the kid's language - so at the start of a block the kid says, "hablo español" or "i speak english" and then all the do-ing words are in the correct language. And Isla needs to grök áccènts on variables for most European languages bar English, seems like it doesn't? (Sorry for nitpicks! Maybe I can help with the coding.)
I applaud your creativity.
Great work, will see what my four year old thinks.
1. The distinction between words that occur directly and words that are quoted seems tricky for a 5yo. - is it really necessary?
2. I played about with Scratch with my eldest daughter when she was four and had next to no reading skills. Having the program be made of blocks with differing shapes and sizes made it possible for her to distinguish between commands without recognising the words. It occurs to me that it might work well for Isla code to have such a visual block structure - there would be a number of ways to realise this.
My daughters are 6 and 9 now: I'll get them to take a look in the next couple of days.
It looks like Isla might slot in to the front end of the spectrum before BSL (Beginning Student Language).
Their middle school resources are here: http://racket-lang.org/learning.html
The technical reports linked from the page might also provide some background in the design of teaching languages.
When I was in middle school, I first learned to program using BASIC. While BASIC was designed to be easier to use, it was still a full language designed for people to be productive in.
There are a whole host of languages that can be taught to (or independently learned by) children that have a clean, simple syntax. Why do we need to create another one with all the drawbacks a small, obscure language brings to the table when Ruby, Python, Scheme, etc exist and are just as easy to get started in, but much more powerful when you dig into them?
This is clearly, in my mind, better than the languages out there and I've only seen 3 lines.
There's a huge number of us that are evidence that non-custom languages that were massive pains to program are easy enough for children to get started with.
Does Ruby, Python and Scheme have dark corners that are harder to understand than BASIC? Sure. Just like my C64 had all kinds of secrets I couldn't figure out by myself by POKE'ing randomly around at that age.
But I'd hazard a guess that most children will be mature enough at some point between 5 and 10 to be able to pick up the basics of pretty much any reasonably "normal" language if they have the motivation to try (for me it was seeing my dad program a simple game and wanting to be able to do the same thing). I'd hate to dumb it down unnecessarily.
Out of interest, what are the dark corners of Scheme? I've been using Racket for a while now and I've not come across any unexpected behaviour.
I suppose using non-idiomatic language elements such as mutations is a little odd but so far I've found nothing in the language which has surprised me.
How to Write Seemingly Unhygienic and Referentially Opaque Macros with Syntax-rules http://okmij.org/ftp/Scheme/macros.html#dirty-macros
The point is, a kid can pick up on that stuff if they want to learn it and BASIC is defiantly simple enough to "start with" and I would guess so is Python and Ruby which don't have too much semantic complexity.
The rule of thumb when it comes to "designed for children" goes something like this - if it does not offer progression toward the "adult" version then it is a toy.
My problem with this is I'm not sure kids would find it fun. Something like HacketyHack that has integrated music and graphics feels like the kind of thing that would make the programs kids want to make. I'd also try Processing.
This, I think if I was helping I child get into programming I would get them started with QB64 [1], [2]. Then once they mastered that move on to HTML/CSS/JS and C or Go.
Personally I started with GWBASIC (at age 7 or 8), then moved to QBASIC, then learned VB, and then C/C++. Then in college I learned Java and via work learned C#. Nowdays I program full time in Go. (I of course have learned many other languages and platforms along the way , but those were always what I wrote in when left to my own devices).
1: https://en.wikipedia.org/wiki/QB64 2: http://www.qb64.net/
I eventually abandoned it because even as a kid, for me it was faster to type stuff in than to mess around with a program like this; and typing gave me access to the whole language rather than just what I had implemented in the menus so far.
The way we talk to each other involves a lot of abstraction and context. It is very hard to speak __simply__ to a computer, unlike normal conversation.
My aim with Isla was to make a language that avoids as much programming jargon as possible, and assumes no prior familiarity with programming. This is why I made it natural-language-like and omitted punctuation from the syntax as far as possible.
After a few years it's easy to continue with basic-like languages.
Each "instruction" was represented on a computer as a "LEGO block". For example, there was a conditional block. You'd place it under a block that would return an output (like a "sense" command), and then you'd place two blocks below it for the True/False conditions. So basically you ended up building a tree of the logical structure of the program.
I think this style is the BEST way for children to learn programming. In fact, I think a block-like/tree-like structure is often a great way to think about program structure (even for advanced programs; Simulink is really great!).
Now, once you get comfortable with the constructs, actually dragging-and-dropping blocks often gets too slow. But for children, and for building simple programs, I think it's great.
I'm afraid that text-based languages are just unnecessarily difficult for children - only a small fraction of what you can type actually represents a valid program. The blocks allow programming without having to deal with these syntactic barriers. After all, when I program in a language like Haskell, 90% of my programming errors cause the program to fail to compile. These sorts of errors (syntax errors or type errors) can be prevented as the program is built with the block interface.
And while I'm extolling Mindstorms, another great thing about creating these programs was that you weren't just flipping bits on a computer; it was pretty satisfying to see a robot "in the real word" follow your commands.
It's like asking some one to learn how to do the rainbow kick move over the head with a soccer ball when they don't play soccer at all compared to when they do if that is an okay analogy.
I don't know pedagogy, but I like that objects have names and properties, which is concrete and comes from the physical world (and our language). However, I find some things about the language, environment, and also tutorials rather confusing.
In the shapes tutorial, for example, we name an object that doesn't exist yet. We also name the object "cherry", which is also a word for an object in English. We write [melon color is 'yellow'] when the object named "melon" is actually red. I also wonder why there is no visual indication of which object is which (why not label the objects with their name?).
More fundamentally, in Isla each text block is a command. Why are there no actions words (at least in these initial commands)? Just like objects, names, and properties are first class syntactic citizens, so should actions. I think this would clear up some of the weirdness above.
# make circle named bob
# set bob color RED
# print bob color
... RED
# print bob
... circle
# move bob RIGHT
# make square named alice
# trash bob
# copy alice named chris
# make circle named alice
... oops, alice already exists!
# print dan
... oops, dan doesn't exist! 1. If languages were syntactically easier to read, then we wouldn't need one that's made just for young children.
2. This confirms my suspicion that "=" and "==" are damn harmful stupid syntax for assignment and equality.I'm writing a language that uses = for assignment and == for equality comparison. However, expressions and statement are syntactically separate, so that using the wrong symbol is always a syntax error.
Even without distinction, making it a compiler warning is very easy.
:= certainly makes things syntacticly clearer but really after a point = and == are so common and so natural, is it a problem that even needs to be solved?
Google computer science education or check out SIGCSE
A few more ideas that I never got around to, feel free to take or leave them:
* A simple tool to draw characters. My kids liked Google drawings more than Paint. They didn't mind (at first) that the drawings weren't animated.
* Sharing stories with family and friends
* Drawing backgrounds, moving between scenes, animation editor.
* They liked the idea of writing a story, but very quickly wanted to build a game. An animation editor could introduce looping. Collisions could introduce conditional actions, etc.
Good luck. It's a lot of fun.
2. I was looking for a "natural syntax programming language" on Google and this is what showed up as the first result http://bglang.org/
3. If I might add something, I think what something like this would need is flexibility i.e. a more "freestyle" way of writing expressions. It would not only be much easier to use by children, it would also be a nice technical challenge for the language designer.
Some examples:
* sum of all numbers from 1 to 10
* x is 3; y is 15; print their greatest common divisor
* if folder has file 'file.txt' then put x in file
* print 5th fibonacci number
* c is circle, diameter 10; C is square, side 9; print maximum area c, C
* show bigger number 2/3, 1/2
I want the advantages of a natural language-like syntax (easy to read, not scary) without the disadvantages (the impression that the computer will understand whatever you type). To do this, I intentionally made the syntax only support one grammatical form of each type of statement.
I ask because I'm sure my otherwise-literate 8-year-old would have trouble spelling the name without some coaching…
(edit: typo)
Thanks :)
If I was a kid and I saw this:
#hi
Expected [ \t\r] or [a-zA-Z0-9_]
but "\n" found.
I'd think that I broke something.In each case, children are simply being presented with a limited subset of the entire subject, to accomodate the real physical differences between children and adults (less complex mental models, less fine motor skills, etc).
We can argue about which specific subset we should start with, but the fact that it's a subset is not inherently wrong.