Ask HN: Is knowing English a prerequisite for being a software engineer?

41 points by baron816 ↗ HN
Languages, libraries, and frameworks are pretty much all open source. Is there anyone out there translating docs? Can you write JavaScript or Python or something using Japanese or Cyrillic characters?

63 comments

[ 2456 ms ] story [ 2218 ms ] thread
No it’s not a prerequisite. When I started programming I didn’t know English, and it didn’t matter.

I actually learned the meaning of some words in English because I knew them from programming.

One example is while (mentre in Italian), I knew the difference between a do/while vs a while loop in C, and that helped me with the meaning/use of while in the spoken language.

From time to time I discover that some words have a meaning in English, other than tech. For example ping, I thought for many years it was just a network command. In Italian we “Italianize” many words, for example I often say “pingare” (to ping), that has no meaning in my mother tongue, so often I don’t think it has to have a meaning in other languages as well.

As for typing in non-latin alphabets I don’t know. My 2 cents on the topic are that I buy US keyboards and set international layout to be able to type letters with accents (needed in Italian) vs I hate Italian layout with accents but no parenthesis for programming. So my guess would be no: you need a US keyboard and thus alphabet to program.

My case: I'm from Spain and I was 6 years old with a Commodore VIC-20: just "setup" papers were translated, the BASIC manual was in English, so you had to read English without really knowing the language. Those days I was years away of English classes from the National Education System.

I would say that we "latinos", including Italians, tend to "latinize" words like "ping", in my case "pingear" (to ping) in Spanish.

Yes! We do it all the time, even more often than necessary. Like, you could say "Set foo to 0" as "Setta foo a zero" and IT people will understand you, although "settare" is not even a verb (the correct translation would be "impostare")
the more senior IT people will also question why you are mutating variables :)
You can learn programming without knowing English, but being a software engineer implies getting a job; could you get one without knowing English?

I'm from Southern Europe too (and we also adapt words like "ping" :) but I can't imagine working with someone who can't read documentation of the libraries we use, or read an SO discussion or issue on the repository. I guess translation software may help, but still, I have to admit I would probably not hire them unless they were very good at other stuff.

Yes, if you want to actually work with teams in the wilder world. English is the lingua franca of effectively all major programming languages. North American teams, EU teams, and Indian teams are all on English by default.

I'm not totally sure how worthwhile supporting internationalisation really is. Localization is a bitch, and doing things in ISO formats as far as possible is best anyway.

My comment is all speculation

---

I have always assumed that you can need to know either English or Chinese to be a software developer.

Mainly because the bulk of resources are in English, except China which has a large enough population that it can sustain it's own ecosystem internally.

I think the smaller your country is, and the software engineer population within it, the more you need to rely on English. E.g. I could see Russia and Japan having non-english speaking software developers, they have relatively small populations (<150M) but seemingly a lot of tech stuff going on.

You can also see which languages technology blogs / documentation are usually translated too. Which is usually Chinese, Japanese, Russian. Unless I'm wrong, because I can't point to any examples off of the top of my head.

> Can you write JavaScript or Python or something using Japanese or Cyrillic characters?

I believe identifiers in those languages have to be ascii characters but I'm not 100% sure. Go however allows any valid unicode character for variable names. The rest of the language is in English though.

Valid Go w/ variable in Japanese: https://goplay.space/#whU6ErYq_wR

Both Javascript and Python 3 do support unicode in variable names
Yes, if you want to become a good software developer.
I agree. It's not a prerequisite, but if you want to be good, you need to.
More specifically, I think it's needed to be efficient.

Sure you can get things done in some other languages and become good at it, but being used to read source code written for an english speaking audience, read english docs and browse english Q&A sites and forums makes a huge difference from my own experience.

You can use unicode characters in identifiers in many modern languages including JavaScript and Python. So you can write your own code in whatever languages you like. You could learn the meaning of language keywords without knowing English. But all libraries are still in English, so I would say it would be almost impossible to become a productive developer without being able to read technical English. (Which to be fair is not the same as to be able to speak fluently, and is much easier to pick up on your own without access to teachers or other English-speakers.)

A few programming languages like "turtle" have been translated to many human languages because they are intended for the education of children. I know VisualBasic for Office also have some translated version (and translated documentation). There are some other historical examples. But I don't know of any mainstream general purpose language where this is the case.

I know of some workplaces which wrote all their own code in the local language - but standard and third-party libraries were still in English of course, so you needed to understand English anyway.

So I will say you can learn to program without knowing English, but you will not be able to be a professional developer, except in some niche areas.

Yeah, English is the biggest standing in the way that being a software engineer. e.g. If you are not Enligsh as mother language, you can't smoothly read doc writed in English. But many docs and papers write with English in the world. Furthermore, Possiblely you couldn't my words above. Because I am non-English :<
You might get more correct answers if you ask on a non-English speaking forum. I imagine there are plenty of developers in Russia and China who don’t speak English. We often hire remote developers on Upwork and many can’t speak (orally) English.
Not being able to speak English is very different from not being able to read it, in my experience. I know multiple people in that situation, and I'm the same with French.
Absolutely yes. Virtually every relevant and up-to-date resource out there is in English. Stack Overflow, GitHub repos, documentation, official specifications, technical articles, tutorials and blog posts, podcasts, videos. English is the lingua franca of the community. You need to be able to: A. Read and understand an enormous amount of written material on complex matters in English with no more effort than you'd expend reading in your mother tongue and B. Produce clear, concise and elegant prose in order to engage with the community (not to mention your coworkers!), learn and exchange ideas.

I could hardly take seriously a software developer (or scientist, researcher, teacher for that matter) who has poor English.

Not knowing English in software engineering is the same as living in the USA not knowing English or flying airplanes not knowing English. It might be possible, but it leaves you with a lot pf restrictions and a very small community. Personally, I got fluent in English by reading a lot of manuals and documents when I learned programming in the 90s where I had no internet and thus no way to connect to other German developers.
You don't really need to speak English, having some vague basic notion of English is more than enough, I did not know English when I started and it wasn't blocking me much.
That question is asked to an English programming community - mainly western-ish - , the answer is therefore going to be heavily biased towards it.

I'm sure there are many non English programming communities, but somehow the pieces that are used to build the syntax of a programming language are mostly English (with a few rare exception)

So I don't think you _need_ it, I think you need to speak the language of your closest programming community (mandarin, french whatever) and you'll happen to use English keywords.

I work in Japan and most of my coworkers speak next to no English. I also see them mostly googling in Japanese to find answers to questions, or searching on popular Japanese-based websites (qiita, hatenablog).

A lot of the popular frameworks have community maintained, up to date docs, at least in the stack we are using (Ruby, RoR, Vue.js, and Jest all have good translations, and tons of non-English resources).

I have never seen anyone writing actual code using non-English characters, but usually comments are in Japanese.

Imagine you'd asked "Is knowing how to sight read music a prerequisite for being a musician?".

You can make music without knowing how to read a score. You can perhaps even make a good living from it - many musicians you know and perhaps are a fan of have never learned how to read a score.

But you're not going to get a job working for somebody else to produce music, who will expect you to use the lingua franca of music: the score.

If you plan to be the Michael Jackson, Eric Clapton, Jimi Hendrix or Kanye West of software - producing your own thing and expecting others to fit in around you - do your thing.

But if you want to do the equivalent of join a band or an orchestra, well...

The largest employers of software engineers, the highest salaries and the most interesting work right now, all require you to communicate well in English.

The early Ruby community was a self-contained ecosystem conducted entirely in Japanese. It seems to have stumbled along for a few years and only got traction when it became accessible to English speakers.

You can write your own code in any language you want - UTF-8 is widespread and non-Latin character sets are accepted in several language interpreters/compilers/transpilers. You will get work without speaking English, I'm sure.

However it will be a struggle compared to those who know English. It will mean your income is capped unless you become a breakout start (and the odds are stacked against you). It will mean you might not get to reach all of your potential if you're treating this as a career.

It's your choice, nobody will force you, but the benefits of knowing English are considerable, not just for this career but in business in general.

I think this is not the best analogy. You can still understand music and learn from other musicians and play together even though neither of you can sight read. But any non-trivial piece of code is textual communication and you will simply not be able to make heads or tails of it if you don't know the language.
You're assuming the code is the most important part of producing software.

Frequently it's the communication within the team, the documentation and the third-parties you will deal with.

You can be a rockstar on your own without English. You can't be a team player and expect to do well without English. That was my point.

I'm not going to argue whether code is the most important or not, but I will claim that if you cannot write working code you are not a developer. And if you cannot use the standard library of your language, then you cannot even get to hello world. It doesn't matter how good you are at communicating then.

You can perhaps be a "rockstar" in a very specific niche e.g. scripting or customizing inside some vertical platform which is fully localized. Those do exist. But show me the mainstream language where the standard library API have been translated to a non-English language.

Another example might be working completely without third-party libraries. Again this would be possible but a very niche scenario in this day and age.

You're arguing over something I did not say.
99% of the people who play in bands have no idea how to read a score, let alone sight read.
I don't think this is true - in my experience almost all guitar players, for example, can read tab and I've played with many who can read scores and sight-read to a degree; OTOH, I've only played with very few who were good enough to do everything by ear. For one thing, not being able to read any kind of material (tab / scores / chord progression) means you can't play unknown songs without making a bunch of mistakes. Further, while tab doesn't really convey accurately a piece of music, a score (with all notes written note) can very precisely. There is a huge advantage in being able to sight-read a musical score, and no disadvantage at all by having this ability, so why not learn?
This is false. Reading tabs counts for something and people generally get some kind of musical education albeit at an early age. Sight reading (the strict definition) is irrelevant to the analogy.
If they want to get hired for playing with someone else they still need to communicate using a common language with those they are working with. For someone asked to be a guitarist on a tour that’s likely a combination of verbal communication, sheets with tabs or chords etc. I’d say most people playing claviature in bands probably read musical notation, but guitarists, drummers etc just don’t have the same need (so many pop/rock acts simply have no need).

The thing with notation in scores is that it’s nearly a complete mysucal description; someone given a score could play in a orchestra without sharing any other language.

For programming there is no other way of communicating than a shared verbal language. A team can easily use any language but it needs to be a common language.

Tooling and documentation will also most likely be in English. So while it’s possible in some parts of the world to software development without knowing English, it’s clearly a handicap.

We use English for communication even though we have another shared first language.

Right. I've played in bands and produced a couple of records, and while I used to write score for programming music into a sequencer app, I've never used it to communicate with any musician I've worked with. At most you write down the the chords to a song. Outside of Jazz and Classical it appears that everyone is playing by ear.
Cutting-edge technology might be hard to learn without English. With more conservative technologies it should be possible. I know developers who's not fluent in English and prefers local resources whenever possible, so it's definitely not a prerequisite.
English required to be a software engineer? Of course not. But it helps a lot to understand many resources online and it benefits everyone if you can contribute to a larger community (asking/answering stackoverflow posts, using/creating open source software, etc.).
Some languages (for exemple Golang) allow you to use any utf8 symbols in your code, so you can name your variables in Russian, for example - https://play.golang.org/p/oWs6mc-JOpI

There is a russian platform 1C:Enterprise that has it's own scripting language that uses syntax similar to Visual Basic and Cyrillic characters too.

You can develop your own language that can allow you to write in Church Slavonic if you wish so: https://ic.pics.livejournal.com/ibigdan/8161099/4947638/4947...

But the thing is - we write in english because it's a defacto standart right now.

Is it a prerequisite for being a software engineer? No. Is it a prerequisite for when you decide to work with an international team or contribute to an opensource project? Pretty much yeah.

Ugh, I worked in a code base that had a lot of Cyrillic characters and the code base got moved to our (English language) team. It was difficult to work out what was going on and with a lot of Google translate we ended up with an English code base. Another interesting thing that happened once was that a German team had a comment with an umlaut in it that would crash certain code/text editors. It took them a long time to figure out what was happening.
There's loads of non-English documentation, open source and otherwise. The quality is usually not bad. Like everyone says, many languages let you put Unicode in identifiers. I've never actually seen anyone do that. I've seen Unicode in comments, or foreign words romanized to [A-Za-z] for identifiers.

For a high-end customer-facing role involving complex business logic, you probably need something close to native ability. I've seen (and hired) lots of developers with B2 or worse English doing mathematical stuff. Their language skills were an impediment, but not a serious one.

Yes, knowing English enough to read/understand the latest books in your field and being able to look up solutions online is absolutely necessary.

While I don't recommend it, you can definitely use Japanese and Cyrillic characters in Unicode compatible languages. There are people out there translating docs of popular libraries. Heck, even 3rd rate Blender books get translated into Japanese but they rarely make it into stores before the version used is already out of date.

I don't have any numbers, but I'm inclined to claim that in any reasonably large economy there's tons of software engineering (or maybe programmer) jobs where you will never touch anything "latest" :)

In Germany there are quite some developers whose English is very basic (very often older than 40 or 50) and especially those who grew up in the East (some or most had Russian in school and not English). I mean, usually it's not -zero- but really basic on a reading level, even less writing. I'm not in any way saying they're bad at what they do - if you work in some fields you can absolutely get by just sticking to German variable names (or guesswork English) and those 50 keywords of your language aren't usually a problem. For looking stuff up online there's google translate.

On the other hand I would not -advise- against trying to be the best at English that you can, because if you happen to need to read some complicated stuff like advanced books or papers.. Let's just say I wouldn't look forward to reading even anything medium-level in another language where I only have basic proficiency...

Fun fact: I've actually seen one codebase where all the domain knowledge was German and everything "normal" was English - and it was the right thing to do. Was an application for a bank and they had a technical Glossary with obscure financial technical terms where a) the meaning might get lost in the translation and b) not even the domain experts would know them off the back of the hand. Also the chance you'll have international people working on this intra-country level stuff was deemed very slim. Not sure if the bank got bought by an int'l one later though :P

You actually describe my day job pretty accurately. SAP based legacy systems where everything from system variables to customer codebase is this weird mix of English and German. Strict project guidelines and code review sessions can only catch part of this mess before it's rolled into production.

We have junior devs come and go that simply look problems up online, because they are able to translate their questions into proper English, that the senior German-only devs would spend days trying to work out by themselves. Or they somehow find the same solutions online but can't make sense of what Google Translate spits out for them. It's equally hilarious and sad to see a junior dev being used as a seniors LetMeGoogleThatForYou.

Yes, you can write code in different langugages and alphabets, in most modern programming language, but you shouldn’t. If you do open source, then using Albanian variable names will limit the amount of people able to contribute and utilise your project. For inhouse code, you restrict you employer to hiring within a limitted pool of candidates. If you’re in China or Japan that might not matter, in the EU that’s just hurting your business.

I know that many will say that English isn’t required, but I can’t imagine how hard I would make my job if I only spoke Danish. The ability to read almost any English text is In my mind an absolute must en the field of computers and software, you simply can’t keep up otherwise.

I am not a native English speaker and a professional developer. My advice is get good at English and write your software in English.

Not only is all technical documentation in English and speaking English will give you access to the whole world in terms of jobs. But software in general is better written in English. English has well-established and broadly shared naming conventions other languages simply do not have.

Occasionally I see software written in Danish and generally it is a mess. How do you break words? What do you name collections? What about the terms that are used to structure the overall application (service, repository, factory etc.)? Is it Leveringsadresse, LeveringsAdresse, LeveringAdresse? Or what about leveringsadresser, leveringsadresseListe or maybe leveringAdresseList?

While the corresponding naming in English is clear to any programmer: DeliveryAddress, deliveryAddresses.

There seems to be a burgeoning Chinese open source community with many go projects and a few rust projects. They don't always translate things to English.
I can tell that things became muuuuch easier as soon as I was able to switch from Russian to English while looking for docs and help. There are simply so much more information on various topics. I dunno about Chinese though, with more than 1 billion people the community might be at least as vibrant as English speaking one.