前提
大学1年の終わり頃にプログラミング学習を始めて、ちょうど3年弱くらい経ちました。
数え切れないほどの技術書を読んできましたが、その中でも「これはよかったような気がする!」という書籍を載せておきます。
選出の観点は「面白さ」「わかりやすさ」「その知識が役に立ったか」の3つの観点から総合的に評価しています。
また、原則翻訳されたものがあればそちらを掲載しています。
ところが、僕はO'Reillyのサブスクを契約しているため、ほとんどのO'Reillyの書籍を原文で読んでいます。
そのため、翻訳の精度などについて評価することはできない点をご了承ください。
※ リンクはアフィリエイトリンクではないので、気にせずご覧ください。
ネットワーク
3分間ネットワーク
ネットワークのプロトコルとか以前の最低限の仕組みをトーク形式でわかりやすく話してくれている書籍です。
大学の授業とかを受ける前にこの本を読んでいたおかげで、論理ネットワーク系の授業の内容がすっと頭に入ってきました。
情報系の学生であれば、あとは大学の講義でかなり深いところまで扱うと思いますが、
そうでない場合は、
コンピュータネットワーク
くらいを読んでおくといいと思います。
詳解TCP/IPの3冊には到底手が出ないという方でも、こちらなら比較的読みやすいと思います。
とはいえ、和訳がちょっと読みにくいところがありますが、それでも名著を日本語で読めるってことはとてもありがたいことだなと思います。
採用面接では、ネットワーク(特にTCP/IP)に関するテーマがやたら問われます。この書籍の内容を一通り抑えておけば、ネットワーク周りの質問にはおおよそ答えられる気がしています。
DNSがよくわかる教科書
DNSに関しても採用面接ではとてもよく聞かれます。
DNS自体のOverviewは知っているけれど、より詳細な挙動は知らないという方がとっつきやすいのはこの本だと思います。ちょうど一年位前の外資系企業の技術面接の対策で慌ててこの本を読みましたが、かなり狙われたので結果的に読んで良かったです。
コンピュータアーキテクチャ
コンピュータシステムの理論と実装
オライリーで読みやすく個人的には、必読の書です。
大学の授業で作るCPUと重なる部分は多いのですが、むしろ一度CPUを作ったことがある人が読んでも楽しめるくらい充実した内容だと思います。CPUは噛めば噛むほど味が出る。
パタヘネ
同じ著者ですが、順番が逆になったヘネパタは難しいので、まずはパタヘネの上下巻から読むことをおすすめします。
こちらの方がだいぶ簡単のため「必読の書」と言われていますが、ボリュームはかなりあるので、僕は友達と読みました。1人で読むと確実に挫折するくらいのボリュームがあります。
FPGAの原理と構成
個人的に好きな本です。FPGA上で、VerilogやVivadoを動かすのは大学の授業で嫌になるほどやると思います。
が、そもそもFPGAってなんだっけ。というところにアプローチしてくれることはなかなかないのではないのでしょうか。少なくとも東工大だと、RISC-Vみたいな命令セットをVerilogなどの論理回路で記述することはありますが、FPGA自体に着目することはあまりありません。
Modern Compiler Implementation in C
コンパイラの仕組みについて解説した本で比較的難易度は高いです。僕も読破できていないのですが、前半だけでも読む価値はあると思います。
また、採用面接はなぜか、コンパイラが大好きです。この書籍の内容をかなり聞かれたので、読んでおいてよかったです。
オペレーティングシステム
大規模サービス技術入門
これは、はてな社のサマーインターンを題材にした大規模システムで使われている技術の話の書籍ですが、とてもおすすめです。
OSの基本的な挙動から懇切丁寧に教えてくれるので、正直コンピュータサイエンスの知識がほとんどない状態でも読み始めることができます。とはいえ、これ以外にちゃんとしたOSの仕組みについて学べる書籍を一つは読んでおくことをおすすめします。
Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識
もう本当に分かりやすいです。この本も超おすすめです。いわゆるエンジニア必読の書に入ると思います。
しかも、3~4時間くらいで読み終わっちゃう程度のボリュームで読んでてめっちゃ楽しいです。
Linuxプログラミングインタフェース
これも必読の書に値する良書でした。他にも詳解Linux カーネル など有名な本もありますが、この本の方が難易度はだいぶ低く学士や修士ならまずはこれから読む方がいいかななんて思います。
物語のようにかかれていて、類書よりも読みやすいの気がしました。
Linuxのカーネルモジュールの開発などの際に役に立つ知識も多くかなりおすすめできる書籍です。
セキュリティ
暗号技術入門 第3版 秘密の国のアリス
この本はまじでおすすめです。
基本的な暗号の仕組みがめちゃくちゃ分かりやすく解説されています。
この辺の内容は、新卒採用の面接でもこれでもかというくらいに狙われたところなので、かなり読んでおいてよかったなと思っています。
体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践
実務で役に立つポイントがまとまっていて良書です。
かなり実際の業務でも意識しているポイントが詰まっているような気がしました。
データベース
実践ハイパフォーマンスMySQL
これも必読の書です。入っているプログラミングサークルの活動で読みましたが、役に立つことがかなり多いです。
詳解データベースを読むのは重いけれど、ストレージエンジンやクエリパーサーについて知りたいという方はこの本が比較的軽量でおすすめです。
Transactional Information Systems: Theory, Algorithms, and the Practice of Concurrency Control and Recovery
Weikum本なんて日本では言われています。ググったら読んでみた人の記事とかも出てくるのでそういうのも参考にしながら読むと良いかなと思います。
僕は3章と5章だけ読みました。
トランザクションとMVCCについて興味があったので、読みましたが、全て通読するとなるとかなりの重みだと思います。
分散システムとかトランザクションに興味があるとなったら、この本は避けては通れないのかなと思います。
CloudNative / SRE
SRE サイトリライアビリティエンジニアリング ―― Googleの信頼性を支えるエンジニアリングチーム
言わずもがなの名著です。
とはいえ、僕も実はまだあまり読めてないのであまり解説できないです。
一緒に読んでくれる人募集中です。
Infrastructure as Code
インフラの管理力に着目した書籍だと思います。
「Terraformの"使い方"」みたいなツールの使い方ではなく、宣言的アプローチの哲学を学ぶことができるので、かなり好きな書籍の一つです。
同時に、アンチパターンやベストプラクティスのような実践よりの内容も含まれているので、現場のエンジニアとしても読みやすい内容になっています。
入門監視
これも言わずもがなの名著です。SRE本に載っていることも多いですが、薄くて読みやすいので一度読んでおいてもいいと思います。
Kubernetesで実践するクラウドネイティブDevOps
DevOpsというふわっとした言葉を実践に近いところに落としてくれているのかな思いました。
DevOpsそのものの哲学自体は、ネット上にも転がっているので、まずそこについて理解することが重要だけれど現場において、うーん、DevOpsってなんだっけみたいなポイントは自分の中ではあまりわからなくなっていたので、いい書籍だったかなと思います。
とはいえ、DevOpsとはなんたるやが腑に落ちるわけではない気もします。
アーキテクチャ
クリーンアーキテクチャ
クリーンアーキテクチャというもの自体について書いてあるというよりは、オブジェクト指向の原則から、必然的にクリーンアーキテクチャが導かれるというようなアーキテクチャそのものの哲学についてかかれています。
ここで書かれていることは、クリーンアーキテクチャに限らずどんなシステムにおいても通づるような重要なことばかりが書かれていて、しかも読みやすいです。伝説の名著だと思ってます。
マイクロサービスパターン
分散システムを始める上での基本的な内容が書いてあります。
マイクロサービスで得られるメリットは果てしないということは多くの人に理解されていると思います。
今から、システムを作り始めるという場合、ほとんどの場合でマイクロサービスアーキテクチャを採用しているのではないかなと思います。
システムの疎結合を保つという面でも、Reactiveなシステムを構築する面でも、エンジニア組織を構築する面でもマイクロサービスアーキテクチャにおいて大きな恩恵を受けることができます。
マイクロサービスアーキテクチャに対応するためのパターンを一通り揃えてくれているのが本書籍です。
エンジニアであれば、「必読の書」だと思っています。
データ指向アプリケーションデザイン
この本はめっちゃ面白いです。
アプリケーション開発で考えるべきことが凝縮されています。
これはもう一度読みたいなって思います。
形式手法
抽象によるソフトウェア設計
Alloyの本ですが、内容はより一般論として扱われている部分が非常に多いです。
個人的には、モデル検査にTLA+を使うのが好きですが、TLA+を使ったモデル検査について学ぶためにも非常に良書です。
時相論理や関係論理についても触れられていて、六章には応用事例ものっているので興味のある方にはおすすめできます。
形式的モデル化: 離散事象/実時間/ハイブリッドシステムのモデル化と解析
CTLとLTLにはじまり、決定性時間モデル、確率性時間モデルなどシステムのモデル化に関して学問的に書いてあります。
かなり数学的な表現を使って書かれているので、
大学で数学や情報工学を専攻していないと正直読みづらいかなという印象はあります。
この分野について日本語で勉強しようと思うと、この本になるのかなという印象です。