「システム設計の面接試験」という本が良かった
皆さんこんにちは。株式会社ラクーンホールディングスで働いている川崎です。
最近「システム設計の面接試験」という本を読みました。
個人的にとても面白いと感じたので、オススメポイントと感想を共有します。
直近でシステム設計の面接を受けない方も、きっと読んで得るものがあると思います。
本の概要
システムの設計はシステムの機能や仕様、データのアクセスやセキュリティを左右するため、非常に重要だが、従うべき一定のパターンがないために、その習得は難しいと言われています。
一方で、システム設計自体がITエンジニアに日常的に求められる作業であるため、システム設計の面接試験は米国で広く採用されています。
本書では、「Webクローラ」「通知システム」「ニュースフィードシステム」「チャットシステム」「youtube」など実践的なテーマに沿って、システム設計の問題を出題し、その回答を解説することで、システム設計力を身に付けられます。
オススメポイント
この本は、「面接官から出されたお題に回答していく」という体(てい)で各章が書かれています。一見、システム設計の面接試験を受ける人にしか需要がないように思えますが、面接を受けない方にも以下のような刺さるポイントがあると思います。
- 要件からどのようにシステム設計に結びつけていくのかを学べる
- 様々な設計パターンを学べる
- 図が多いので紹介されている設計パターンの理解がしやすい
順を追って説明します。
要件からどのようにシステム設計に結びつけていくのかを学べる
例えば8章の「URL短縮サービスの設計」は、抽象的なお題を以下のような手順で設計していくという内容でした。
- 機能要件(例:ユーザーができる操作は何か)を確認する
- 部分的な非機能要件(例:想定されるトラフィック)を確認する
- 要件から必要なスループットやストレージ容量などを概算する
- 設計パターンやアルゴリズムを要件に適用させていく
ここで注目したいのが「1日あたり1億のトラフィックが予想される」という要件から、仮定を使いながら
- 1秒あたりの書き込み回数
- 1秒あたりの読込み回数
- 必要なデータ量
といった設計に必要な細かい情報を算出しているところです。
システム設計の経験が無いと「1日あたり1億のトラフィックが予想されるシステムを作れ」と言われたらフリーズしそうなものです。しかし、秒間のスループットなど細かく情報を分解すると、どのような設計をすべきなのかが見えてくるということを学べます。
要求から要件に落とし込み、設計をしていくのは業務でもやることなので、システム設計面接を受けない人でも得るものがあるでしょう。
様々な設計パターンを学べる
7章「分散システムにおけるユニークIDジェネレータの設計」では、分散システムにおいて整数64bitで1秒間に1万個のIDを生成できるIDジェネレータを作るお題を解いてます。
分散システムで採用されるIDジェネレータで代表的なものはUUIDですが、このお題ではIDの長さは64bitに制限されているので、長さが128bitあるUUIDは使うことができません。では一体どうするのか・・・というのは、ぜひ本書を買ってお確かめください。
この本を読むといくつかのシステム設計パターンの概要を知れます。 また上記のような高レイヤーの設計パターンだけではなく、ミドルウェアに隠蔽された分散データの扱い方(コンシステントハッシュ)などの低レイヤーの設計パターンも別の章で説明されています。
図が多いので紹介されている設計パターンの理解がしやすい
amazonの商品ページを見ていただけるとわかりますが、紹介されている各種設計パターンは図を多く使って説明されています。設計パターンの理解は図があったほうが絶対的にわかりやすいので、助かります。
感想
買ったときは「システム設計の面接試験を受ける予定ないけどな~」と思っていましたが、読んで良かったです。300ページしかないので、システム設計をするうえで重要なことを気軽に知れるいい本だと思います。とはいえこの本を読むだけで設計ができるようになるわけじゃないので、そこは注意が必要です。
イベント開催のお知らせ
株式会社ラクーンホールディングスでは、8月23日に日本橋でラクスルさんと共同でLT大会を開催します。ご都合つく方はぜひご参加ください!
Discussion