英語で読む「Google のソフトウェアエンジニアリング」

Posted on 2018-01-01(月) in Software Engineering

Google にて10年以上ソフトウェアエンジニアとして働き、現在は最近では text-to-speech の研究に従事しているFergus Henderson氏による

Software Engineering at Google

という記事。Google のソフトウェアエンジニアリングのプロセスや文化が簡単にまとまっていて参考になる点も多いと思います。主要なポイントを簡単にまとめると:

  • 単一の巨大なリポジトリ。どのエンジニアでも(検索ランキングやセキュリティなどに関わる重要な部分を除き)自由にチェックアウトしてコードが読める。
  • 分散ビルドシステム Blaze (100〜1000台のサーバーで分散ビルド・テスト) キャッシュにより高速なコンパイルを実現。
  • 厳格なコードレビュー文化。メインのリポジトリにコミットするコードは必ずコードレビューを経なければいけない。
  • ユニットテスト、負荷テスト。
  • スタイルガイド、5つの公式言語(C++, Java, Python, Go, JavaScript)のサポート。
  • 頻繁なリリース(1,2週間ペース) リリースの自動化、ステージング環境における本番トラフィックを使った統合テスト。
  • リリース承認プロセス・ツール。
  • ポストモーテム:大きな障害が起きた時に書く文書。影響(クエリ数や経済的損失)、再発防止策などを書く。
  • 数年ごとにソフトウェアの書き直し。
  • 20%タイム。
  • OKR (Objective Key Results):年・四半期単位の具体的目標。目標は高く (平均して65%程度の達成率を目指すように) 設定する。
  • 役職 (Engineering Manager, Tech Lead) 技術キャリアと管理職キャリアの区別。研究者もエンジニアも研究して論文を書ける。
  • "Codelabs" によるエンジニアの研修。メンターの割り当て。
  • 素晴らしい働きをした同僚に会社負担で $100 を贈れる「ピアボーナス」制度。金銭ボーナス無しの賞賛「kudos」制度。
  • 委員会による昇進審議。低い業績の場合は業績改善計画 (PIP) の実施。

英語は割と平易で読みやすいと思います。

Post-mortem, OKR, 20% time, Peer Bonus など、色々な用語が含まれていますが、私が働いている Duolingo をはじめ、 他のアメリカのテック系の会社でも採用しているところも多いのではないでしょうか。テックニュース等で聞くことも多いので知っておいて損はないかと思います。

以下、本記事を読むにあたってキーとなる英単語・フレーズとその日本語訳を取り上げます。 意味が難しくても、一般に記事や論文などにあまり出てこない表現や、単に辞書を引けばわかるようなものはあえて取り上げていません。

英語 日本語
practice (この場合は「実行」「やり方」などの意味に近い)
feasible 実現可能な
declarative 宣言的な
as (someone) see fit 自らの判断で
cherry-pick 好きなものだけを選ぶ
post-mortem 検死、システム障害後の検証
burn out 燃え尽きる
appraisal 査定
have the final say 最終決定権がある
controversial 賛否両論ある
kudos 賞賛
termination 解雇