So I think at this point, for me, programming languages just aren't English. One odd thing I've noticed is that in Ruby the `unless` keyword confuses the hell out of me, and yet when speaking English I never get tripped up on the actual word "unless". So I guess it's handy that the keywords in programming happen to be English words, but my comprehension of programming languages seems to occupy another region of my brain.
    do_something() unless special_condition;
I think that’s because it (¿almost?) always splits “is not” in two parts. Compare “If x is not y” with “if not (x is y)”.
> for some reason, "when" in ansible is also very weird
When feels weird to me, too. I think that is because “when” often implies something will happen, but you don’t know the exact time, while “if” means you don’t know whether it will happen at all (compare “when it rains” with “if it rains”). So, using when to describe a trigger is fine, but to me it doesn’t make sense as a statement in an imperative programming language.
> just reading the README felt very weird.
I had to check, and yes, there is a README.md, and no LIVREMOI.md.
[edit] n/m based on correction below and followup search, there are far more LISEZMOI.md files than LISMOI.md files.
I guess you will not like Lisp then (;
Didn't someone say something about using French to speak of love and german to speak of science? Maybe english is getting it's use.
That's interesting - as someone noted below, in musical notation, the keywords are nearly all Italian, and it would feel quite weird if they were written in English instead. So in that sense, yeah, maybe `for`, `if`, `then`, `import`, etc. are the "fortissimo" and "d.s. al coda"s of the programming world.
This can actually be useful for locally-defined variables. Even more so if you're using an editor with LSP support where it's trivial to bring up the doc comments for an identifier as a tooltip - with some added support, you could even write these doc comments in multiple natural languages, while keeping the code itself quite linguistically neutral.
Possibly a quote attributed to Charles V: I speak in Latin to God, Italian to Women, French to Men, and German to my Horse.
(Actually I believe the late P.D.Q. Bach [1] did this a lot, and it was in fact quite funny)
Part of it is that even though I might know the term, it won't be long before I need to bring in something where I don't know the term. At that point I'll be inventing a local term, when I know what the English term is.
Since them I've moved to US keyboards after starting to work with others in an office and not being able to pair program otherwise, and obviously default everything else to English too.
I'm not a native English speaker, but when I come across that sort of "programmed in the country's language" programs today it does take some time to get used to the style and translating stuff while also trying to understand the logic. I wouldn't say it's a huge time-sink, but particularly names can be difficult to convert/translate on the fly when you're trying to get product and developers to agree to what we're talking about.
  int verifica_idade(int idade) {
    if (idade < 18) { return -1; }
    return 1;
  }
  int main() {
    int idade;
    scanf("%d", &idade);
    int verificacao = verifica_idade(idade);
  
    if (verificacao < 0) { printf("Acesso negado\n"); }
    else { printf("Acesso liberado\n"); }
    return 0;
  }
I don't know anything about the Portuguese script. But your example seems to be made entirely of regular Latin alphabets. Now imagine another language where that isn't the case. Just switching the layout even on a programmable keyboard is going to be a major annoyance. I can touch type on two layouts (English Qwerty and Malayalam Poorna Inscript, in case you're wondering). Occasionally switching between the two layouts is the biggest distraction while typing prose - even with convenient layer switchers programmed in. Programming is going to be hell if the keywords and identifiers are in different scripts. I reckon that it would slow me down to about one-third of my full speed.
There are genuine reasons why identifiers could be in another language - like programming for linguistics (spelling and grammar checkers, morphology analyzers, etc) or while dealing with regional concepts. But even in those cases, programmers simply transliterate it into Latin script, rather than use the original script. Their sound roughly the same. But full fidelity is not possible (there are sounds that you may not have even imagined before). Even so, it's easier to just compromise on fidelity rather than do constant layout switching.
And then there is the reality that many language scripts are simply unusable for programming. My own language is agglutinative - meaning that multiple words fuse into one (even 4 words combining is not unusual). The same thing can be written in a dozen different ways. This isn't a big issue if you're reading or listening. It won't confuse you. But the moment you start applying formal rules like in a computer, it's a dozen different ways to type it wrong! I like my script for anything other than programming. It's very expressive. But the anemic simplicity of the Latin script is actually a big advantage when it comes to things like programming and mathematics. I believe that you will find many such peculiarities and nuances with other scripts if you go searching.
Portuguese is a direct descendant of Latin. But it has quite a bit of punctuation, OP just ignored that as the programming language, C, does not support it. In Common Lisp you can happily go:
    (when verificação (print “pessoa é maior de idade”))
     (defmacro quando (cond corpo) ‘(when ,cond ,@corpo)
     (defun imprime (x) (print x))
     ; now we can do this
     (quando verificação (imprime “pessoa é maior de idade”))I have a single key shortcut to switch between them.
Accents work as if I was using a native keyboard, so they're not too bad (unless you're on mobile, there it sucks), except the keys do not show the right symbols. If you don't know the mappings by heart, you can get your OS to show you the layout... maybe leave that on the side and look up when you forget something.
I'm not sure when I did the switch myself! Maybe as late as my first professional experience, or maybe a bit later in my studies
Another issue, even for other speakers of your language, we don't all translate english words the same, some words are just not translatable and some words look the same but mean different things, how can they tell if it was meant to be English or not?
For example in Spanish, "default" translates to "por omisión", two words, there's no single word for it, a lot of people translate it to "defecto" because it's similar but that means flaw, defect. It's so used, people say "por defecto" instead of "por omisión" now and some dictionaries added it as a translation already.
Another example, "cache", I know its meaning in computer lingo, the times I've had to use it is in the context of computers, so I have no idea what its translation to Spanish is or if there's even a word for it. If someone used the translation in code I would have no idea what I'd be looking at.
One more, "library" translates to "biblioteca" but some people use "libreria" (bookshop) because it sounds similar. You can find usages of both in documentation. People will probably understand both but it hurts searchability.
`asynchrone fonction` feels wrong because it's the wrong word order for French; it should be `fonction asynchrone`...
I learned English via immersion as I was thrown into an international environment at age four and to me it radiated confidence as the few native English speakers there were obviously much more proficient in the language.
I have a problem with the word "robot", as it's essentially a loanword from my family of languages, but I was unaware of that initially and once I've made that connection, the "coolness" faded somewhat.
Strangely French to me has this same air of confidence, displayed in, among other, the French word for "computer". Truly the French copy no one, nobody copies the French.
Examples is French: https://www.tortue-logo.fr/fr/tortue-logo/exemples/
Fortunately most commands had TLA aliases and were highlighted in the editor, so I just generated all three-letter combinations, inspected them visually and reverse-engineered what they were doing.
For comparison, in mathematics I learned to read all the symbols in french, and only learned their english equivalent much later, so it feels uneasy for me when i read their english version. So it is clearly a matter of habit that took its root when you learned reading.
I think that depends on if they understand how to program. For me, as a native English speaker, a computer program is not speech.
In a program, there's three areas where the spoken language influences:
1: The keywords in the language: IE, "if," "switch," "return," ect. These take on a meaning in my head that is distinct from the meaning of the spoken word. "class" is a good example: Its use in programming is shortened from "classification" which comes out of category theory; but its use in English means something very different. Likewise, "if" in my head has such a different meaning in code that if "si" were used, it wouldn't make a different.
IE, in code we use "class" as if https://en.wikipedia.org/wiki/Class_(programming), which came from https://en.wikipedia.org/wiki/Class_(set_theory) and https://en.wikipedia.org/wiki/Category_theory; but in English it's commonly meant to be https://en.wikipedia.org/wiki/Class_(education).
2: The API names: By convention, APIs typically are English. Learning these is like learning any kind of professional lingo. I've never tried using a non-English API, and would probably struggle significantly if I had to.
3: My code itself: A significant amount of my time spent writing a computer program is making sure that my code is understandable to me and the other people who have to maintain the program. There's always going to be an "other-worldliness" to a program until someone understands the conventions and style.
Possibly a remnant of being bilingual as a child (I am not anymore, and was not by the time I learned programming later in my childhood)?
I do not think I ever really thought of programming languages as being English, but English like/derived from English.
The first time I encountered a non English PL, I did feel the same uncanniness you spoke of. It felt... wrong? I wish I remembered which one it was. It was probably the first time I realized how prevelant English was, and that PLs could even be written in any language .
Programming in English = X Programming in French = Y
You're used to X and now it's Y. So it feels weird. English speakers are used to X and it's X. So it feels normal.
I could see myself coding in Latin though: https://github.com/pianoman911/ferrugo. Something about the prepositions tickles my brain the right way.
I always felt the same and one theory I have is because the imperative nature of source code feels rude if you try and put it in French. It feels like yelling orders to a dog.
Then I don't know if it's just because in French, despite everyone calling us rude, we are usually quite polite. Or if it's the same for every ESL.
I just can't stop laughing at the "génial" => "super" https://github.com/bnjbvr/rouille/blob/principale/rouille_co...
Merde is an alias for "calisse" and "oups" , see https://github.com/bnjbvr/rouille/blob/7e9523fe24026bff1a3a7...
But the best one is "merde" | "calisse" | "oups" => "panic"
"super" is also a Latin word that's valid French.
> Au-dessus de, exprimant une supériorité dans la qualité
1) Quebec wanted "arrêt" instead of "stop" on stop signs, even though the latter is accepted as valid French and used in France.
https://en.wikipedia.org/wiki/Stop_sign?utm_source=chatgpt.c...
2) The use of the TLD .gouv.fr instead of .gov.fr, even though "gov" is a recognizable contraction of the intended French word "gouvernement".
(No, it's not a valid defense that "'gov' would be pronounced differently from 'gouv'": the English TLD .com is a contraction of "commercial", even though the "com" in "dot-com" is pronounced differently from the "com" in "commercial".)
Probably because of their proximity with the USA, the french-speaking community in Québec is far more attached to using French than actual French people. That's why in France we use "Stop" and not "Arrêt".
On the other hand, ".gouv.fr" is something used in France. gouv[ernement] is completely different than go[u]v[ernement] Not only because of its pronunciation, but also because it's not a simple shortening of the original word.
We never use "aso" to talk about an "association", even though it would shorten it even more, because it just doesn't make sense. You can remove the ending of a word, creating a kind of "prefix", bug it you remove multiple part of a word it just become something different.
  fk lese(&selbst, schlsl: Zeichenkette) -> Ergebnis<Möglichkeit<&Zeichenkette>, Zeichenkette> {
            wenn lass Etwas(wöbu) = gefährlich { WÖRTERBUCH.als_ref() } {
                Gut(wöbu.hole(&schlsl))
            } anderenfalls {
                Fehler("Holt das Wörterbuch".hinein())
            }
        }
This absolutely is not readable to me. But woerterbuch and schluessel should of course not be abbreviated, for legibility.
Ready surprisingly nice to me anyway.
An implementation of OCaml (similar to Haskell, but from France instead of UK), but with french pastries name. It was half a joke, half a serious study project.
https://github.com/vanilla-extracts/ocaml-baguettesharp-inte...
Rouille (338 points, 144 comments, Sept 11, 2021) https://news.ycombinator.com/item?id=28490935
Rost – Write rust code in German (55 points, 16 comments, Nov 9 2021) https://news.ycombinator.com/item?id=29159077
Rost – Rust Programming in German (161 points, 115 comments, Mar 25, 2025) https://news.ycombinator.com/item?id=43488490
We’re different people.
Reminds me of the first time I tried Excel in English (might have been Google Spreadsheet) and the searchv function was nowhere to be found, not knowing it was actually called vlookup ("buscarv" in Spanish).
It got complicated fast. Now you need a canonical representation for disk, something still text, maybe English is the common denominator? Do variable names get translated? Etc
I would like to see it tried, but I’m not brave enough.
https://de.wikipedia.org/wiki/Visual_Basic_for_Applications?...
> Arf("fetchez le dico".vers())
> rústico (Spanish for Rust)
which is plain wrong.
Just like it may be amusing to watch "Don't Be a Menace to South Central While Drinking Your Juice in the Hood" as long as you understand satire.
Let's create "Piaf" to see la vie en rose, the French à la https://codewithrockstar.com/.
If you don’t know the idiom, you should check it out, it’s both particularly vulgar and very commonly used.
French has so many perfectly normal looking words for sexual stuff. Not particularly long or short, not a compound of other words or a circumscription... nope, just a word for a thing, like table or house or tree.
If I'd used AI, I probably would've included grammatical gender for nouns.
I remember that many of the other languages popped up a little later.
The implementation is also rather inefficient, but it's not like such a translated macro will be used for anything serious.