Philip Guo (Phil Guo, Philip J. Guo, Philip Jia Guo, pgbovine)

Non-Native English Speakers Learning Computer Programming: Barriers, Desires, and Design Opportunities

research paper summary
Non-Native English Speakers Learning Computer Programming: Barriers, Desires, and Design Opportunities. Philip J. Guo. ACM Conference on Human Factors in Computing Systems (CHI), 2018.
People from nearly every country are now learning computer programming, yet the majority of programming languages, libraries, documentation, and instructional materials are in English. What barriers do non-native English speakers face when learning from English-based resources? What desires do they have for improving instructional materials? We investigate these questions by deploying a survey to a programming education website and analyzing 840 responses spanning 86 countries and 74 native languages. We found that non-native English speakers faced barriers with reading instructional materials, technical communication, reading and writing code, and simultaneously learning English and programming. They wanted instructional materials to use simplified English without culturally-specific slang, to use more visuals and multimedia, to use more culturally-agnostic code examples, and to embed inline dictionaries. Programming also motivated some to learn English better and helped clarify logical thinking about natural languages. Based on these findings, we recommend learner-centered design improvements to programming-related instructional resources and tools to make them more accessible to people around the world.
@inproceedings{GuoCHI2018,
 author = {Guo, Philip J.},
 title = {Non-Native English Speakers Learning Computer Programming: Barriers, Desires, and Design Opportunities},
 booktitle = {Proceedings of the 2018 CHI Conference on Human Factors in Computing Systems},
 series = {CHI '18},
 year = {2018},
 isbn = {978-1-4503-5620-6},
 location = {Montreal QC, Canada},
 pages = {396:1--396:14},
 articleno = {396},
 numpages = {14},
 url = {http://doi.acm.org/10.1145/3173574.3173970},
 doi = {10.1145/3173574.3173970},
 acmid = {3173970},
 publisher = {ACM},
 address = {New York, NY, USA},
 keywords = {learning programming, non-native english speakers},
}

English is the international language of programming: the most popular programming languages, technical documentation, code examples, libraries, APIs, textbooks, MOOCs, Q&A sites (e.g., Stack Overflow), and other learning resources are in English. Yet 95% of the world's population does not speak English as their native language. What barriers do non-native English speakers face when learning to code? And what desires do they have for improving instructional materials to meet their needs?

I've been curious about this question for many years now, and recently I became well-positioned to look into it. My Python Tutor educational website has attracted an international user base with over 3.5 million total users from over 180 countries. Here's a map from April 2018 showing user distributions by country:

Also, a general user survey I've been running on the site (~2,000 respondents so far) shows that approximately half the visitors self-report not being fully fluent in English:

Those numbers gave me the motivation to put up a specialized survey on the site in 2017 to investigate the impact of native language on people's learning experiences. My survey asked non-native English speakers to describe their own difficulties when learning to code along with their desires for improving instructional materials; to get a complementary perspective, it also asked native English speakers to report on any difficulties they've observed their non-native English speaking peers facing.

840 people from 86 countries responded to this particular survey. 22% of respondents were native English speakers, and the rest collectively reported 73 different native languages; Spanish, Chinese, French, Russian, and Portuguese were the most common. Here's what I learned from them:

Barriers faced by non-native English speakers

1. Problems with Reading Instructional Materials

English reading comprehension is a perennial challenge for non-native speakers, but the technical jargon associated with programming compounds this problem. For instance, a native French speaker reported, “The technical vocabulary linked to programming can be complicated to assimilate, especially in the middle of explanatory sentences if you don't know the equivalent word in your native language. Sometime [sic] a single technical word can blur the meaning of an entire sentence.”

2. Problems with Technical Communication

Both native and non-native English speakers reported that non-native speakers had more trouble with speaking and listening (in addition to reading), which likely inhibited their learning. “Speaking” also extends to speaking to machines: It was hard for some non-native speakers to properly formulate technical search queries to look for help online. For instance, a native German speaker wrote, “Especially difficult I'd say is finding the right way to enter your questions into Google to find the answer you're looking for when you're probing a special [sic] problem.”

3. Problems with Reading Code

Non-native English speakers also had trouble understanding source code since programming language keywords and even variable names are all English-based. Style guides for popular programming languages and APIs mandate the use of English, often mixing technical jargon and abbreviated words. For instance, Apple's Cocoa coding guidelines for library API naming recommends long English function names that resemble sentences, such as: (void)setAcceptsGlyphInfo:(BOOL)flag;

4. Problems with Writing Code

Although the underlying logic of coding is language-agnostic, non-native English speakers had trouble writing idiomatic code identifier names, comments, and strings for textual program outputs such as status logs and error messages. This is especially challenging in English-speaking work environments since code serves as a form of written communication with one's co-workers.

5. Hard to Simultaneously Learn English+Programming

Finally, non-native English speakers had trouble simultaneously trying to learn English while learning to code. A native Zulu speaker wrote, “My low level of English fluency badly affected my learning of a programming language at the beginning. I had to put an extra effort [sic] to improve my English in order to comfortable learn programming languages.”

Learner Desires and Design Opportunities

Non-native English speakers also reported the following desires for improving instructional materials, which may inspire the design of future learning technologies:

  • Use simplified English without cultural slang: Programmers often revel in colloquial language and geek-oriented slang, but that can both confuse and alienate learners who are not familiar with those references. Stick to Simple English and minimize unnecessary jargon or local slang.
  • Use more examples that are culturally-agnostic: Learners also wanted to see more high-quality code examples that are again free of slang and in-jokes. A native Chinese speaker wrote, “Please don't assume all the cultural and political jokes and celebrity stories used in the programming examples can be understood by all non-native speakers.”
  • Use more visuals and multimedia: A picture is worth how many words?!? Diagrams are even more important for helping complex technical concepts transcend specific languages.
  • Integrate inline dictionaries: Learners wanted specialized dictionaries for coding terms that are embedded directly within their code editors or instructional materials. They currently need to frequently resort to web searches to grok unfamiliar terms (like “grok”). Aside from interrupting their workflow, they also had trouble phrasing search queries (see the German learner's anecdote above). On a related note, it might also be useful to provide inline contextual help to assist programmers in writing idiomatic identifier names and comments in code.
  • Bilingual pair programming: One potential way to simultaneously improve English and programming skills is to engage in pair programming sessions with native English speakers. To facilitate this kind of interaction, in October 2017 I launched a public live help request feature on Python Tutor where anyone can volunteer to engage in real-time pair programming with people who requested help on the site. As of April 2018, people from 107 countries have engaged in over 3,100 live help sessions that have spanned multiple countries. Here's a hairball diagram showing a link between two locations if people from there have ever connected in a multi-country pair programming session on Python Tutor:

In sum, the above ideas point toward a form of universal design whereby thinking hard about a specific user population (here, non-native English speakers) can lead to novel user interfaces and instructional materials that benefit everyone. These designs are probably useful for native English speakers as well!


Read the full paper for details:

Non-Native English Speakers Learning Computer Programming: Barriers, Desires, and Design Opportunities. Philip J. Guo. ACM Conference on Human Factors in Computing Systems (CHI), 2018.
People from nearly every country are now learning computer programming, yet the majority of programming languages, libraries, documentation, and instructional materials are in English. What barriers do non-native English speakers face when learning from English-based resources? What desires do they have for improving instructional materials? We investigate these questions by deploying a survey to a programming education website and analyzing 840 responses spanning 86 countries and 74 native languages. We found that non-native English speakers faced barriers with reading instructional materials, technical communication, reading and writing code, and simultaneously learning English and programming. They wanted instructional materials to use simplified English without culturally-specific slang, to use more visuals and multimedia, to use more culturally-agnostic code examples, and to embed inline dictionaries. Programming also motivated some to learn English better and helped clarify logical thinking about natural languages. Based on these findings, we recommend learner-centered design improvements to programming-related instructional resources and tools to make them more accessible to people around the world.
@inproceedings{GuoCHI2018,
 author = {Guo, Philip J.},
 title = {Non-Native English Speakers Learning Computer Programming: Barriers, Desires, and Design Opportunities},
 booktitle = {Proceedings of the 2018 CHI Conference on Human Factors in Computing Systems},
 series = {CHI '18},
 year = {2018},
 isbn = {978-1-4503-5620-6},
 location = {Montreal QC, Canada},
 pages = {396:1--396:14},
 articleno = {396},
 numpages = {14},
 url = {http://doi.acm.org/10.1145/3173574.3173970},
 doi = {10.1145/3173574.3173970},
 acmid = {3173970},
 publisher = {ACM},
 address = {New York, NY, USA},
 keywords = {learning programming, non-native english speakers},
}
Related pages tagged as computing education:
Related pages tagged as Python Tutor: