北京に4ヶ月住んだ話(Microsoft Research Asia)
海外で働くエンジニア Advent Calendar 12 日目です!
2 年前のことで過去形になって恐縮ですが、北京の Microsoft Research Asia に滞在したときの記録を掘り返してみます。山のように写真を撮ったので、興味のある方はWeb アルバムをご覧ください。なお、僕と同じ立場(インターン)で北京に行った人の記録が Microsoft の中の人のブログにたくさん掲載されています。そちらもあわせてどうぞ。
北京
平日は研究に集中し、週末は疲れを癒しながら、北京市街を中心に様々な史跡を回りました。1 月から 4 月まで滞在したため 2 月の旧正月を体験できました。道端の爆竹、本当にやばいです。死人が出るのも納得の勢い。
同じ年に Microsoft 本社があるアメリカのレドモンドへインターンに行きましたが、あちらは生活圏が基本的に森の中で、頑張ってシアトルに行っても史跡のようなものはあまりなかったため、個人的には北京のほうが楽に、長期的に楽しめる街だと感じました。
とはいえ、日本の綺麗な空気になれていると気になるのが大気汚染。空気が悪い日は空気に色がついており、また、まぶしいはずの太陽がぼんやりとしか見えず容易に直視できたのが印象的でした。空気が最も悪かったのは大気汚染と黄砂が重なった日で、マスクをしないと息がしづらく、マスクをしても自転車で帰宅すると服に砂塵が積もって白くなっていました。
食生活
食生活は、僕は辛いものが苦手なので大丈夫か不安でしたが、実際に行ってみると辛いのは四川料理だけで、たいていの中華料理は美味しく食べられました。
また、日本円で 1,000 円も出せば高級な料理がお腹いっぱい食べられたため、食に関してはこれまでの人生の中で最も贅沢をした期間だったと言えるかもしれません。
言語
Microsoft 社内は英語が公用語ですが、中国人同士では中国語で喋っていました。幸い僕が参加した HCI Group はフランス、イギリス、イタリア、韓国など研究者とインターンが多国籍であり、社内で言葉で苦労することはありませんでした。強いていえば、共同研究者の Sean がアメリカ人ネイティブで、英語が速くて苦労しましたが、よい練習になりました。インターンを通して様々な国の訛りの英語を聞き、自分でも喋り、英語が非常に上達したように思います。
一方で、一歩社外に出るとほとんどまったく英語が通じません。したがって、生き残りに必要な最低限の中国語(挨拶する、店員を呼ぶ、数を数える、タクシーで行き先を伝える、…など)は身につける必要がありました。Microsoft Research Asia は外国人向けの中国語教室を開いてくれたのですが、けっきょく最低限以上は身につきませんでした。
実は、日本人であれば、どうしても通じないときには漢字を書き下してみる手が使えます。渡航してすぐの頃、生活必需品を買い揃える際には、メモ帳と鉛筆を手に店員に話しかけ、何とかやり取りをしたのをよく覚えています。
治安
治安は、生活圏内に関しては非常によかったと思います。北京は、家賃が高いなどの問題があるものの、基本的には政府のお膝元であり、国の成長および自分の将来に期待している人たちが多く、したがって外国人を襲ったり騙したりして犯罪を犯すメリットよりもリスクのほうが大きいのだと、現地の中国人インターンに聞きました。
なお、観光地に行くとぼったくりに遭うのは世界共通です。(ふっかけられたら太贵了!=たいぐえら!と言うのは覚えとくといいです。)
Great Firewall
インターネットは、確かに Facebook や Twitter へのアクセスが遮断されているのですが、Microsoft 社内ではアメリカや日本を通るプロキシがあって実質上何の問題もなくネットを閲覧できました。
さらに社外でも、アメリカのサーバの VPN の内側に接続された無線 LAN アクセスを提供している喫茶店を見つけることができました。これは、店員に英語で話しかけたら教えてくれました。この喫茶店には複数の無線 LAN アクセスポイントが用意してあり、そのうち一つだけがアメリカに繋がっているとのことで、ちょっとしたスパイ気分が味わえました。中国語が話せず英語を話す日本人だから、遠慮なく教えてくれたのかもしれません。
北京の秋葉原相当の場所には、Weibo など北京に本社を持つ IT 業界の会社の社員がよく出入りする、日本でいうところのノマドカフェのような店がいくつもありました。北京でも近年ベンチャー企業を立ち上げる学生が多くなってきているようで、当時の日本のベンチャー界隈よりも活気があるようにさえ見えました。
インターンの内容
インターン決定までの経緯
Microsoft Research Asia は、近年、日本からのインターン生を多く受け入れています。インターンに参加するには、日本 Microsoft の産学連携担当者と連絡を取って現地研究者の紹介を頼む、研究者と直接連絡を取る、といった方法が一般的です。ただ、私の場合は Microsoft Research が日本の大学に研究資金を寄付する産学連携の枠組みMicrosoft CORE (Collaborative Research) プロジェクトの研究代表者となった関係でインターンの機会を与えられました。
研究テーマに関する議論
インターン開始後の一か月間は研究テーマに関する議論を行いました。
当時、Microsoft は人の姿勢情報を安価かつリアルタイムに取得できる Microsoft Kinect の開発を完了し、当該デバイスを使った応用研究に熱心でした。一方、僕はプログラマ向けのユーザインタフェース研究に興味がありました。また、CORE の研究プロジェクトで Kinect を利用する統合開発環境Picode を作りかけていました。そこで、まずは当該プロジェクトをインターン期間中に完了させることを提案しました。
しかしメンターのXiangの反応は芳しいものではなく、「もっとクレイジーなことをしよう」というコメントをもらいました。けっきょく、CORE のプロジェクトは一旦止めて新しい研究を始めることになりました。とはいえ、完全にゼロベースでプロジェクトを立案するのではなく、Xiang の Kinect、私のプログラマ向けユーザインタフェースという二つの興味の接点を探ることになりました。
新規プロジェクト立案のため最初に行ったのは、Kinect を利用するアプリケーションのサーベイです。Kinect for Windows SDK が配布されてしばらく経っていたため、アプリケーションはオンラインで探せば数多く見つかりました。実装の完成度ではなくアイデアベースでアプリケーションを分類することで、どのような Kinect アプリケーションがあるのか把握しました。
次に、Kinect アプリケーションがどのように開発されているのか、Kinect を業務で利用している開発者にアンケートを行いました。結果として、既存の統合開発環境が提供するユーザインタフェース群が Kinect アプリケーション開発においては必ずしも使いやすくないことが判明しました。また、Computer Vision の研究チームに対する聞き取りも行い、同じような問題が、Kinect のみならず一般的な Web カメラを利用するようなインタラクティブな画像処理アプリケーションで生じていることも分かりました。
こうして、研究プロジェクトのゴールが「インタラクティブな画像処理アプリケーション開発のための統合開発環境」の研究開発に定まりました。前述の CORE のプロジェクト Picode は一から統合開発環境を作り直して特定の種類の Kinect アプリケーション開発に最適化するものでした。一方、本研究はインタラクティブなカメラアプリケーションならどんな種類でも開発しやすいよう一般性を持たせることに注力しています。そのため、Visual Studio など既存の文字列ベースの統合開発環境に対して適用可能な機能拡張として実装を行い、プロのソフトウェアエンジニアでも利用できるよう設計することに決めました。
新機能のプロトタイピング
2 か月~ 3 か月目は、定まったゴールに向けて実際に実装する機能についての議論を行い、並行してプロトタイプ実装を進めました。
Xiang はエンドユーザ向けのユーザインタフェースを主に研究してきており、僕はプログラマ向けユーザインタフェース研究をしてきたものの統合開発環境の歴史やソフトウェア工学などには疎かったので、別の協力者が必要なことは明白でした。すなわち、前掲のゴールに向かって研究を行ううえで、どのような機能が既に実現されており、何なら技術的な新規性があるのか、正しく判断するには二人では力不足ということです。
そこで、Xiang がプログラミング言語(PL)の研究を専門とする Systems Research Group のSean McDirmidを紹介してくれました。様々に議論を重ねるうち、この三人で研究を進めることになりました。僕にとって、他分野の研究者との本格的な共同研究はこのときが初めてでした。Xiang は HCI の、Sean は PL の研究歴が長く、二人とも全く異なる視点で意見を述べるのが非常に面白かったです。
企業のインターンシップではメンターがプロジェクトの方向性を強権的に決定するケースも多いと聞きますが、Xiang はあくまで僕をプロジェクトのリーダーとして尊重してくれました。ということは、自由と引き換えに責任を負うということです。僕は三人の議論をリードする役目を担うことになりました。自分より研究歴の長い二人の専門家に対して、負けじと意見を述べ、三人が考える方向性をすり合わせて議論をまとめるように心がけました。
プロトタイプ実装に関しては、当初、自社製品の Visual Studio を拡張することを考えましたが、開発にかけられる時間などの制約があって、よりシンプルな実装であるオープンソースの統合開発環境SharpDevelopをもとにして研究開発を進めることになりました。これらの調査および実装作業は僕が単独で行い、日々の議論の中でメンターと共同研究者の二人にフィードバックしました。
評価実験と論文執筆
3 か月目の末から 4 か月目にかけて、実装の完成度が向上してきたため、評価実験と論文執筆を行いました。評価実験では、Microsoft 社内に多くいるソフトウェアエンジニアに統合開発環境のプロトタイプを実際に使ってもらいました。ソフトウェアエンジニアを対象にした実験が容易な点はソフトウェア開発会社の研究所ならではだったと思います。
最後に、開発した統合開発環境DejaVuに関する研究成果を英文 8 ページのフルペーパーとしてまとめ、ACM の国際会議 UIST 2012 に投稿してインターンを終えました。