GDD2010:Google エンジニアの日常

Google エンジニアの日常
山内 知昭

山内さん
  • Googleのソフトウェアエンジニア
  • 2年前に入社
  • Web検索関連の仕事をやってる。
どんな仕事してるの?
  • 仕事の種類
    • SWE(Software Engineer)
      • Googleの製品・サービスを作る人
    • PM(Product Manager)
    • SRE(Site Reliability Engineer)
      • Googleのサービスを動かし続けている人
    • Ops(Operations ?)
      • 社内サービス開発する人
    • エンジニアが発想、設計、実装、launch
      • 最初から最後まで関わる。
どんなマシンを使っているの?
  • 占有マシン
    • ラップトップ
    • デスクトップ
      • データセンター上のVirtual Workstationを換わりに持っている人もいる。
      • 大きなディスプレイ:30インチが標準
  • 共有
    • 世界中のデータセンターを使える。ほんとに使える。
ソースコード
  • 基本的に全世界・全プロジェクト共通のリポジトリ
    • VCSコマンドを直接実行することは少ない。
    • さまざまなラッパーや補助システムがある。
  • コードレビューが必須。
  • かなり徹底していて、機能実装レビューだけでなく、言語として正しいかのレビューもある。
  • OpenSourceは管理が別
データ
  • ホームを含む様々なディレクトリがNFS
  • どの端末でも同じホームで作業できる。
  • どの端末でも同じコマンドが実行できる。
  • ジョブの入出力などの大容量データはGFS
ビルド
  • ビルドは内製のビルドツールがある。
    • 自動的に分散ビルド・分散テスト
ジョブ実行
  • 世界中のデータセンターの計算クラスタが自由に使える。
  • クォータの制限はあるが、かなり大きい
  • 同じバイナリをローカルでも実行可能
    • テスト実行で便利
  • 他のプロジェクトの生成ファイルにもアクセスできる。
    • 中間処理の終わったWebページなど、アノテーションのついてるWebデータを使ったりできる。
    • 前処理で思い処理をスキップして、自分のやりたいことに使えたりする。
仕事の進め方
  • 体制
    • 世界中から開発に参加
    • ロダクト単位のコアチームの構成
      • ある程度地理的な配置を考慮。
      • VCでつないでチームミーティング
      • 時差があるとさすがにしんどい
    • 個々のプロジェクトは少人数(1〜数人)
      • FtoFコミュニケーションは重要
      • 必要に応じて出張して開発
      • メール中心で、チャットを使う人もいる。
      • グループウェア(カレンダー、バグトラッカー)
  • 英語です
    • 日本人同士なら日本語で話すが、読み書きは英語です。
    • ダメな英語でも許してくれます。
    • 話すのはともかく、聞けないとしんどい。
ローンチプロセス
  • 確認項目
    • クオリティ
    • インパクトは十分か
    • セキュリティ
    • リソースは足りてるか
    • メンテナンスできるか
    • 法律に違反してないか
    • 関連チームへの確認
    • などなど
  • エンジニアが主体的に関わっていく範囲は広い
個人と組織
  • 好きな仕事ができてるか?
    • 半分Yesで半分No
  • Noの理由
    • アメンバーになるには、コアチームがいないとしんどい
    • 他のエンジニアのサポートがないとしんどい
  • Yesの理由
    • 20% Projectなら比較的自由にプロジェクトを選べる
    • Full-time projectでも課題発見・解決は最良の範囲
    • 親切な人や使えるリソースが多い
仕事以外の職場環境
  • オフィスに来るのが楽しくなる仕掛け
    • 食事、お菓子や飲み物が無料
    • オフィスデコレーション、遊具、マッサージ
    • 各種クラブ(カメラやグルメ、スポーツ、ダンス・・・)
      • Google日本だけで55のクラブ活動があるそうです。
  • チームの絆を深める仕掛け
    • 仕事中のおしゃべりはOK。休憩自由
    • 各種イベント、オンサイト・オフサイトミーティング
ワークライフバランス
  • 仕事時間の裁量は自由度が高い
    • 海外とやりとりすることがあると、朝早く、夜遅くにシフトしてる人もいる
  • 有給のほかに疾病休暇もあるので、
    • もしものために有給を残しておくとかの心配はいらない
  • 1週間まとめて休んで家族旅行とか普通。
  • 父親は育休(4週間)とれる。
  • 休みは取りやすい雰囲気です。
採用活動
  • エンジニアの採用は、エンジニアの大事な仕事
  • エンジニアが見て、「これは!」と思えば、面接へ。
  • 電話面接。オンサイト面接
    • 人事や管理職ではなく、現場のエンジニアが面接。
    • ホワイトボードにコードを書くことも。
    • 面接官は合否の判断と、その客観的理由をレポートする。
  • 必要なもの
    • 英語はできないと入った後しんどい
      • 山内さんはあまりできなかったが、入社2週間後には海外で仕事させられた。慣れない英語でなんとかサバイバルしていかないといけなかった。
    • 技術
      • さまざまな分野を知ってるほうがいい
      • CPUの仕組みからソフトウェアデザインまで
      • 表層的でない理解がもとめられる「なぜそうなのか?」
    • 人に指示する力ではなく、自分で作れる力を重視
    • きれいなコードを素早く書けること。
山内さんのケーススタディ
  • 文学部から工学部に変えた。
    • 大学院に行かずに就職
    • プログラミングは21歳から。
  • SIerに就職、2つ会社を経験
  • Googleの募集をWebで見て、レジュメを送った。
    • 1次面接受かって、2次にカリフォルニアで面接
    • 最初は落ちた。
  • 1年後、再度応募して、今度は受かる。
他の会社と違うところ
  • どのオフィスに所属しても、エンジニアとしては対等
    • 時差や規模などがハンディではない
  • エンジニアがエンジニアを評価する。
    • 採用でも人事評価でも。
  • リソースが多い
    • 世界中のデータセンターを実際に使える。何テラを自由に使えるのはすごいところ
    • 全コードが同じリポジトリなので、他のプロジェクトのコードもすぐに使える。
    • さらに、それを作った人にすぐに聞ける。
    • 物理的なものだけでなく、人的リソースも多い。