Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Crossing the Language Divide in Open Source Pro...

Crossing the Language Divide in Open Source Projects

In The Hitchhikers’s Guide to the Galaxy, the Babel Fish is a universal translator. By allowing all beings to communicate regardless of language, it ‘neatly crosses the language divide between any species’. Most programming languages are designed for English speakers, and most open source projects require some familiarity with English. How do we create a multilingual programming language and a multilingual open source community, allowing developers who only speak English to collaborate on open-source projects with developers who don't speak English at all?

Aditya Mukerjee

September 15, 2016
Tweet

More Decks by Aditya Mukerjee

Other Decks in Programming

Transcript

  1. •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
  2. •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
  3. 95% of the world doesn’t speak English as their first

    language 89% of the world doesn't speak English at all @chimeracoder
  4. •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
  5. ...and yet •Only 10% of the world's programmers live in

    China •Only 1.4% of StackOverflow visits come from China @chimeracoder
  6. 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
  7. “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
  8. package main import "fmt" func main() { if true {

    fmt.Printf(“hello, world!\n") } } @chimeracoder
  9. 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
  10. 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 বই, বা ক াইলার িনমাণ স েক ায় কােনা পাঠ পু ক পরামশ. র লার এ ে শন িবন ােসর এক সংি ব াখ া নীেচ. আরও তথ এবং এক মৃদু মা ার উপ াপনার জন , র লার এ ে শন বে র সে পরামশ.
  11. 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.
  12. 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.
  13. •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
  14. 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
  15. 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
  16. Localizing Live Events •Live interpretation •Live stenography can assist non-native

    speakers • StenoKnightCART • White Coat Captioning @chimeracoder
  17. Localizing Mailing Lists •Encourage people to write in their native

    languages •Provide archive links with community translations @chimeracoder
  18. •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