2024/01/28追記: Amazonへのリンクを修正しました。

はじめに

今年読んだ本のひとことまとめ、備忘録的なもの。2023年版。

それなりにたくさん挙げてはいるものの、通読していなかったり内容ほぼ忘れてるのもあるのであしからず。通読失敗したやつは必要になったときに読み返したいところ。

特にお気に入りの本には★をつけてます。また、前回までに紹介したが読み返した本も挙げてます。

前回まで:

設計・コーディング手法

単体テストの考え方/使い方★

https://www.amazon.co.jp/dp/B0BLTG8Z9K

今年読んだ中で一番学びがあった。テストの書き方はもちろん、設計の考え方も大変参考になる。

テストはもともとSpringでDIしやすいことをいいことにモックを作りまくる(いわゆるロンドン学派)のが好きだったけれど、この本を読んで考え方をシフトし、モックは必要最小限でリファクタリング耐性を重視した実装にするようになった。

関数型アーキテクチャの話など、テストしやすい設計・実装についても多く学びがあった。

今年書いた以下の記事でも、学んだことを生かしつつ引用した内容となっている。

モノリスからマイクロサービスへ

https://www.amazon.co.jp/dp/4873119316

段階的にアーキテクチャを変更していく話はマイクロサービス関係なく活用できそう。実際モノリス内部での大幅改修でこの本の考え方応用してみている。

データ指向プログラミング

https://www.amazon.co.jp/dp/B0BWR57K64

オブジェクト指向プログラミングに反して、データとコードを分離・汎用データ型だけを使う・データはイミュータブルといった思想をもつデータ指向プログラミング(DOP)についての解説本。

データとコードを分離、すなわちオブジェクトに振る舞わせないといった考え方が良いという点は自分も薄々感じてたところなので面白かった。その点を開発効率を追い求めた実装プラクティス集で引用して紹介してみた。

一方で、汎用データ型を使っていく・データの型検証はJSON Schemaでやっていくみたいな考えは実際開発者体験は良いものにはならなさそう。JSなら普通にTypeScriptで型定義・互換性のある型ならそのまま変換なく使えるじゃん、くらいの考えで導入したい。

物語形式で話が進むが、なんというか、登場人物が素直に受け入れすぎてたり、そうはならんやろと思ったりとリアリティは薄く感じた。

システム設計の面接試験

https://www.amazon.co.jp/dp/B0C61BNTW9

面接試験というテーマのもと、ニュースフィードシステム、チャット、動画サイトなどのサービスのアーキテクチャ設計についてどんなアーキテクチャが模範解答か?どういった点が深掘りされる点になるか?を解説していく内容。

特定のベンダー依存なく、どういうサーバ構成でどこでキューを使ってロードバランサ使って…とざっくりのアーキテクチャの見本市にもなる点が良い気がする。そういう書籍は意外とないような?知らないだけかもだけど。

一方で、翻訳が全体的にいまひとつ。エンジニアが監修していないような訳になっていたのがやや残念。

進化的アーキテクチャ

https://www.amazon.co.jp/dp/4873118565

全体的にふわっとした内容でいきなり読むとよくわからないが、『ソフトウェアアーキテクチャの基礎』を通過しているともう少し理解が進むような気がする内容。(同じ著者でこの本のほうが古いはずだけれど)

特に目立つキーワードが「適応度関数」。すべてのソフトウェアアーキテクチャにおいてそれに必要な要件(機能要件・非機能要件問わず)があり、それにいかに適応できるかの指標を適応度関数として定義、観測して適応させていくことが重要といったことは掴めた。

Domain Modeling Made Functional

https://www.amazon.co.jp/dp/B07B44BPFB

会社の輪読会で読んだ。関数型でどうDDDやってくか?という内容。

言語はF#だが、考え方自体は他の言語でも適用できる面も多い印象だった。

プログラミング言語

プロを目指す人のためのTypeScript入門

https://www.amazon.co.jp/dp/4297127474

TypeScript業務で使ってきたものの知らないことがたくさんあって気づきが得られてよかった。

Production Ready GraphQL

Production Ready GraphQL | The Book

業務でGraphQL使うなら読めと言われたので。ただざっくりとしか読めてない… ページネーションの話とかMutationの返り値にはPayloadを設定するとか、業務に活用できてよかった。

低レイヤー

Goならわかるシステムプログラミング★

https://www.amazon.co.jp/dp/4908686122

Goを通じて低レイヤーまわり全般に触れていく本。とても読み応えあった。 システムプログラミング学びたいって人いたらまずこれを薦めていきたい。

エンジニアのためのCPU入門★

https://www.amazon.co.jp/dp/4908686165

現代のCPUの最適化手法についてとことん解説していく本。 大学の講義で学んだことあったのは基礎的なところだったので、そこから先の応用が目からウロコだった。

Linuxのしくみ

https://www.amazon.co.jp/dp/B0BG8J5QJ1

図が多くわかりやすかった。とりあえずLinuxざっくり理解するのに良さそう。

ふつうのLinuxプログラミング

https://www.amazon.co.jp/dp/B075ST51Y5

C言語を使ってシステムプログラミングのチュートリアル的なことができる内容。 HTTPサーバー実際に手を動かしてみて、普段業務で動かしてるサーバも内部的にはこんなことしてるんだなーと学びがあった。

C言語も久々に書いて、シンプルだがシンプル故に大変だなーと思うなど。

並行プログラミング入門

https://www.amazon.co.jp/dp/4873119596

以前に一度読んだけど挫折→もう一度チャレンジ。ただ後半はやはり難しい。

パフォーマンス

達人が教えるWebパフォーマンスチューニング

https://www.amazon.co.jp/dp/B0B1Z9ZMY6

ISUCON参加するために読んだ。Webアプリケーションのチューニングの基本的なところが抑えられていてよかった。

全体的に浅く広く、著者が書きたいことを書くって感じの内容だったので、深掘りたいならそのトピックにあった別の本を読むのがよさそう。

詳解システムパフォーマンス

https://www.amazon.co.jp/dp/4814400071

OSレベルのパフォーマンスの話。分厚くて全部読んでないけれど、最初の4章あたりまでは「パフォーマンスチューニングやってくのにこれだけは知っとけ」みたいな内容で勉強なった。

データベース

SQLアンチパターン★

https://www.amazon.co.jp/dp/4873115892

だいぶ前に買って積んでいたやつ。EAVとか以前疑問を持たずに触ってたが、読むと確かにな〜と思ったり、木構造についてのあれこれやとりあえずIDの話など業務にそのまま役に立つ内容が多かった。

原著で改版されたものが出てるっぽいので読み返すときはそちらを選ぼう。

SQL Antipatterns, Volume 1: Avoiding the Pitfalls of Database Programming by Bill Karwin

失敗から学ぶRDBの正しい歩き方★

https://www.amazon.co.jp/dp/B07P8PMHLL

SQLアンチパターンとは被らない内容だったのでこちらも読むべき。どこまで制約を入れるべきか、JSONを使うべきかの話など学びがあった。

DevOps

システム運用アンチパターン

https://www.amazon.co.jp/dp/4873119847

会社の輪読会で読んだ。単純なシステム運用のテクニックの話だけでなく、文化づくりなりコミュニケーションのやり方なり会社でDevOpsやってく上でのなんでもが詰まってる本だった。

文字文字しくてやや読みにくくはあったかも。

その他

プログラマー脳

https://www.amazon.co.jp/dp/B0BVDQM5H1

プログラミングにおける認知負荷に関して深掘りした話。認知科学の方面から攻めるという、珍しいアプローチからのプログラミングスキルアップの本だった。

情熱プログラマー★

https://www.amazon.co.jp/dp/B01IGW5MQ0

読んで元気の出る本。キャリアについて不安になったらまた読み返す。

「技術書」の読書術

https://www.amazon.co.jp/dp/B0BF469YLK

技術書の読み方についていろいろ紹介。面白い読み方いろいろあるなーと気づきはあったものの、いや好き勝手に読ませてくれってなったのであまり参考にはなってないかも。

まとめ

改めて感想書こうとして、内容忘れているのが多かった。量ではなく質を大切にしたい。 来年はあまり詰め込みすぎず、読み返したり難しい本をゆっくり読むことに重きをおきたいかも。『並行プログラミング入門』みたいに2年連続登場とかまた発生させても良しとする感じで。

基本は物理本派で、2月にラックを買ったがもう入りきれなくなってきている…読み返すことなさそうな本は処分するかなー。