Slide 1

Slide 1 text

Crossing the Language Divide in Open Source Projects Aditya Mukerjee Risk Engineer at Stripe @chimeracoder

Slide 2

Slide 2 text

•We write open-source software because we want to have an impact •We want to solve big problems •We want to change the world @chimeracoder

Slide 3

Slide 3 text

•Basic rule of product development: understand the end users •The people best equipped to find and solve problems are the ones who experience them @chimeracoder

Slide 4

Slide 4 text

95% of the world doesn’t speak English as their first language 89% of the world doesn't speak English at all @chimeracoder

Slide 5

Slide 5 text

•Reading code requires proficiency in English •Most error messages are not localized •Project documentation is only available in English •Community Meetups and conferences are English-only •Participating in mailing lists requires knowledge of English @chimeracoder

Slide 6

Slide 6 text

@chimeracoder

Slide 7

Slide 7 text

...and yet •Only 10% of the world's programmers live in China •Only 1.4% of StackOverflow visits come from China @chimeracoder

Slide 8

Slide 8 text

Where would the other 86% of programmers in China go?

Slide 9

Slide 9 text

@chimeracoder

Slide 10

Slide 10 text

@chimeracoder

Slide 11

Slide 11 text

@chimeracoder

Slide 12

Slide 12 text

How do we defragment open-source communities?

Slide 13

Slide 13 text

Why not use a lingua franca? •English is difficult to learn •A lingua franca doesn’t eliminate language barriers •Languages evolve. Even if we tried to restrict them, we couldn't •Embrace multilingual workflows instead of fighting an uphill battle @chimeracoder

Slide 14

Slide 14 text

Making Code Multilingual

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

“I would have thought it would be useful to NATO, because they had the common verbs for the things they were going to do. And the nouns, they’d just have to have a dictionary for things they were referring to for inventory control…. They’d have common nouns throughout NATO, and they could make a dictionary of common verbs and translate the program. You could write one in English and you could translate it and it could go to [the other language]. No problem, you’d have communication. It would be a limited vocabulary.” - Grace Hopper @chimeracoder

Slide 17

Slide 17 text

package main import "fmt" func main() { if true { fmt.Printf(“hello, world!\n") } } @chimeracoder

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

@chimeracoder

Slide 20

Slide 20 text

gofmt korofmt @chimeracoder

Slide 21

Slide 21 text

Automatic source code translation •Bidirectional translation layers •Localize source code as a commit hook @chimeracoder

Slide 22

Slide 22 text

Structuring Code

Slide 23

Slide 23 text

Naming Schemes GetFoo() SetFoo() Build() to_foo Fooপড়() Foo লখ() (etc.) … @chimeracoder

Slide 24

Slide 24 text

Translation and Interpretation

Slide 25

Slide 25 text

Automatic Translation?

Slide 26

Slide 26 text

The secret of automated translation…. •We don't have to bridge all communication between two arbitrary languages •We just have to bridge communication in a specific context between two languages @chimeracoder

Slide 27

Slide 27 text

A regular expression (or RE) specifies a set of strings that matches it; the functions in this module let you check if a particular string matches a given regular expression (or if a given regular expression matches a particular string, which comes down to the same thing). Regular expressions can be concatenated to form new regular expressions; if A and B are both regular expressions, then AB is also a regular expression. In general, if a string p matches A and another string q matches B, the string pq will match AB. This holds unless A or B contain low precedence operations; boundary conditions between A and B; or have numbered group references. Thus, complex expressions can easily be constructed from simpler primitive expressions like the ones described here. For details of the theory and implementation of regular expressions, consult the Friedl book referenced above, or almost any textbook about compiler construction. A brief explanation of the format of regular expressions follows. For further information and a gentler presentation, consult the Regular Expression HOWTO. এক র লার এ ে শন, (পুনরায়) ং য িমলেব এক সট িনধারণ করা; এই মিডউল ইন ফাংশান যিদ এক িন দ ং এক দ র লার এ ে শেনর সােথ মলােনা আপিন না পরী া িদন (বা এক দ র লার এ ে শন এক িবেশষ পংি , যা একই িজিনস আেস িনেচ মলােনা). র লার এ ে শন নত ন র লার এ ে শন গঠেনর ঘিনভ ত করা যেত পাের; যিদ A ও B উভয় র লার এ ে শন হয়, তারপর এিব এক র লার এ ে শন. সাধারণভােব, আপিন যিদ এক ং িপ ম াচ সিরেয় অন ং ক ই িব ম াচ, ং PQ এিব ম াচ হেব. এই ঝ িলেত যিদ না A অথবা B কম াধান অপােরশন ধারণ কের; A ও B এর মেধ সীমানা শত; অথবা প রফাের গিণত আেছ. সুতরাং, জ ল এ ে শন সহেজ এখােন বণনা বশী মত সহজ আিদম এ ে শন থেক িনমাণ করা যেত পাের. তT এবং র লার এ ে শন বা বায়ন স েক িব ািরত তেথ র জন , উপের রফাের ড Friedl বই, বা ক াইলার িনমাণ স েক ায় কােনা পাঠ পু ক পরামশ. র লার এ ে শন িবন ােসর এক সংি ব াখ া নীেচ. আরও তথ এবং এক মৃদু মা ার উপ াপনার জন , র লার এ ে শন বে র সে পরামশ.

Slide 28

Slide 28 text

A regular expression (or RE) specifies a set of strings that matches it; the functions in this module let you check if a particular string matches a given regular expression (or if a given regular expression matches a particular string, which comes down to the same thing). Regular expressions can be concatenated to form new regular expressions; if A and B are both regular expressions, then AB is also a regular expression. In general, if a string p matches A and another string q matches B, the string pq will match AB. This holds unless A or B contain low precedence operations; boundary conditions between A and B; or have numbered group references. Thus, complex expressions can easily be constructed from simpler primitive expressions like the ones described here. For details of the theory and implementation of regular expressions, consult the Friedl book referenced above, or almost any textbook about compiler construction. A brief explanation of the format of regular expressions follows. For further information and a gentler presentation, consult the Regular Expression HOWTO. A regular expression (again) to determine a set of strings that matches; This module functions in a particular string matches a given regular expression not only in the day (or a regular expression given a particular string, which comes down to the same thing in a match). Regular expressions can be concatenated to form new regular expressions; If A and B are both regular expressions, then AB is a regular expression. In general, if you are a match for a string P and another string q matches B, the string will match AB PQ. This holds unless A or B contain low precedence operations; Boundary conditions between A and B; Or reference group are numbered. Thus, complex expressions like the ones described here easily can be created from simple primitive expressions. For more information about the theory and implementation of regular expressions, Friedl book referenced above, or almost any textbook about compiler construction advice. Below is a brief explanation of the format of regular expressions. For further information and a gentler presentation, consult the article regular expressions.

Slide 29

Slide 29 text

A regular expression (or RE) specifies a set of strings that matches it; the functions in this module let you check if a particular string matches a given regular expression (or if a given regular expression matches a particular string, which comes down to the same thing). Regular expressions can be concatenated to form new regular expressions; if A and B are both regular expressions, then AB is also a regular expression. In general, if a string p matches A and another string q matches B, the string pq will match AB. This holds unless A or B contain low precedence operations; boundary conditions between A and B; or have numbered group references. Thus, complex expressions can easily be constructed from simpler primitive expressions like the ones described here. For details of the theory and implementation of regular expressions, consult the Friedl book referenced above, or almost any textbook about compiler construction. A brief explanation of the format of regular expressions follows. For further information and a gentler presentation, consult the Regular Expression HOWTO. A regular expression (re) define a set of strings to match it; This module with a specific function in a given string matches the regular expression (or a regular expression given a special string, which is the same amount of matches). Regular expressions can be concatenated to form new regular expressions; If A and B are both regular expressions, then AB is a regular expression. In general, if you are a match for a string P and another string q matches B, the string will match AB PQ. This is less than the A or B containing low- priority operation; Boundary conditions between A and B; Or they are numbered reference group. Thus, complex expressions described as easily could be constructed from simple primitive expressions. For more information about the theory and implementation of regular expressions, Friedl book referenced above, or almost any textbook about compiler construction advice. Below is a brief explanation of the format of regular expressions. For more information and a gentler presentation, consult the article regular expressions.

Slide 30

Slide 30 text

•Automatic translation is not a substitute •The point is to signal interest to draw other speakers to your project •Growing a multilingual OSS community doesn’t happen overnight • But it doesn’t happen automatically, either – we have to work for it @chimeracoder

Slide 31

Slide 31 text

Community Translations •Actively reach out within your community •We are already looking for ways to get people to contribute to OSS projects •You have to ask @chimeracoder

Slide 32

Slide 32 text

Localizing Error Messages Cannot cast parameter type from type “System.String” to argument type “System.String” The only thing worse than a cryptic error message is a cryptic error message in a foreign language that you can’t understand @chimeracoder

Slide 33

Slide 33 text

Localizing Documentation @chimeracoder

Slide 34

Slide 34 text

Localizing Live Events •Live interpretation •Live stenography can assist non-native speakers • StenoKnightCART • White Coat Captioning @chimeracoder

Slide 35

Slide 35 text

Localizing Mailing Lists •Encourage people to write in their native languages •Provide archive links with community translations @chimeracoder

Slide 36

Slide 36 text

Where do we go from here?

Slide 37

Slide 37 text

•Social change is rarely about building the fanciest use of technology •It's about figuring out the right way to improve and mobilize the technologies we already have •And it's about actually committing ourselves to doing it @chimeracoder

Slide 38

Slide 38 text

Aditya Mukerjee @chimeracoder https://github.com/ChimeraCoder