ここ1年で読んだ技術書まとめ
概要
この1年くらいで読んだ本のうち特に印象に残っている技術書を備忘録兼これから学んでいきたい人のために記録する。
現状
サーバーサイドエンジニアとして3年目。
Goでアプリケーション設計・実装をし始めて1年以上経ち、 開発メンバーに加えて多少責任ある立場は任せてもらっている状態。
技術書(同人誌含む)
Go
Goならわかるシステムプログラミング
Goならわかるシステムプログラミング(紙書籍+PDF版)www.lambdanote.com
システムコールの抽象化や通信プロトコル、並行処理など、webサービスをつくる場合使用するパッケージの隠蔽されている部分にフォーカスした内容。
Goを初めて半年ほど経った時に読み、ioの扱いへの抵抗がだいぶ減った。それに伴ってGo製ライブラリを読む能力も上がった気がする。
webエンジニアなら必要ないとの声もあるが、読んで損はない。
Go言語による並行処理
goroutineは並列ではなくて並行である。
csp(Communicating Sequential Process)の思想や、タスクスティーリングの説明など難解な部分もあるが、その分読み応えがあるのに加え、
概念的な説明のみにとどまらず、実装パターンも細かく載っている。
当時は半分も理解できなかった気がするのでまた読み直したい。
Go言語でつくるインタプリタ
いわゆる猿本。monkeyというgoをホスト言語としたインタプリタをつくる。
多少アレンジしたodyというインタプリタを作った。 GitHub - 0daryo/ody
加えて、自分はここから抽象構文木を触り始め、簡単なコードジェネレータ、静的解析くらいは作れるようになった。
コンパイラをつくる本作の続きが英語版のみ存在する。余裕がある時にやりたい。
Writing A Compiler In Go (English Edition)
アーキテクチャ・ミドルウェア
Real World HTTP 第2版 ――歴史とコードに学ぶインターネットとウェブ技術
http/1.0,http/1.1,http/2.0といった現役のプロトコルの紹介や、ブラウザの変遷、ヘッダ・cookie・SSL/TLSなど多種多様なwebに関するトピックがまとまっており、webサービス開発者は一読に値すると思う。
加えてGoでのサーバー・クライアントの実装が例示されていて、自分にとっては二度嬉しい本だった。新卒研修などにも適していそう。
もともとミニ版が無料で配布されていたのでパラパラとめくっているうちに、本編を読みたくなって購入した。
データ指向アプリケーションデザイン ―信頼性、拡張性、保守性の高い分散システム設計
世に存在する様々なデータ構造やその扱い方についての本。DBやstorageといったステートフルなシステムは本当に難しい。
個人的にはLSMツリーとBツリーの比較やトランザクションのレベルについての話が印象に残ってるが、はっきりいって分散アプリケーションが必要になったような経験がないので実感が湧かない部分も多々あった。
この本は特に開発者として経験に応じて違った理解度・感想になると思うので時間をおいてまた読み返したい。
におうコードの問題集 〜MySQLインデックスに立ち向かう編〜
自分がインデックスについて真剣に考えるようになったきっかけの同人誌。
当時はインデックスの種類すら知らず、貼っておけばとりあえず早くなる程度の理解だったが、読後には実行計画をある程度読めて、インデックスツリーの構築コストなども多少考慮に入れられるようになった。
他の本と比べてメジャーではなく、偶然技術書典で手に取った本なだけに見つけられてラッキーだった。
Docker実践ガイド 第2版 impress top gearシリーズ
dockerについてVMとの違いやリソース管理方法、ネットワークや永続化volumeのことまで載っている。
コマンドも詳細に載っているため、辞書がわりに良いかも。
暗号技術入門 第3版 秘密の国のアリス
読み始めたモチベーションとしては開発時、SDKに乗るだけのJWT認証など行なっているものの、少し想定パターンから外れると手も足も出なくなるので仕組みを知りたいと思ったため。
暗号学者の道具箱(対象暗号・公開鍵暗号・一方向ハッシュ関数・メッセージ認証コード・デジタル署名・擬似乱数生成器)はある程度のwebアプリケーション開発者なら知っていて当然?の内容がまとまっている。
実際に自分は今まで公開鍵暗号とデジタル署名を混同していたなど、理解が曖昧だった部分が浮き彫りになった。
体系的にわかりやすく暗号について学ぶ機会はなかなかないので、初~中級者にとってはものすごくいい教材になると感じた。
楕円曲線暗号や公開鍵暗号の仕組みなど数強でも十分に楽しめそう。(自分は理解していません)
まとめ
実務経験や読書量が増えたため、以前と比べてオライリーなど割とゴツめの本が多くなっている気がする。
一方で完全に理解できていないと感じる内容も多々あるので、時間をおいて読み直したい。
本のリストからもわかる通り、基礎的な内容はカバーして弱点をなくすという戦略を取っていたため、逆に自分の強みは何かと聞かれると答えられない。
サーバーサイドエンジニアとして3年目に入ったので、そろそろ今後のキャリアなど考えつつ何か強みを作っていきたい。
ちなみに今はSRE本をちまちま読んでいる。また定期的にまとめていきたい。