『System Design Interview – An insider's guide』(以下、System Design Interview)を読んだ。この書籍は転職面接の対策本*1ではあるものの、システム設計の学習用途として非常に有用だったので、感想を書く。
なお、最近日本語訳版が発売されたが、今回は原著の感想となる。
読み初めの動機
本書を読み始めた動機は、さまざまなシステムの設計を学びたいと考えたからだ。
目次を見るとわかるが、Chapter4~Chapter16はすべてシステムデザインに関して記載されている。YouTubeやGoogle Driveなど面白そうなテーマが扱われており興味を持った。
Chapter 1: Scale From Zero To Millions Of Users Chapter 2: Back-of-the-envelope Estimation Chapter 3: A Framework For System Design Interviews Chapter 4: Design A Rate Limiter Chapter 5: Design Consistent Hashing Chapter 6: Design A Key-value Store Chapter 7: Design A Unique Id Generator In Distributed Systems Chapter 8: Design A Url Shortener Chapter 9: Design A Web Crawler Chapter 10: Design A Notification System Chapter 11: Design A News Feed System Chapter 12: Design A Chat System Chapter 13: Design A Search Autocomplete System Chapter 14: Design Youtube Chapter 15: Design Google Drive Chapter 16: The Learning Continues
感想
やはり良かった点は、様々なシステムの設計を知れること。 興味のあるChapterから読み進めたが、どのChapterも面白く結局全て読み通した。
例えば、Chapter 12ではチャットシステムを実現するために次の機構が紹介されていたが、Long Pollingは初めて知る用語であり、知識の幅を増やすことができた。
- Polling
- Long Polling
- Web Socket
構成として、はじめはシンプルな設計を紹介し概要を示してから、Deep Diveと称して可用性やスケーラビリティ、エラーハンドリングなどを考慮して設計を磨いていくスタイルとなっている。図が豊富に使われていて都度理解しながら読むことが出来た。
次に、英語が非常に平易であり読みやすい。構文解釈に時間が取られず読み進められたため、英語ではあるが時間あたりの学習効率は日本語とさほど変わらなかった。
今後
『System Design Interview』はとにかく面白い本だった。続編となるVolume2も読みたいとは思っているが、電子版が無いのが難点であり、まだ手が出せていない。
同内容のウェブコンテンツである、ByteByteGoの方も面白そうではある。 FinTech領域に身をおいているため、Payment SystemやDigital Walletの設計はあまりにも興味深い。 bytebytego.com
*1:現状転職をする予定は全くない