勘と経験と読経

略すとKKD。ソフトウェア開発やITプロジェクトマネジメントに関するあれこれ。

システム設計の現実に触れる「SYSTEM DESIGN INTERVIEW」を読んだ

読むのがホネな技術書やビジネス書を取り上げて2週間の読書期限を課して読んでアウトプットする仮想読書会「デッドライン読書会」の第59回。同僚と読書期限を約束することによって積読が確実に減るという仕組み。過去記事はこちら

さて、今回読んだのは「システム設計の面接試験」である。微妙なタイトル。原著のSYSTEM DESIGN INTERVIEWの方が有名な気がする。

先に言っておく

Amazonのレビューにも書かれているが、日本語翻訳の品質には課題がある。わたしは許容範囲だった。試し読みを推奨する。気になる場合は原著を購入するか、オリジナルのオンラインコンテンツを購読すれば良いだろう。

システムデザイン・インタビューとは何か

システムデザイン・インタビューとは、ビッグテックを中心にエンジニアの採用試験で課される課題の一種である。抽象的なシステム仕様に関する質疑応答の中で、どのようなソフトウェアを構築するかを答える形式が一般的のようである。その存在を最初に知ったときは「本当にそんなことをやっているのだろうか」と疑問をもったものだが、実際に海外にいる知り合いが遭遇したという話も聞いたので、実際にやっているのだろう。

というわけで本書「システム設計の面接試験」はその面接対策の本である。全てではないが、各章では候補者と面接官のやりとりなども紹介されていて興味深い。たとえばこんな感じである。

候補者:これはモバイルアプリですか、それとも Web アプリですか、それとも両方ですか?
面接官:両方です。
候補者:製品において最も重要な機能は何ですか?
面接官:投稿できること、友だちのニュースフィードが見られることです。
候補者:ニュースフィードの並び順は、逆時系列純ですか、それとも特定の順序ですか?
面接官:シンプルにするため、フィードは逆時系列でソ ー トされていると仮定しましょう。

こういうやりとりをしながら、システム設計について答えていくのだ。難しい!けど、面白そう!

結果として面白い本になっている

というわけで本書はシステムデザイン・インタビュー対策本として

  • 代表的な課題(例えばWebクローラとか、URL短縮サービス、デカいものであればYouTube)に対し
  • 課題の整理
  • おおまかな設計
  • さらなる深掘り
  • 関連する情報リンク

が提示されるという構成となっている。

英語版だが、チャットシステムの章の内容が公開されているので興味があれば見てみると良い。

この構成が本書の面白味になっている、というのが本書の感想である。

  • よく知られている大規模サービスの大まかな設計イメージが理解できる
  • 様々なアーキテクチャの課題、ハマりどころについてわかる
  • おおまかな見積もりの方法を知れる
  • 実際のプロダクトやコードまでは突っ込まないので、各章の読み味は軽い

というわけで自分としてはだいぶ楽しい本であった。

これはエンジニア教育にも活用できるのでは

と思ったら、いろいろとすでに実践されている方がいた。参考にしたい。

ネット上にはアーキテクチャパターンに関する情報が大量に存在するので、時間をかけて検討調査すればそれなりのシステムデザインを考えることはできるだろう。一方で、白紙の状態で行う最初のディスカッションが重要である。瞬発力というか、構想力を鍛えるためには本書で紹介されているレビューのアプローチは有用ではないだろうか。

関連情報