At Oedo Ruby Kaigi 04, Leonard Chin gave a presentation entitled "How to Survive and Thrive as an Engineer in a Foreign Land". Although the presentation is for a Japanese audience, it is based on his experience of working in Japan as an Australian, so it's a good talk if you want to work as a programmer in Japan as well.
The presentation was in Japanese, so I'll summarize the key points.
Working abroad is hard
Lot's of Japanese engineers say they want to work abroad, but few actually do, because working in a foreign country is hard. The two biggest hurdles are learning the language and getting a job.
Learning the language
Although living in Japan will help you learn Japanese, living here alone isn't enough to become a fluent speaker of the language. Similarly, dating a Japanese person can help, but also isn't enough. Another common trap is hanging out with friends who speak your own language; it's better to avoid this if you want to improve at Japanese.
Attending a Japanese language school will help you get the basics of the language, but it is costly, and once you move beyond the basics, has diminishing returns. Taking a Japanese language exam works to help you set a goal, but the exam itself isn't worth anything, and often the content isn't useful Japanese. In the end, there isn't any trick to learning a language, it's just lots and lots of practice.
Getting a job
A prerequiste of getting a job in a foreign country is that you are already a skilled developer.
For finding a job, sites that target bilingual people, such as Daijob or GaijinPot have the advantage that employers are explicitly looking for bilingual people. On the other hand, they have only a small job pool, and the companies that do use them tend to be multinational companies, as opposed to local ones.
Local job sites like リクルート or マイナビ have a wide range of positions available at local companies. However, the companies aren't expecting non-Japanese to apply, so you might run in to issues because the companies won't know how to deal with you.
The best way to find a job is the same as anywhere: network with the local community. In his case, he started by attending one of the many Ruby on Rails events in Japan, Rails勉強会@東京. From his participation in that event, he found out that Ruby Kaigi (Japan's largest Ruby conference) was looking for English speakers to help out, so he volunteered. Through his connections to the local Ruby community, he was able to get a great job.
Thriving as an Engineer
Speaking the language and getting a job is enough to survive as a developer in a foreign country, but not enough to thrive. To thrive, you need to learn the culture, which means answering:
- What does that crazy slang mean?
- What jokes are funny?
- Where does that image / reference come from?
- What do engineers like to talk about?
Fortunately, developers live on the internet, so it is easy to find this culture. Sites like 2ちゃんねる, togetter, bokete.jp, and ニコニコ動画 are great places to start. When you encounter a meme on those sites, don't dismiss it as stupid just because it is different; instead, try to enjoy it. When you come across cultural reference you don't get, google it to figure out what it means, and then embrace it as your own.
The video itself
The video is in Japanese, but the slides are mostly in English, so watching it is a good opportunity to practice listening to Japanese. Also, if you are Japanese and wanting to work outside of Japan, it covers how you can learn western developer culture from reddit (which I don't talk about in this post).