仕事でもプライベートでもGoogleのサービスをよく利用しており、タイトルも気になったGoogleのソフトウェアエンジニアリングという書籍を読みました!
いつものように、私が特に勉強になったと思った内容と個人的な感想を、備忘録としてまとめています。
書籍全般
5部25章で構成されており、600ページを超える非常に読み応えのある書籍です!
各章は、先頭に概説が記載されており、末尾に結論と要約が記述されています。また、内容が構造化されているため、自分の興味関心がある内容を見つけやすい構成になっています。
これらを踏まえて、最初に概説・結論・要約に目を通して、より詳しく知りたいと思う箇所を熟読するのが良さそうだと感じました。私もそのようにして読みました!
第1章では、ソフトウェアエンジニアリングの定義とその背景が解説されています。この書籍の「そもそも」が解説されているので、一読しておくと良いと感じました。
第2章では、組織文化について解説されています。心理的安全性についても解説されていたので、成長していたり結果を出していたりする組織では、現在最も大切にされている価値観なのだなと再認識しました。3つの中心的原則は私自身も大切にし続けたいです!
第3章では、品質を作り込む過程がメインで解説されています。基本的な内容が多いこともあり、具体的で仔細な内容をどこまで読むかは、読者が学びたいことに依存すると思います。個人的には、日頃の業務で忙しさにかまけて忘れがちなことなどを思い出す、良いきっかけになったと思っています。
第4章では、Google社内でのツールの詳細やケーススタディなどがたくさん記載されています。読者によって分かれると思いますが、この辺りが非常に参考になる方もいらっしゃると思います。その他の内容も、読者のスキルや背景によって、読みたいところをピックアップして読むのが良さそうです。「ああ確かにな…」と思うことも多く、これからの業務に活きそうです。
第1部 主題
章立て
- 1章 ソフトウェアエンジニアリングとは何か
個人的な要点
- 「プログラミング」はソースコードを作成するタスクであり、「ソフトウェアエンジニアリング」は作成したソースコードをサービスに対する稼働期間中の開発・修正・保守の一連のタスクである。
- Hyrumの法則。公開している契約やベストプラクティスが完璧に遵守されることを前提にはできない。
第2部 文化
章立て
- 2章 チームでうまく仕事をするには
- 3章 知識共有
- 4章 公正のためのエンジニアリング
- 5章 チームリーダー入門
- 6章 スケールするリーダー
- 7章 エンジニアリング生産性の計測
個人的な要点
- 心理的安全性が大事である。
- 中心的原則は「謙虚・尊敬・信頼」である。
- 多様性は、より多くの方々に満足度が高いサービスを提供するために重要である。
第3部 プロセス
章立て
- 8章 スタイルガイドとルール
- 9章 コードレビュー
- 10章 ドキュメンテーション
- 11章 テスト概観
- 12章 ユニットテスト
- 13章 テストダブル
- 14章 大規模テスト
- 15章 廃止
個人的な要点
- ルールが正しく適用されているかの検証やテストには、ツールによる自動化を推奨する。
- ソースコードやドキュメントは、書かれる回数より読まれる回数の方が多い。
- 旧式であるもしくは利用されていないシステムは、保守コストの面からも計画的に廃止する。
第4部 ツール
章立て
- 16章 バージョンコントロールとブランチ管理
- 17章 Code Search
- 18章 ビルドシステムとビルド哲学
- 19章 GoogleのコードレビューツールCritique
- 20章 静的解析
- 21章 依存関係管理
- 22章 大規模変更
- 23章 継続的インテグレーション
- 24章 継続的デリバリー
- 25章 サービスとしてのコンピュート
個人的な要点
- ソースコードのバージョン管理では、単一バージョンルールの適用に加え、開発ブランチを最小限かつ短命にする。
- ビルドシステムでは、エンジニアが定義や設定できる範囲を適切に制限することで、エンジニアの生産性が上がる。
- 外部的依存関係では、単一バージョンに明示的にコントロールされるべきである。最新バージョンへの依存などとした場合、障害やビルドの再現不能などが発生しやすくなる。
- モノリポ(Googleの大半のソースコードが単一のモノリシックなリポジトリに保持されている)が、ツールの運用を効率的にしている
第5部 結論
章立て
- あとがき
- 訳者あとがき
個人的な要点
- アジリティと持続可能性の考え方が、ソフトウェアエンジニアリングの中核部分を成す。
以上
