Teaching kids to program in their native language
google-opensource.blogspot.comAs someone who's not an English native speaker I feel localized programming languages are sort of missing the point. The syntax of a language usually isn't really the main roadblock in learning a language and while it might help that you have some documentation in your native language, you're essentially cut off from the rest of the world's documentation on the topic. And considering that you should have a workable grasp of the English language by middle school I wouldn't say that it's much of a roadblock when learning to program.
I agree, I never had issues with the fact that Pascal or C where "in english", I never cared about the translation of "repeat-until" in my own language.
Actually, I have to say that viceversa when I started learning English more seriously, the opposite happened. I realized the connection and, for instance, was able to put "until" in the correct sentences because it had a precise meaning coming from the programming languages.
As an original non-native English speaker, I respectfully disagree.
People say my name is spelled funny or is too long...but it's not my problem, it's English's problem. Its only 6 characters in my native tongue.
In the same vein, what other ideas or concepts from non-natives are we missing because we are forcing them to learn a new language AND then to program? Furthermore, when we in the West talk about open-source, diversity and equity, we're still speaking in English. We're leaving a huge population out because the barrier to entry is learning English. If non-native speakers are now able to solve their own local problems in their local language, this is a boon for humanity and why we should encourage efforts to break down barriers like this.
I for one, welcome this endeavour and thank elangoc for his work on this.
I learned programming before I knew anything about English and I don't remember it being a problem. Even before that I was using commands like "LOAD" without knowing what do they mean. It was just a keyword to use when I needed to load something from a cassette. The same with "IF", "PRINT" and all the other English keywords I encountered while learning programming. I was learning using local books, but the fact that programming language used English keywords did not bother me at all.
We force people to learn a new language to program, but it's certainly not English.
It's a stretch to even call some of the keywords in some languages words (car, cdr, con?). They're just tokens to feed to the compiler or interpreter, like parenthesis.
Even when full English words are used, it's rarely in the conventional meaning. English speaker or not, you'll have to learn what the word actually means in the given programming language.
> If non-native speakers are now able to solve their own local problems in their local language
But they won't be able to. Having a few keywords in your own language is vastly different from 'being able to solve problems in your local language'. It sounds like you don't understand programming.
I was referring to the fact that you don't have to learn English to code. A barrier that you don't seem to acknowledge.
For languages that roughly share the same alphabet as English, it seems more like learning a few new words, rather than actually learning English.
If you take a look at the actual project you'll see that translating the language features to another language (and alphabet!) is cool, but not actually enough once you want to start interacting with libraries.
Which essentially means that without learning english, you will be stuck in a technical ghetto with the only way out being to learn english, or reimplement the world.
I still think this is highly interesting as a teaching tool; showing kids what is possible without requiring them to learn english may be a good motivator to actually learning english, but this doesn't seem to have many applications beyond as an introductory teaching tool.
Are there any (programming) languages who's important libraries have solid documentation/tutorial coverage in non-english languages? Honest question. Those are a big part of programming for me.
Yep. Ruby springs to mind. The creator, Yukihiro Matsumoto ("Matz"), is Japanese. He co-wrote the first Ruby book, which was in Japanese. And a year later, he co-wrote the first book for Ruby that was in English.
Yeah, just a few: http://www.amazon.co.jp/s/ref=nb_sb_noss_2?__mk_ja_JP=%E3%82...
Can you explain that more? I see plenty of programming books in foreign languages.
I still think localized programming languages are a good first introduction for students with low English proficiency. The less initial barriers there are for the student, the easier it is to gain interest. Moreover, it takes students a while to realize that a programming language is distinct from natural language so they are generally more comfortable "programming in a natural language" they are fluent in. It should be easier to move to a programming language with syntax in English once basic concepts are picked up. I've had good experiences using Chinese Python with students.
Isn't that done verbally in math class? Never mind the cryptic symbols.
when you say "not an English native speaker", is your native language also having a non-Latin script?
Most (not all) european languages (e.g., French, German, English, Spanish) have same or almost similar script, making it easy to pickup words and phrases of an another language with the same script.
Agreed that you are cutoff from the rest of the world's documentation on the topic, I do see your point there. But, without this bridge, people who dont know how to read/write/understand latin/english script, they are cutoff from the world not just on the topic, but everything else.
Here's why that is important to know: By some estimates, about 10% of Indian population can speak english. Even if you were to consider 20% can read the english alphabet, thats still nearly a billion people who will have difficulty in getting started with programming, because all they know is a Tamil, Kannada or Telugu script (all quite different from each other and from English).
having a localized programming language can enable lot more diversity in the field of computer programming (especially in countries like India).
Many musical terms, e.g. “a capella”, “tempo” and others are Italian. I am curious about the potential impact on increasing diversity among musicians, especially when we consider the number of people globally who do not have access to a (good) Italian education that is an implicit prerequisite for learning to play a musical instrument.
Weak analogy. Text and language aren't as intrinsic to playing music and reading/writing sheet music as they are to reading/writing source code.
i agree that it's not the strongest analogy, but it seems relevant. you seem to be uncessarily bounding this on "text", which seems an incidental detail at best.
I would expect kids to have the least amount of trouble with foreign words.
And anyway, learning English is in demand world-wide.
If some parents already want their kids to learn English, you're hardly going to sell them on the idea that, oh, your kids now have a way to learn programming without English words.
I've had people ask me, "Why don't we get everyone to speak just one language? That would make everything easier."
That ignores a lot about the cultural meanings embedded in language and the human tendency to use language to encode identity.
And on a very practical point, not everyone has access to learning English. Wealth & wealth distribution matter. How close your native language is to English also matters (is it Germanic? Indo-European? does it use a Roman script? is it alphabetic?...)
I think this project is great, and it seems like a great teaching tool.
But maintaining your own separate language, computer or otherwise, imposes a cost, it's not clear why the cost of that choice should be shouldered by the rest of the world.
In general, I think having separate languages divides the world and they are a net negative, despite their role in local culture we shouldn't be trying to keep them all around.
The choice of English as the current lingua franca of the world isn't really fair (nor certain), but there is no choice that is fair to everyone, and English seems to have significant adoption already.
It is interesting how the same companies that complain how nation states are forcing Balkanization of the Internet (by propping up local rivals to SV efforts) are the same people who are doing their own Balkanization in the name of easy and quick growth.
I'd think a programming language is the last place you'd need i18n and l10n. I know documentation isn't sexy but that's where we should focus our efforts. I assume Google translate and tools like that will get us maybe 80% there but there is still a lot of work involved.
All in all, looking at https://raw.githubusercontent.com/echeran/clj-thamil/master/... I am cautiously supportive of the effort but we should still strive to maintain uniformity where possible.
Reminds me of an article about the Scratch programming language, where the author noted that being based around visual drag-and-drop blocks instead of text strings meant it was trivial to translate any Scratch program on the fly:
> Scratch, albeit visual, is still a language built around sentence fragments. Instead of using punctuation and assorted ascii art to enchant text into code, the structure and action of a Scratch program is almost as clear as prose. By using natural language fragments instead of magic identifiers in text, Scratch is unique in another aspect — Internationalization — Scratch programs can be built up out of German, French, Chinese, Japanese fragments too.
> The look on peoples faces when you change scratch into their native language is worth treasuring, an aha moment where the code becomes readable in an instant. Scratch is so readable that it has come as a surprise to some, one remarking “I understand this. It can’t be programming”.
http://programmingisterrible.com/post/76953953784/programmin...
This reminds me of an article from the late 80’s: It was about someone having created a new home computer specially made to be easy for kids to use (actually a modified Compis painted in bright colours, if I recall correctly). The computer had the keys on the keyboard in alphabetical order, “so the kids could more easily find the letters”.
These kind of things might seem good in the short term, but it does the kids absolutely no good for dealing with the real world.
Localizing Logo has a long and storied history. Papert founded LCSI in Montreal, and LogoWriter, their implementation, was localized in French (keywords and all, but there are very few keywords) and used in Quebec schools. It was also localized in at least Spanish and Russian. Their current product, Microworlds, is available in English, Spanish, Russian and Italian (but not French).
I took a programming class in 11th grade in Quebec, with the old DOS version of Logowriter, running on 286s with no hard drives, in 1996-1997. It was pretty creaky, but you could make fun games with it with some effort.
While Perl 6 was designed with English method and object names, it's a fully-Unicode-enabled language, with the ability for identifiers and even operators to be defined in any language one may desire. The name of the (currently) primary implementation is a Japanese word, "Rakudo", which is also a pun in Japanese depending on how you say and/or interpret it. Larry specifically wants Perl 6 to noy be limited by English as much as is practical (or even impractical, if you know him you'll understand - to him, code is just as much poetry and art as it is engineering!)
As someone who believes in localization, especially in every Indian script (if not the language), I love this initiative and would like to see it succeed.
Many people who have been exposed to many languages, but only one script through out their lives, may not appreciate the significance of such localization.
Its easy to onboard and educated person in his/her language & script. Infact, just doing it in devanagari script (used in Sanskrit and Hindi) can help many native Indian langauge speakers get on the programing bandwagon.
Being that 'geek' kid taught myself everything through all those sleepless nights and fried boards, and the only outlier branded himself as 'programmer' my whole family social circle ever know of, I do not have plan on teaching my son any programming language. The last thing I want is taking away the fun he discovering his talent. If he shows a great interests in what i am doing everyday, I will just show him how to write in the programming language I am using for work.
as you probably guessed, i'm not a native-english speaker as well :)
I love this! I started working on a toy language as an exercise, and since I'm also trying to learn Icelandic, I thought, why not make my programming language Icelandic? Places like Iceland aside (they speak better English than we do), I've often wondered if the Anglocentrism of programming is a barrier to learning in other parts of the world. Maybe not the highest barrier, but an obstacle nonetheless.
>I've often wondered if the Anglocentrism of programming is a barrier to learning in other parts of the world.
From personal experience: no. I was 7 or 8 when I started learning BASIC and I didn't speak a word of English at the time. FOR, IF, GOTO, etc. were just abstract words for me. Things of their own that resulted in specific behavior. I didn't really grasp the "real world" meaning behind them until I started learning English later.
I started BASIC at age 11, only a short time after being immersed in an English speaking culture so it was simultaneous. The BASIC words did mean something in English, but it was easy.
I thought it was absolutely terrific how the programming language was nearly grammatical, because English words didn't require inflecting. For instance PRINT is both the imperfective dictionary form of a verb, and an imperative. This means that programming can use English verbs in their dictionary form (easy to look up!) and yet these uses nicely read as imperatives: print this, update that, etc. The target nouns of an imperative have the same form as datives. The "foo" doesn't change between "here is variable foo" and "add 3 to foo".
I thought, man, English is working great for programming, this is so easy!
I never thought of that, but that's a really cool point. Then again I'm a native English speaker so I never really had to think about it.
Same here... started learning BASIC way before I learned English, and arguably at the same time I was learning my native language. Was never a problem, in fact it probably helped me learn English.
The Anglocentrism of programming is a boon, at least in open source. It means that collectively hackers worldwide have been able to enjoy the fruits of each others' labors because we all communicate and share patches in the same base tongue. Allowing Unicode in source code is a mistake. Additionally for non-English speakers who want to learn English, wanting to learn programming is a better way to learn English than a passive classroom since you're actively going to be reading and writing English to figure out solutions to your programming problems. These projects to make the entryway into programming more smooth (by using the native tongue) sound nice, but I worry that those sucked into programming through this method will end up forming their own cliques based on language and essentially cut themselves off from the rest of the programming community.
Why do you assume there is an innate pre-requisite to learn English to code? I challenge that assumption.
Do you not see the diversity/ingenuity of problem solving when you travel to different countries? What else are we missing in the Anglo world? Do you assume everyone should speak English when you travel to China, India or Peru?
Why can't open-source communities form in different languages? Many people speak more than 1 language and can share learnings across the communities, just like in the real-world.
Bottom line: the world is diverse, let's make coding reflect that.
Sorry I didn't reply to this right away. I don't believe I made the assumption that learning English is a prerequisite to coding, can you explain what made you think I made that assumption?
Of course I see the diversity of the rest of the world and want their ideas in the marketplace. But their ideas are so useless to me that they might as well not even exist if I can't read them or hear about them. So it is very important and good that if you care about your ideas getting exposure, and want to cultivate the exposure of more foreign ideas, those ideas need to be expressed in the most widely available language, which in the programming world happens to be English. I don't particularly care too much that it's English and not French or Cantonese, but I do care that it's something. Diversity of spoken language is not important in itself, diversity of the brains beneath the language (and to a possible extent how brains are shaped by different mother tongues) is.
(Semi off-topic, but I do agree with the late Lee Kuan Yew that China should make its official language English. ;))
Edit: I should also link to this as it's an argument along the same lines, and also includes a bit for why English in particular is useful over something else like e.g. German. http://www.catb.org/esr/faqs/hacker-howto.html#skills4 Second edit: and yeah, humans have been communicating despite language barriers since the tower of babel fell, but it's inefficient.
Yeah, it's definitely the case that having a common language enables collaboration. What I imagine is kids who don't speak English getting interested in programming and learning the basics in their mother tongue, then moving to English programming as they get more advanced. Basically my hypothesis is that it's easier to jump one hurdle at a time than it is to jump two at the same time.
I don't deny that the network effects of speaking the same language matter. They do. But if you're turned off to programming because it's too hard (b/c the language barrier), you may never care to put in the effort to get to the point of learning English for all of its relative benefits.
If you're interested, I brought up these considerations and tradeoffs in the talk I gave last year - https://youtu.be/MqjMZNwnYCY
Identifiers in some languages will not work well for programming, if those languages require declension for verbs, or casing for nouns. The resulting programs look like the broken grammar of a foreigner.
Yet, by the same token, (pun absolutely intended) introducing cases and declensions into a programming language is a bad idea.
Thanks! If you want to try Icelandic, all you need to do is create a map or two where the keys are the English names and the values are the corresponding Icelandic ones. Then call translate-fns and translate-forms on the maps. You can follow this example - https://git.io/v2FdH
Here's what programming in Malayalam looks like - https://twitter.com/prathyvsh/status/635733805567840256
I don't believe that we give enough credit to the hurdle that exists when you have to learn English to learn programming. One of my cousins grew up in a village in Tamil Nadu (Southern India) where even the English teacher didn't know English well... The high-school computing courses were just about using desktop office apps. Kids end up just memorizing which icons do what actions (as opposed to reading the self-explanatory tooltips, menus, and error dialogs). The obstacles to equity for someone like her occur on multiple dimensions. I imagine the distribution of difficulty for non-native speakers skews more towards her end than towards those with better access to learning English.
Many people don't realize this, but its an innovation by the Election Commission in India to have symbols for each political candidate competing in a constituency.
This ensured that a Political Party / Candidate name wouldn't face the localization hurdles in a constituency which has people speaking/knowing 3 to 4 different scripts and languages. Even during the election campaigning, politicians ask people to vote for a symbol, because it breaks the language/script barriers.
The hurdle often is not obvious for many people, because when they think "different languages", they assume its the same script.
I've recently seen some news about research trying to teach people programming. People learning language with randomly named keywords fared no worse than with English keywords (at least C-like).
http://neverworkintheory.org/2014/01/29/stefik-siebert-synta...
" a library for processing for the THAMIL language " ?
I know of it as Tamil.
IIRC the fully conformant transliteration would be Thamizh.
(For those not in the know: zh sounds like l, but comes from the roof of your mouth. Close to ळ in Devanagri)
Yep. That's how it's spelled officially. I also know of it as தமிழ், for which "Thamil" is a more accurate transliteration.
I like the effort, but I'm wondering if so many parenthesis are "manageable" by a kid.
I have no kids, but I think that at younger age it's harder to be precise vs understand a concept. Think coloring within the borders vs understanding to color in or out a shape.
Based on this assumption, I think a simpler language would be something that allows being imprecise (e.g. case insensitive, very limited punctuation).
I'm not saying precision shouldn't be taught. Imprecision should be allowed, pointed out and expected to be corrected. But allowed in the first place. It's like saying, first color and enjoy the result. Then learn to stay within the borders and the result will be even more pleasant.
You can get used to nearly any form of syntax if it's your only exposure. I used to work with code that looked like this:
(but only 16 lines were visible at a time) as a kid. I wrote a bit more on this in my blog a few years ago (http://boston.conman.org/2008/01/04.1).0 'CODE TAKEN FROM THE RAINBOW M AGAZINE, VOL. IV, NO. 1 (AUGUST 1984), PAGE 78-'SOPWITH COCO' FL IES AGAIN! 1700 X=30+SIN(JB)*28:Y=160-COS(J B)*28:CIRCLE(FA,FB),1,0:CIRCLE(X ,Y),1,1:FA=X:FB=Y:RETURN 1710 IF D7=10 AND N(S)=0 THEN RE TURN ELSE LINE(30,160)-(SX,SY),P RESET:DRAW"C0;BM83,170;XA$(D7);B M-10,0;XA$(D6);BM-7,0;XA$(D5);C1 ;XA$(10);BM+7,0;XA$(10);BM+10,0; XA$(10);":LINE(128,40)-(IX,IY),P RESET:CIRCLE(162,92+GX),1,0,.1:D 7=10:D6=10:D5=10 1712 IF AZ<AL THEN AZ=0 1730 SCREEN1,0:RETURN 1740 F=INT(RB(S)*.5729):G=INT(RB (S)*5.729)-(10*F):I=INT(RB(S)*57 .29)-(100*F)-(10*G):DRAW"C0;BM66 ,151;XA$(FS);BM+7,0;XA$(GS);BM+7 ,0;XA$(IS);C1;XA$(I);BM-7,0;XA$( G);BM-7,0;XA$(F);":FS=F:GS=G:IS= I:JB=RB(S):GOTO 1700When you're looking at poor Brazilian children why give them the equivalent of this:
Why not start them off with something a bit easier, in Portuguese, with Portuguese docs and user groups?0 'RACR IMCRO GHOT UTH WEREMIN U KLEDUNTE, VOL. IV, NU. 1 (ASAGAT 1984), JURM 78-'SOPWITH COCO' FL IES AGAIN! 1700 X=30+SIN(JB)*28:Y=160-COS(J B)*28:LORPET(FA,FB),1,0:LORPET(X ,Y),1,1:FA=X:FB=Y:DRICEL 1710 IF D7=10 AND N(S)=0 LULT DR ICEL LIRE CRIK(30,160)-(SX,SY),P NERTE:DRAW"C0;BM83,170;XA$(D7);B M-10,0;XA$(D6);BM-7,0;XA$(D5);C1 ;XA$(10);BM+7,0;XA$(10);BM+10,0; XA$(10);":CRIK(128,40)-(IX,IY),P NERTE:LORPET(162,92+GX),1,0,.1:D 7=10:D6=10:D5=10They can learn English, maybe at the same time.
A single isolated case can do anything.
I think they are proposing a language for a multitude of kids, I assume to be thought in schools. Applied to their case, I don't think what you say here works, i.e. you can't teach that to a class of 10-30 kids.
You need to find something which is "ok" (whatever that means) for the average kid. And that's why I was expressing my concerns about the parentheses.
Or maybe the parentheses make it easier for kids, and everyone else, to see which elements belong together. Based on the number of adults I've seen who are still unable to stop moaning about the parentheses, I suspect age has little to do with it.
I was mostly referring to the 4 closing parentheses in a row. I agree it's something difficult for everybody. I have the habit to open&close parentheses immediately, even when I write in word, but it's definitely something that the "normal" person doesn't do, let alone kids.
I suspect if you can learn to play Mancala in elementary school you can learn to manage counting up to at least 4 braces.
Basic256 is awesome (previously KidBasic).
http://www.basic256.org/index_en
You can have quick impressive vocal "Hello, world!" with its speech synthesis:
say "Hello, World!"
http://doc.basic256.org/doku.php?id=en:sayI'm relieved that this isn't a new, multilingual AppleScript. Using macros to setup native aliases for syntax words seems reasonable, especially if it means you don't have to change input methods all the time. Although if you're going to use libraries, those names are likely going to have to type those names in English (or wrap them in native aliases too)
This should be easy, since I've brought up my child to sprak and write exclusively in Racket Scheme.
Perhaps this could serve as a helpful middle-man and offer a compromise to those who feel strongly either way.
jslogo has support for translation of keywords (and at least some actual translations, though I don't know how to activate them): https://github.com/inexorabletash/jslogo