Muranaga's Golf

46歳でゴルフを始めて10数年。シニアゴルファーが上達をめざして苦労する日々をつづります

村上憲郎 Google 副社長(グーグル日本法人社長)によるソフトウェア技術者育成に関する講演を聴く

グーグル日本法人の社長に辻野晃一郎氏が就任するが、先日、現社長で Google 本社副社長である村上憲郎氏による Google の人材採用・育成についての講演を聴く機会があった。日本のコンピュータ・サイエンス教育・人材育成については、僕も共鳴する部分が多かったので、その要旨を簡単にまとめておく。

よく知られているように Google のミッション・理念は「世界中の情報を整理して世界中の人が使えるようにする」ことである。ユーザには無償でサービスを提供し、収入は広告から得る。これを支えるのが「技術」。シンプルにこのミッションとビジネスモデルが全世界にいる2万人の従業員に共有されていることが Google の強みである。

Google は世界最大規模のコンピューティング基盤を有し、その上でさまざまなコンピュータ・サイエンス(computer science)の技術開発を行っている。自然言語処理やアプリケーションが話題になることが多いが、基盤となるシステムソフトウェアの技術(たとえば OS のカーネルや、言語処理系・コンパイラなど)がしっかりしていることを忘れてはならない。スケーラビリティのあるクラウド・コンピューティング環境があるため、Web アプリケーションを開発すると即座に大規模に展開できるようになっている。世界最大のコンピューティング基盤があるから、そこに最大の技術課題があり、だから優秀な技術者が集まってくる。

Google の流儀は「まず始める」こと。大切なことは、間違いがあればそれを認めてすぐに修正することである。よく知られている「20% ルール」に基づき、ボトムアップでプロジェクトが開始される。プロジェクトは数人のチームで仕事をする。集団の方が個人より優れた判断ができるという理由に基づいている。

Google らしさ」は、次のようなことばで表わされる: Clarity(目標を明瞭に言い、他人の協力を得る)、Transparency (ソースコード、アイディアすべてを公開・共有)、Democracy (総意を大事に)、Facilitate(他人が仕事をやり易いように障害を取り除く)、Lend a Hand、Respect(白熱した議論はするが、個人攻撃はしない)、Initiate(自ら正す、責任を持って実行する)、Iterate(最初から完璧を期すのではなく、繰り返して改善していく)、Scrappy(肝を据えてやる、今使えるものを使い、安く効率的に)、Party(周囲の人を楽しませる)、Celebrate(地味・泥臭い仕事にも光を当てる)、Passion(世界を変えられることを忘れない、make the world better)

Google はグローバルに研究開発拠点を持ち、すべてのオフィスは対等である。全世界で一つのエンジニアリングチームを構成し、たまたま自分が住んでいるところに近いオフィスからプロジェクトに参画することになる。(たとえば日本のグーグルの 1/5 は日本国籍ではない。しかしその人たちは日本語を流暢に扱う。)したがって情報共有とコミュニケーションが重要である。ソースコードは完全に共有され、また誰の開発がどこまで進捗しているかもわかるようになっている。大きなプロジェクトでも少人数で行い、メンバー構成は柔軟に変化していく。コアメンバー以外もソースコードに貢献することが多い。メール、チャット、ブログなどあらゆるコミュニケーション手段を活用しているが、最大の課題は時差。深夜・早朝の電話会議も多い。そのため「勤務時間」や「残業」という概念は存在しない。時間ではなく業績に対する対価として給料を支払っている。

業績評価は 360度評価をさまざまなレベルで採用している。マネジャーからの視点だけではなく「本質的な貢献度」が重視される。その評価基準はどの国で採用されても同じである。

その技術者の新卒採用の倍率はとんでもなく高い「狭き門」である。大学院入試の口頭試問のような面接試験では、コンピュータ・サイエンスの基礎を徹底的に聞く。当然、コードも書かせる。理論(theoretical)よりも実装(code)を重視する。

「狭き門」をくぐり抜け、実際にグーグルで働いているエンジニアの感想はたとえば以下の通り:

  • エンジニアが基本的には尊重されている。
  • やった仕事がすぐに世界に出て行くところに意義を感じる。
  • ソフトウェア・ツールがどんどん改善されている。
  • コードレビューが日常的に行われている。自分としては「他人にわかりやすいコード」を書くよう、また「他人のコードを尊重する」よう心がけている。

以上が講演の要旨であるが、さらに Q&A のセッションで日本の学生を採用する上で気にかかっている点、特にソフトウェア人材教育という観点を中心に、下記のような持論を展開された。それには同業者の一人として大いに共感した。

  • 日本のコンピュータ・サイエンス教育は理論に流され過ぎている懸念がある。手が動かない、つまり(論文は書けても)コードが書けない人が多い。
  • 「ソフトウェアは著述業」だということを忘れたのが、日本の IT 教育の失敗かもしれない。ソフトウェア工学のように、工業プロセスで考えたのが失敗。優秀なプログラマー芥川賞作家のようなもの。あるいは美術を教えるのに「デッサン」を教えるような教育が必要なのかもしれない。
  • 旧帝大のコンピュータ・サイエンスの一部では、センター試験をパスしていないても優秀なコードを書く人間を入学させて鍛えるようなことがあってもよいのではないか。学力試験をパスしないがために専門学校に行き、好きなプログラムを書いていた人間が、日本のゲームソフトを優秀なものにしたのかもしれない。
  • そういった意味では経産省「未踏」プロジェクトは評価する。その一方で、「情報大航海」プロジェクトがアプリケーション系に行ってしまったのは残念である。日本は国をあげて「クラウド・コンピューティングの基盤作り」に取り組むべきである。全世界で5つしかコンピュータは残らないと、Sun の CTO が言ったことがあるが、そこに現在名乗りを上げているのは GoogleAmazonIBM、HP、...。日本勢はいない。
  • 日本の英語教育の最大の問題は、大学を出ても英語を話せないことである。
    • Google Japan では英語を採用基準から外した(そうしないと優秀な技術者を採用することができない)。このことを Google 本社に説明して承認を得たが、その時に Google 幹部から言われたことは「わかった。だが日本はこれからどうやってグローバルでやっていくつもりなのか?」
    • 「英語は知力ではなく体力。」入社したら英語を鍛えるブートキャンプに放り込む。
  • 日米の大学教育の違い:
    • 学部生(undergraduates) は訓練生。わかり易く教え、かつ徹底的に鍛える。
    • 理系では、できるだけ早く複雑なコンセプトにたどり着けるよう、そのためのツールをいかに早い段階で教えるかが大切。たとえば量子力学にたどり着けるよう、線形代数偏微分方程式ハミルトニアンをどんどん教える。
    • そのための教科書の分厚いこと!懇切丁寧な説明があり、演習問題を数多く解かせる。
    • MIT などの講義はオープンコースウェア化されており、YouTube で全部見られるし、好きなものを選んで学習できる。
    • 学部生を訓練するのは、大学が「サービス業」である証。

コンピュータ・サイエンスでは、理論だけでなく実践も重視する。これは僕が訪問研究員として滞在したカーネギーメロン大学(Carnegie Mellon)の School of Computer Science でも徹底されていた。そこでは Mach という分散 OS のカーネルのコードを誰もが読むことができ、またそれを研究用にどんどん拡張することが奨励されていた。僕の入った研究室でも、Mach カーネルの上に作られた分散ファイルシステムAFS)をモバイル用に拡張していた。

ちなみに日本では、情報工学系の大学でありながら、コードをほとんど書かずに卒業できてしまうところがチラホラ出てきていると聞く。情報系の人間にとってプログラミングは「自己表現の手段」に他ならない。それを教えないなんて…。論外としか言いようがない。