61 comments

[ 1.7 ms ] story [ 214 ms ] thread
A few examples (perhaps HelloWord and Fibonacci) in other languages would be nice. From an informal statistic I propose German and French. (and I'd like to add Spanish, because I speak Spanish.)
I added a sample example file and an example maker. Thank you for the feedback.
It would be good to have those examples also on the linked page, that presents the project, and not only buried in a folder, contained in the repo, stored on github.
My mistake, corrected. Thank you.
English will always be a barrier to non-speakers when it comes to computing. This is great.

On a side note: is there any idiom-agnostic programming language? I only know that APL is.

I coded in a Brazilian Portuguese version of Logo at school. I remember there was also a Portuguese Portuguese version of the same toolkit. Both were called Megalogo.

On a related note, "idiom" in English does not mean the same as "idioma" in Portuguese ;-)

The same for Hindi. For some reason Google decides to translate the same word differently when I go through an API and when I do it in browser.
I meant idiom-agnostic as format-agnostic, collective, universal: like math, music, etc...
Music is not universal (different scales are in use), and maths uses Roman & Greek lettering with the Arabic number system.
This is pretty neat. I've not taken a close look at the implementation but I'll definitely do that (if it isn't a whole lot of effort could you please describe/document the design and approach taken ?)

I've had thoughts about solving this problem previously but never acted on it. My thoughts on this however were along the lines of providing the ability to re-define the keywords and builtins as part of the interpreter itself in such a way that even the prompt could accept non-english input.

Thinking about this is natural when one is Indian[1] and ends up working with some really talented people who have weak English skills simply because their primary education was conducted entirely in a non-English medium.

A lot of words used to express programming ideas are difficult for non-native English speakers to remember even if the ideas themselves are not (think abstraction, encapsulation, introspection, reentrant, idempotent ...etc) and the effort required to remember and use them correctly when communicating with other devs is higher (IMHO) for non-native English developers. Of course this is non an India specific issue, and of course English is the lingua franca of technology but that shouldn't be the barrier to entry for learning programming.

kudos on the effort once again !

[1] one country, and a multitude (22 according to http://en.wikipedia.org/wiki/List_of_languages_by_number_of_... ) of 'official languages'

I'm not native English speaker, but I wish people would just accept that English is Latin of computers.

I still have to come to servers installed in German or French and guess by memory where stuff are.

It is really horrible when local civil servants start to invent translations for English words, which did not mean anything computer-related to begin with. Like Spool and Cache and Cookie. Why cant browser's Cookie be just Cookie, it is easy to vocalize in any languiage. Why they want to translate Cookie into local bakery term? It does not raise level of comprehension any.
Partly because 'cookie' requires the latin alphabet, and the ability to pronounce those sounds (it's not as easy as you think). If you're trying to avoid dilution of your language, you may want to come up with your own localised words.
> dilution of your language

Let me guess, you're french?

Nope, British. But I'm interested in linguistics, and how English affects other languages and the communities that speak those languages.
I don't see how this is a bad thing though. The more cultural and linguistic bonds there are between nations, the happier everybody gets. More empathy, less war, easier trade, more friends and more options for living and working wherever you like.
Personally, I think there are advantages and disadvantages. The big disadvantage is that small communities which have high social cohesion get squashed by the larger community, which leads to resentment and bitterness. In the UK, we see this with Scotland, Wales, Cornwall, Scouse, Geordie, the Black Country, etc. They have all been squashed by 'Estuary English' (although some are making a resurgence).

Online communities (including StackOverflow and Hacker News) do much the same thing by putting rules in place about how people talk with each other. When people break those rules, we get upset, because we see those breaking the rules as 'outsiders' and a threat to the community.

I believe that language can have much the same effect. When English comes in, it often results in people forgetting local mythology, songs, rituals, etc, as a result of forces like Hollywood and Simon Cowell. The community withers and is replaced by the great 'meh'.

Teaching programming to my 8 year old is a burden, because everything is in English. Teaching two things at a time is more difficult than it has to be.
Kids learn languages a lot better when they have a use case, so I'd argue that teaching them english at the same time as teaching them programming, is actually beneficial.

And let's face it, the vocabulary of programming languages is tiny.

While I agree to the use case / tiny arguments, it doesn't seem to work in practice. I am now using Scratch (https://scratch.mit.edu/) to teach programming. Much better.
Scratch has the advantage of making the limitations of the computer tangible. The block nature will show you what can be done and what can't. For example, newbies in procedural languages often try things like

if(something){loop = while} else {loop=if} loop{print("hi")}

and it's not immediately obvious why that isn't valid in text, while in scratch it is.

I don't think its the language though that makes things easier.

> if(something){loop = while} else {loop=if} loop{print("hi")}

The only reason that wouldn't work is bad language design. In e.g. Smalltalk or TCL it's fine.

Thats not relevant to the point. And even smalltalk wouldn't allow this, without reflection, since method handles aren't really first class objects.
It is exactly the point: the problem is real, but you don't have to throw the baby out with the bathwater. Instead you can use a simple, homoiconic, but still very "real" programming language for teaching.
> homoiconic

I don't think it means what you think it means.

It's not strictly what I mean, but in practice there's a close correlation; homoiconic languages naturally lend themselves to metaprogramming and so it's more normal to implement e.g. control flow as ordinary functions in the language (where they might be dedicated syntax in other languages). But yes, I really mean a low-syntax language, and they're not all homoiconic.
This feels like a case of, if we all got hit on the heads with baseball bats every week, people will start to extoll the benefits of getting hit on the head with baseball bats. It builds character! And it's not that painful!
Really?

I just memorized things. And they'll learn a little bit of English

They don't need to know what 'if' means, they just need to learn "you use if to do this"

(Now, to be fair the docs were in my native language, that helped a lot)

A lot of the best programmers I know are foreigners, and they learned English and their respective programming languages side by side. It is a lot more useful to know English to search and ask for programming help in, than to seek help from natives of your language whose skill set may be very minimal and may not be of any use, or worse, they may suggest poor programming practice.
You did read that I was talking about an 8 year old kid who is learning the words "clothes" and "red" in school? Still a few years to go to ask for and look for programming help in English.
A lot of programmers I know start young, maybe not that young though, my apologies. I know people who started at age 12 or so. I started looking at programming maybe at 11 years of age or 10, I didn't get anything till years later, it takes time and practice.
If you were curious about learning the guitar, would you first purchase the best 10,000$ guitar you could find at your local shop? No; you'd find some cheap guitar to play on initially to see if you could actually make a habit out of practising the guitar. Now if it turned out that you didn't like it, you have minimized your financial losses.

Similarly, some people don't know English. Maybe they're curious about programming. Should they have to learn a whole new language first? Or be distracted by the fact that the foreign programming language they have to write is also written in a foreign natural language?

I'm not sure I even agree with your premise. It's a bit premature to worry about having to interact with code written by people that are just learning programming, isn't it? Like anything, when you empower people to learn things like this you have to trust them to have the decency to write programs in English in settings where there might be other people who don't speak their language that have to deal with their programs. Or trust that they wouldn't be hired for such jobs in the first place.

> I'm not native English speaker,

And? Does that give your argument more weight?

> And? Does that give your argument more weight? Yes because he is potentially one from the target audience of this.

If somebody isn't willing to put in the tiny bit of effort to learn the tiny bit of english required for programming, they're not willing to put in the huge amount of effort that is required to learn programming anyways.

We have enough horribly documented code that needs maintenance, there is no need to add horrible documentation in hundreds of languages.

> Yes because he is potentially one from the target audience of this.

No, because he already knows English.

The proclamation "We should tax the rich less" is a self-serving sentence whether it comes from someone who was born into wealth, or it comes from someone who became rich later in life.

> If somebody isn't willing to put in the tiny bit of effort to learn the tiny bit of english required for programming, they're not willing to put in the huge amount of effort that is required to learn programming anyways.

I think you're coming from the viewpoint of "what would I do to learn programming if I had started from scratch today". But like I've argued, this is not a good view of the process of learning to program! It's more like you are vaguely interested in some discipline or skill, or might need it for something, and so you want to dip your toes in it. You have no idea whether you will like it or not, or how far you will take it. To put up all these demands -- what they should learn and focus in order to in time become your ideal programming colleague -- is just too much to demand of someone who is just exploring a new world to them and don't know where it will take them, if anywhere. How about they learn to actually put things like for-loops, if-statements and such together, before you demand that they should embody all the skills to write great documentation, use best practices, and whatever else?

Just think of all the different things that are "bad practices" that even experienced developers can manage to do with a clear conscience. You can't pick one aspect and demand that a green programmer should have the personality and disposition to know beforehand that such things are "bad practices". People can learn and change.

But why even bother. These topics just devolve into downvote/upvote battles.

> No, because he already knows English.

And he didn't have to learn it at some point?

My english was pretty much nonexistent until I picked up programming.

Like I said below, nobody is arguing against beginner languages/tools like scratch and logo that could essentially be programmed in emoji, for what it's worth.

But people are arguing against "real" programming languages being translated, because that's a waste of everyones time.

> Should they have to learn a whole new language first?

No. That's the difference between this and the guitar: you can't buy a few bits of guitar. But you can learn words like 'print', 'var' or 'for'.

I'd steer this more into the land of 'manhours spent localizing are manhours wasted' rahter than

> to worry about having to interact with code written by people that are just learning programming

A non-English programming language is more like buying a Keytar so you can get the feel of playing guitar without having to learn something different from the piano. It's not terribly useful, and if you decide you actually want to pick up the guitar you'll just have to forget everything you've learnt and learn it all again.
Logic, imperative programming etc. is not tied to any natural language. You wouldn't have to relearn the same concepts at all.
Then why choose a "real programming language" anyways? Go with something like scratch, or something that uses symbols to program tiny machines, like half a dozen iOS games.

"Real" programming languages aren't suited for beginners because error messages are usually to cryptic and should contain hints how to solve the problem.

> And? Does that give your argument more weight?

I'm likely to have to live with results of this. I already do to some extent.

I agree. Localization is nice for end users, but I really don't get localized servers, localized .Net errors etc..

People argue that newcomers need to learn 'two things at a time', English and programming. I think that's absurd. No programming language (cue the COBOL people complaining?) is remotely similar to English, the language. Keywords are limited and it's a very foreign way to talk to a machine. Not a language in which you're going to ask where the next loo is.

You might recognize some of the things you had to type to make your name show up in an endless stream on the screen as words when you learn English as a foreign language. Fun moment. But until then, this is really just painting buttons in green instead of red.

I think the idea of that project is neat, interesting. But I don't believe that this is a good way to do things and I cannot imagine that I'd use something similar when my kids are old enough to start exploring this field.

My database publishing system's programming language is both English and German. While programmers usually prefer the English interface, a rather large percentage of my users prefer the German one. (en: https://speedata.github.io/publisher/manual/index.html, de: https://speedata.github.io/publisher/manual/index-de.html)

There is also for example ConTeXt (http://wiki.contextgarden.net) - a typesetting language similar to LaTeX, which supports commands in English, Dutch and German.

Nice, just one suggestion:

The languages are just dictionnaries: You should store them in an human-readable language instead of pickle. So it's easier for people to correct errors (json, yaml,..). For example, `FR_example.py` have "else" instead of "sinon" but to correct it I would have to open the pickle file and modify it in my terminal.

I don't really see the point of adapting the programming language to the learner, which seems to be the smallest language hurdle, when they'll have to ask for help in english on forums, in IRC, or on SO, anyways.
Think third world. The kids in my village have a single computer without Internet. Sure they will need to learn English since almost the entire literature is in English, but they may yet taste the joy of programming first. It makes little sense for them to think in one language and write in another. But, I do see your point.
There are local programming forums in most countries.
Fundamentally I think that the effort is flawed. Languages don't really map to each other on a word to word basis.

At school in France they introduced algorithms with a form of french pseudo-C which was very frustrating, because it felt stilted and unnatural.

Expressing the same algorithms in natural french would already be a much better exercise, because you don't have to force yourself through a fake translated language. Ultimately I think this would be a much better first approach to programming, (with more focus on design than implementation).

In the end if you really have to implement code, you will have to learn the english version anyway if you want access to documentation and outside help.

As a Hindi and Gujarati speaker, the use of word 'chapp' for print is highly amusing.
This was indeed intended.
Yay! Python in parseltongue!
All I see is a blank page - what am I doing wrong ? ;-)
Attaining a level of proficiency in "English" required for programming (keywors, mostly) is incredibly simple, if required at all. Just accept the fact that 'for' loops in some way. In mathematics, you will also have to learn what the uppercase sigma means, hell, they even use the greek alphabet!
Pfft - Hasn't PHP had error messages in languages other than English for years?

---

Seriously though, I'm a bit surprised that people are so dismissive here of the need for having programming languages that use function/method/statement names that aren't in English.

Learning a foreign language and a programming language is something that's pretty incredible as far as I'm concerned. I'm pretty lucky that English is my first language and that function, method and statement names are pretty descriptive given they are almost always written in my native language. If I had to spend a lot of time trying to memorise another language whilst also learning a programing language, I highly doubt I would have been able to do even 20% of what I can do today.

I mean, nobody speaks any language remotely like assembly - higher level languages exist because they're easier to understand and use, at least in part because they use a lot of English word to describe what's going on. I can't see any problem with more work being done on making more tools (transpilers perhaps?) for people who speak languages other than English. Heck, we've done some pretty awesome things transpiling to/from JavaScript lately, why not start transpiling from a variant of JavaScript that uses Arabic or Mandarin to the English variant of JavaScript?

Hey, that looks awesome! The implementation approach is really simple and that's cool for a prototype, however in order to work well for libraries and the standard library, we need to use the ast. If you want, I can make a pull request with an ast-based translation(I have a lot of experience playing with python's ast) ?
Sure, would love that. Pull away!
The language itself isn't really the problem its the documentation and public resources surrounding it.

Having learned some japanese, I could see myself learning programming just the same so long as stack overflow and the various docs websites were English.

(comment deleted)
This is a good idea. There are tiny differences even between en-GB and en-US. 'Colour' is the most common one, with documentation calling '#' the "pound symbol" instead of £. The first programming languages I encountered were on the Sinclair Spectrum and BBC Micro, which being British used the British spelling of COLOUR in BASIC.
Well it's not as easy as some of the posts here suggest, like all you need from English is "if", "for", "while" and little more. Don't forget about the libraries coming with each language. You'll also have to map "memcpy" to "memory" and "copy" and know those words, or understand what a "TreeViewItemCollection" is for, just to give two examples out of tens of thousands.

Said that, I think trying to localize programming just isn't going to work. If you want to program, you'd better get along with the English language.

Nice idea - but I prefer english, even it is not my mother tounge.

But cool project - may be I can adapt it to another thing. :)