今までに読んだ技術書まとめ(随時更新)
随時更新です。
プログラミング言語
みんなのPyton
初心者から読めて、実用的な実装例まで書かれている。
pythonでプログラミング始めたい人におすすめ。
たのしいRuby 第6版
ノンプロでも読める感じのRuby初心者向け本。
プログラミングを始めたい人でRuby勉強の最初に読むのおすすめ。
プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで
通称チェリー本。
Rubyのテクニックについて詳しく書かれているが、他の言語を書いたことがある人であればいきなり読んでも問題ないレベル。
これをマスターすればRuby中級者の仲間入り。
Effective Ruby
他の言語でもあるEffective系のRuby版。
チェリー本でカバーしきれない内部動作や、Rubyだけではないプログラミング言語全般に関わる詳細実装が書かれている。
特にガベージコレクションの動作詳細が書かれているのは嬉しい。
メタプログラミングについても軽く書かれている。
中級者から上級者への橋渡し。
Scalaスケーラブルプログラミング第3版
通称コップ本。
Scala作者のオダースキー先生が書いているだけあって思想からベスプラから実装詳細まで網羅されている。
単純に読み物として面白い。
Scalaエンジニアになるなら一度は読んでおきたい本。
今度第4版が出るらしい。
ちなみに英語版はもう出ていて、読んだが内容がscala3にアップデートと言う感じだった。
実践Scala入門
コップ本ほど詳しくはないが実践的であることに絞って書かれているため分量も少なくちょうどいい。
OptionやEitherの使い方に関して言えばこちらのほうがわかりやすい。
ScalaTestについてもまんべんなく書かれている点がなかなかうれしい。
あと著者たちは日本のScalaコミュニティの巨人たちばかりなのでTwitterなどをフォローすることをおすすめする。
Scala逆引きレシピ
Scalaのテクニックやベストプラクティスがユースケースごとに書かれているのでざっと眺めるだけで学んだほうがよさそうな部分がすぐ探せる。
ただ内容的にはコップ本の範疇を超えないので、コップ本を理解している人は読む必要はない。
また内容が少し古いのにも注意。
Scalaパズル 36の罠から学ぶベストプラクティス
Scalaの重箱の角をつつくような話が書かれている。
Javaに詳しくない人がScalaの仕様を理解するためにいい本。
他の本に書かれていないオンリーワンな情報が満載なのでScalaオタクになりたい人はよむといい。
ただこれもちょっと古い本である。
Scala関数型デザイン&プログラミング―Scalazコントリビューターによる関数型徹底ガイド
ScalaでHaskellをやろうとしている本。
別にこれを読まなくてもScalaは書けるが、Scalaコミュニティには関数型の思想が蔓延しているため読んでおいたほうがいい。
とくに第4章まではScalaの特徴的なデータ構造、再帰処理、値としての例外などの話題が含まれているため読むことをおすすめする。
いま第2版絶賛執筆中らしい。
実践TypeScript
日本語で数少ないTypeScriptの本。
TypeScriptの基本からReactなどとの併用まで書かれている。
シェルスクリプト基本リファレンス
シェルはネットで調べつつやるよりも一回がっと本で学んだほうが効率がいいと思うので学び始めにおすすめ。
スターティングGo言語
Goの基本文法集。
目立っていい点はないが、goは文法がめちゃ簡単な上本になってよくまとまっているのでそれ自身が価値。
goを始めたかったらとりあえずこれを一日二日で読めば始められる。
みんなのGo言語
タイトルから入門書っぽいがそんなことはない。
基本文法など無いgoのベスプラ集。
運用上の注意からgo周りのツールの説明、goに向いてるプロジェクトの話まで盛りだくさん。
基本をさらった後に読むべき本。
実践Rust入門
これ読めばとりあえずrustは書き始められる。
アマゾンのレビューでは最初に例示が来る構成がよく文句言われていたが、例示の部分は飛ばしても読めるので飛ばせばいいと思う。(そもそも私は例示は章レベルでよく飛ばす)
構成以外は普通に良書で複雑だと言われがちなrustのコンパイルシステムやセマンティクスでわかりにくい部分はなかったのでおすすめ。
すごいHaskell楽しく学ぼう!
Scalaやってて関数型の知識を深めるために読んだ。
Functor、Applicative、Monadとあるあるな型クラスを学べるが他のFoldableとかTraversableとかは無いので少し物足りない。
ただなぜかZipperにまるまる1章割いている。
関数型学びたい人でhaskellでもいいやっていう人は読むといいのでは。
ただScalaとか他の言語で関数型ある程度やってる人はあまり新鮮味はないかも。
結構具体例も豊富で手を動かせるタイプの本。
フレームワーク・ライブラリ
Everyday Rails - RSpecによるRailsテスト入門
Rspecの基本的な書き方からテストの基本技法まで盛々。
分量もそんなに無いのでこれとRailsチュートリアルをやればざっとやれば君はもうRailsエンジニア。
Rspec初級者〜中級者向け。
Akka実践バイブル
akkaの概念、アクターシステムのパラダイムやAkka httpの使い方までもりもり。
materializerなどのよくある謎のやつやアクターの復帰戦略まで理解が深まる。
これ読めばとりあえずAkkaは書ける、が読む必要があるか怪しいほど分厚い。
Java/Scalaフレームワーク PlayFramework入門
scala/java両方でplayの最低限を実装する内容が書かれている。
圧倒的に内容は足りてないが、取り合える始めるだけなら問題ない。
slickの内容がかれているのが微妙にうれしい。
The Type Astronaut's Guide to Shapeless Book
scalaのライブラリshapelessの解説本だがscalaのコンパイラの勉強になる。
型とコンパイラを使って計算をするということを理解する第一歩。
今まではただの型検査、コード生成器だと思っていたコンパイラも立派に計算機だと思えるようになる。
めちゃくちゃおもしろい。
その他
インフラエンジニアの教科書
ラインの人が書いたインフラの本。
内容的にはまんべんなく網羅されているが、それ故内容が薄い。
これだけでなにかわかった気になるのは難しいが、ある程度分かる人がさらっと流すのには丁度いいかも。
インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門
神本。
OSI参照モデルに基づいてすべてのレイヤーの役割、仕組みが完璧に書かれている。
いままで意味もわからず使っていた語がすべてわかりスッキリする。
練習ができないことが難点。
この本を読めばグーグルで検索ワードを打ち込みエンターを押してから検索結果が表示されるまでのすべての仕組みを説明できるようになる。
Amazon Web Services 基礎からのネットワーク&サーバー構築
aws初心者でも読めるし最強にわかりやすい。
vpcの概念からec2やロードバランシングまで基本がさらえる。
特に秀逸なのはawsでの実践を通じてネットワーク・インフラを練習できるとこ。
他のインフラ本ではわからなかった概念がこの本の練習を通じて学習できる。
まじでおすすめ。
Amazon Web Services パターン別構築・運用ガイド 改訂第2版
awsの各サービスのテンプレパターンを一通り学べる。
ユースケースに応じて大体どういうサービスを使用すればいいか、そもそもawsでは全体として何ができるかわかる。
1操作ごとに詳しく手順が書かれているのでawsでよくある操作がよくわからんということはないと思う。
ただawsはuiの変更が頻繁にあるため、本と齟齬がある場合があるのでそこだけ注意。
Docker/Kubernetes 実践コンテナ開発入門
dockerを始めたい人はこの本サラッと読んですぐ始めるといい。
本を読んでできるようになるというよりも、最低限の知識を詰め込んで実装で身にするイメージ。
Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識
Linuxを題材にカーネルとはなにか、メモリとcpu、ハードディスクなどのハードが実際にどう動いているのかわかる。
c言語を使って実際にどんなシステムコールが飛びどんなプロセスが動くかなどなど。
シェルスクリプトの使い方というよりはまさにOSがどう動くか知りたい人におすすめ。
わかりやすい。
スッキリわかるSQL入門
sqlの入門〜中級からRDBの概念入門まで。
説明がわかりやすいだけじゃなくて問題が多いのが素晴らしい。
問題すべて解けばsqlの書き方は身に染み付き忘れててもすぐ思い出せるようになる
達人に学ぶDB設計 徹底指南書
RAIDなどのdb運用基本から始まりRDB正規化の話、アンチパターンっぽいテクニックまでRDB運用の話題が詰まっている。
テーブルの設計が必要なときなどに読むといい。
sqlは前提知識。
SQLアンチパターン
db設計やsqlのクエリ作成のアンチパターンが詰まっている。
インデックスの効率的な張り方から、同じように思えても実は性能やメンテナンス性が段違いなクエリまで様々。
普段何気なく行っていたことがアンチパターンだったりしておもしろい。
Webを支える技術 -HTTP、URI、HTML、そしてREST
webの歴史、プロトコルの隆盛まで盛々。
具体的にHTTPなどがRESTと関連してどう言った役割を担っているかなど。
webの全体仕様を把握するのに適しているが、いらないプロトコルの説明もあるのが鬱陶しい。
何年か前だとRESTを学ぶのに一番いい本だったが、今は他にいい本があると思う。
Web API The Good Parts
http通信には「お約束事」が多いがそれをひとまとめに学べる良書。
発行年は古いがそれでも学べることが多い。
ステータスコードが始まり命名の慣習やセキュリティ上守るべきことなどがコンパクトにまとまっている。
フロントエンド、サーバーサイドどちらも読んでおいたほうがいい。
実践Vim
この本読むまでは数字で何回コマンドを繰り返すべきかを考えながら書いていた。
しかし「繰り返して、やり直せ」の精神を推すこの本を読んでまあ確かにと思い適当にドットとuを繰り返すようになってしまった。
脳死でできるので楽。
初めて学ぶソフトウェアのテスト技法
この本を読むまでテストについてこれだけ考えるべきことがあるとは知らなかった。
いわゆるテスターと言われる人(ナンチャッテではなく)が考えるべきことが書かれている。
ここまで厳密にテストに立ち向かえている組織があるかは相当疑問だし、そもそも会社の規模やフェイズによって必要かも変わってくるので必須知識だとは思わない。
しかしテストフレームワークがこの本のような知識を前提にかかれていることもあるため、そのようなライブラリの理解には役に立ったりする。
ノンデザイナーズ・デザインブック
デザインというものは素人にとって何が正解で、何を基準に考えればいいかわからないがその原理原則を1から教えてくれる本。
多くの場合で守るべきことや、考える軸を提供してくれるので今まで意見しにくかったり考えづらかったデザイン周辺への第一歩を強く背中を押してくれる。
おすすめ。
リーダブルコード
コードの読みやすさなんて人によって変わるし、組織によってバラバラなのでこの本にかかれていることがすべてだとは思わないが、ある種聖書化してしまっている部分もあるので一回くらいは読んでおいてもいい。
またそもそもコードの読みやすさなんて意識したことがなかった人にとっては普通に役に立つのでおすすめ。
コードは命名がちゃんとなってればある程度どうにかなる。
かんたん UML入門[改訂2版]
ユースケース図などを書くときにUMLを書く必要が出る時があるが、案外UMLというのは具体期にどのようなものを表現するときにどの記号を使えばいいのかと言うのが難しかったりする。
正解は色々あるにせよ、この本で一定の書き方のルールを提示してくれるのでとりあえず一貫性を持って書きたいと言うときに読むといい。
仕事で始める機械学習
機械学習をどの様にビジネスに対して応用するかということに主眼を置いた本。
機械学習や統計学についての基本的な考え方は軽く説明はあるが、ほとんど省かれているので最低限の機械学習と統計学の理解はあった上で読むのがいい。
機械学習は理論的な面がどうしても先行するが、ビジネスをどう変えていくかという著者の感覚が学べるのが非常に大きい。
機械学習関係なく、ビジネスを動かすエンジニアになるために学べるものが多い。
パラダイム系
オブジェクト指向設計実践ガイド
Rubyで書かれたオブジェクト指向の本。
多くのオブジェクト指向の本はJavaで書かれているため、Javaのオブジェクト指向の思想に引っ張られがちだが、この本はより根本のそもそもオブジェクト指向はなんぞやという部分について書かれている。
どの言語でも適用できるような概念はいつまでも役立つため読むことを強くおすすめする。
私がコードを書くときに気をつけていることはせいぜいこの本に書かれていることで済む。
またオブジェクト指向の観点からテストの書き方についても述べられており、非常にためになる。
何が正解で不正解か考え始められる本。
マジおすすめ。
アジャイルソフトウェア開発の奥義
Clean Architectureの本などを書いているロバートさんが書いたデザインパターンの本。
アジャイルについて書かれている部分は、開発はどういった雰囲気で進んで行くのかということについて知りたいビジネスサイドの人が読んでも面白いかも知れない。
殆どがデザインパターンについて書かれている。
最近ではデザインパターンを使いすぎることはむしろアンチパターン感が出ているので読む意味はそこまで大きく無いかも知れない。
オブジェクト指向はとりあえず原理原則に準じるだけで必要十分。
純粋関数型データ構造
データ構造系の本は競技プログラミング系が多いがこれは関数型データ構造を扱う上での問題とその解決方法がまとまっている。
償却計算量について日本語でここまで詳細にまとまっているのはネット上含めこの本だけだと思われる。
内容については以下の記事が参考になる。
モノリスからマイクロサービスへ
最近バズワード化しつつあるマイクロサービスについてほんとにやるべき?みたいな部分から話が始まる。
実際にマイクロサービスへと移行するにあたっての移行手段のレシピだと思えばいい。
また実際にここにある手段は取らないにしろ、マイクロサービス移行で起こりうる問題集だとも見ることもできるので移行を考えている人はコスト算出の観点でも見るべき。
マイクロサービスパターン
イベントソーシング、サーガ、CQRSなどマイクロサービスで使用されるテックスタックを実装レベルでゴリゴリに書いている本。
パターン集なので自分たちに合う実装をここから抜き出して来るのが吉だと思われる。
この本の前に「モノリスからマイクロサービスへ」をまず読むことをおすすめする。
その後にどうやって実装するかを決める際にこの本が役に立つ。
UNIXという考え方
unixについての歴史とその思想。
プログラミングは作者の気持ちを考えるゲーなのでunix周りに関わることがあるときにどうすればunix wayなのかの判断材料になる。
またそもそもプログラマとしての持つべき考え方も詰まっているので、読むとボディーブローの様にあとで効いてくる。
Clean Architecture
巷ではアーキテクチャを表す円の図が独り歩きしているが大事なのは考え方。
変更容易性とデリバリーできる価値、関心事の分離と依存関係。
具体例としてプラクティスが乗っているがそれよりも大事なことがある。
よくわからない人は21章の叫ぶアーキテクチャだけでも読めばいいと思う。
ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本
DDDというのは壮大でどこから手をつけていいか困る概念ではあるが、この本を読めば実装パターンについては一通り理解ができとりあえず手を動かせる状態にはなる。
しかしこの本が主題としているのはいわゆるDDDの戦術的と言われる側面であり、DDDの本質はより大局を見据えた戦略的なものである。
この本で戦術的な部分を抑えつつ、エバンズなどで戦略的な部分を学ぶことをおすすめする。
開発プロセス・組織
アジャイルサムライ−達人開発者への道−
アジャイルは非常に抽象的な概念である。
そのため実際にアジャイルを回そうとしても困ってしまうことがままある。
この本はアジャイルの精神から実践のヒント、プラクティス例まで書かれているためどこから始めればいいかわからないときに読むといい。
ただし一番大事なのは鵜呑みにせずにどのプラクティスが自分たちの組織にあっているかを考えること。
アジャイルソフトウェア開発の奥義
アジャイルとか書かれているがほぼデザインパターンの本。
しかしアジャイルの概念について簡単に書かれているし、結構なボリュームで開発者の会話ベースでのアジャイル開発シーンが描かれている。
そのためアジャイル開発を現場レベルで知りたいビジネスサイドの人が読むといいと思う。
ヤフーの1on1
1on1を1から始めようとしたときに役に立つし、今の1on1を改善するためにも役に立つ。
この本を読めば1on1はメンティーではなくメンターが頑張るものだということがわかる。(もちろんメンターもがんばるのだが)
これをベースに自分たちにあった方式を探ると良い。