ユユユユユ

webエンジニアです

Designing Data-Intensive Applications を読み終わった

 昨年末に着手して、足掛け5ヶ月で読了した。

f:id:jnsato:20210505085518j:plain

 5ヶ月というとあまりに時間がかかりすぎているように聞こえる。実際には年末年始とこの GW で集中的に読んだ。しかも、後者の連休ではメモを取りながら読み進めることをやめて、読み終えることそのものを目標化して無理やり終わらせたきらいさえあるので、時間を尺度とすることには(そうでなくても意味はないが)ここではあまり意味はない。

 分散システムにおけるデータの流れにフォーカスした著作である。どの章をとっても含蓄ある文章しかないので、要約するには僕の手に余る。無理に一般化して語るよりも、序説を概観した5ヶ月前のエントリをみてもらうほうが話は早そうである。

 それから、いくつかのチャプターについては個別のエントリとして要約をポストしている。

12の章立てのうち3章のみかいつまんだ形である。もちろんこれらのほかの章もとても興味深い話のオンパレードである。本当はすべてを紹介したい、なんなら理解を含める目的で私家版の翻訳すら作成してもよい、というくらいに全編にわたって秀でた情報量をほこっているが、そうまではしなかった。

「なんとなく聞いたことがあるようで、実はよくわかっていない」というあたりの知識領域を包括的に扱って、体系的な知識としてまとめてくれている稀有な本である。僕にとってはデータベースのインデックスアルゴリズムがそうで、ここで B-tree が何者であるのかわかったし、 LSM-tree という新しいデータ構造も知ることができた。

 第二部 "Distributed Data" では分散データベースの設計・運用上のプロ・コンおよび落とし穴がこれでもかとカタログ化されていて、大規模分散データベースなんて人類には早すぎるのではないか...と暗澹たる気分になかばされつつも、これを読んだおかげでどれだけの新しい視点を得られたかとおもうとずいぶん成長した気がしている。

 末尾を飾る第三部も、つい先ほどまで読んでいたこともあるものの、忘れがたい視点であることは疑いない。とりわけ、非同期のイベントによって派生データを適切に制御するという案件をちょうど業務で扱っているところであったので、示唆を与えられるパッセージはあまりにも多かった。それがいかに難しいトピックであるかを痛いほど知ることになり、これらの知見を持たないまま進めてしまっていたらどうなってしまっていたかをおもうとゾッとする。もっとも、これらを知った上でなお難しい問題であることには変わりがないのだが、学んだことをただちに活かせるかもしれないというのは幸せなことである。

 読み始めたときのエントリで、本書が teachyourselfcs.com で強く推薦されていたことを紹介した。それに加えて、ハッカーニュースで見かけた フェイスブックの面接対策の記事 でもやっぱり本書が紹介されていた。いわく、上級エンジニア面接ではコーディング試験と同じくらいかそれ以上にシステム設計の知識が求められ、それの足掛かりとするのにちょうどいい本であるそう。僕自身はいまのところビックテック企業の規模のプロジェクトを遂行するような経験はまだないけれど、そうしたレベルを求める人々にとってさえもこの本が有用なリソースであるというのは心強く感じる。つまり、それだけ信頼のおける本であるということ。

 反省点としては、ノートのとり方が非常に乱暴だったところか。重要そうな箇所を適当にピックアップして入念に整理することができず、「やたらにひたすらメモをとる」か「ほとんどメモもとらずに読みすすむ」のいずれかに陥りがちであった。これは仕方のないところもあるとおもう。というのは、前提知識の弱さから、書かれてあることすべてが真新しいパースペクティブと映りがちであったため、「重要でないところを読み飛ばす」ということが原理上不可能であったためである。いちどザッと通読してから、重要なところをインデックスしていく戦略で読んでおけば、より効率的にインプットできたかもしれないが、その読み方ではいま受けているほどの感銘は受けなかったかもしれない。いずれにせよ、高い確率で向こう数年中に再読する予感はあるため、なにも悲観すべきことはない。

 英語で通読することができたことも誇らしくおもう。日本語と同等の速度で読み進めることはできないが、そのぶんだけ丁寧に読み進められた。スルスルと読んでいるつもりが、ある箇所で突然読めなくなることがあった。そういうときは、それまでスルスルと読んできた前提を正しく読めていなかったというだけにすぎない。実際、すこし前に戻って読みなおすだけで、たいていの難所は突破できる。この点、日本語で読んでいると、わからないことを翻訳のせいにして放置してしまうところがある。まあ、実際に翻訳が悪いこともあるとはおもうが、せっかくいいことが書いてあっても正しく読めないのは申し訳がない。結局のところ、原典にあたるというのはどこまでいっても有効であるという思いを深めている。