私がこれまでに読んでよかった技術書メモ

# 主旨

個人の振り返りとして、これまでに読んだ本の中で、学びが多かったレビューしていく記事である。
適宜更新予定である。

## ジャンル
- プログラム言語系(C#, Java, TypeScript, React)
- プログラムアーキテクチャ系(OOP, DDD)
- システム全般系、思想系
- 機械学習系
- マネジメント系、チームビルド系(追加更新予定)
- 英語系(追加更新予定)
- 文学系(追加更新予定)

## プログラム言語(C#, Java, TypeScript, React)
プログラマはプログラムを扱う以上、プログラム言語に精通している必要がある。
ただし、すべての言語について精通する必要はない。まずは、自身が仕事で携わっている言語について言語特性を知ることがよいだろう。

### [実戦で役立つ C#プログラミングのイディオム/定石&パターン](https://www.amazon.co.jp/%E5%AE%9F%E6%88%A6%E3%81%A7%E5%BD%B9%E7%AB%8B%E3%81%A4-C-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E3%82%A4%E3%83%87%E3%82%A3%E3%82%AA%E3%83%A0-%E5%AE%9A%E7%9F%B3-%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3/dp/4774187585)
C#に関する言語特性を学びたいのであれば、本書一冊で十分である。基本的な文法から、オブジェクト指向的な考えに触れることができるため、長期的なプログラマとしてのロードマップ形成にも役に立つであろう。

### [Effective Java 第3版](https://www.amazon.co.jp/Effective-Java-%E7%AC%AC3%E7%89%88-Joshua-Bloch/dp/4621303252/ref=sr_1_1?keywords=effective+java&qid=1645795570&s=books&sprefix=effec%2Cstripbooks%2C237&sr=1-1)
数あるEffectiveシリーズの中でも汎用性が高いと感じる。文法を学ぶというより、OOPでより良いプログラムを書くためには必読。OOPをより深く理解し、良いプログラムにすることを可能にしてくれる。

### [手を動かしながら学ぶ TypeScript](https://www.amazon.co.jp/%E6%89%8B%E3%82%92%E5%8B%95%E3%81%8B%E3%81%97%E3%81%AA%E3%81%8C%E3%82%89%E5%AD%A6%E3%81%B6-TypeScript-%E6%B8%A1%E9%82%89-%E6%AF%94%E5%91%82%E6%A8%B9/dp/4863543557)
フロントエンド側の環境構築に関する記載が優秀。従来、デスクトップアプリでWeb独自による全体の環境把握が行える良い書籍。TypeScriptの文法説明は可もなく不可もなく。

### [モダンJavaScriptの基本から始める React実践の教科書](https://www.amazon.co.jp/%E3%83%A2%E3%83%80%E3%83%B3JavaScript%E3%81%AE%E5%9F%BA%E6%9C%AC%E3%81%8B%E3%82%89%E5%A7%8B%E3%82%81%E3%82%8B-React%E5%AE%9F%E8%B7%B5%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-%E6%9C%80%E6%96%B0ReactHooks%E5%AF%BE%E5%BF%9C-Informatics-IDEA/dp/481561072X/ref=sr_1_1?keywords=%E3%83%A2%E3%83%80%E3%83%B3javascript%E3%81%AE%E5%9F%BA%E6%9C%AC%E3%81%8B%E3%82%89%E5%A7%8B%E3%82%81%E3%82%8B+react%E5%AE%9F%E8%B7%B5%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8&qid=1645796251&s=books&sprefix=%E3%83%A2%E3%83%80%E3%83%B3java%2Cstripbooks%2C183&sr=1-1)
Webが本業でなくても、JavaScript→jQuery→三大フレームワークの流れを感じることができる。本格的な状態管理ライブラリへのお触書もあるため、Web業界の最先端に追いついた気になるだろう。

## プログラムアーキテクチャ系(OOP, DDD)
プログラマは言語特性だけ知って入れば、優れたプログラムを作れるかといえば、間違いなくNOと言える。建築物にも、設計図や、設計図を作るための様々な手法が存在するだろう。システムも同様でアーキテクチャはある程度の規模のシステムを作る上では必須の知識だ。そしてそのアーキテクチャの根本にはOOPが深くかかわっていることが多い。OOPを制するはアーキテクチャを制するのだ。一部、関数型指向にシフトしているところもあるが、OOPを学ぶことは今でも重要である。
### [オブジェクト指向でなぜつくるのか 第3版 知っておきたいOOP、設計、アジャイル開発の基礎知識](https://www.amazon.co.jp/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%81%A7%E3%81%AA%E3%81%9C%E3%81%A4%E3%81%8F%E3%82%8B%E3%81%AE%E3%81%8B-%E7%AC%AC3%E7%89%88-%E7%9F%A5%E3%81%A3%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84OOP%E3%80%81%E8%A8%AD%E8%A8%88%E3%80%81%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E9%96%8B%E7%99%BA%E3%81%AE%E5%9F%BA%E7%A4%8E%E7%9F%A5%E8%AD%98-%E5%B9%B3%E6%BE%A4-%E7%AB%A0/dp/4296000187/ref=sr_1_1?keywords=%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%81%A7%E3%81%AA%E3%81%9C%E3%81%A4%E3%81%8F%E3%82%8B%E3%81%AE%E3%81%8B&qid=1645796755&s=books&sprefix=%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%2Cstripbooks%2C175&sr=1-1)
「10年後も通用する基本を身に着けよう」をスローガンに掲げる、なぜなぜシリーズの一冊。OOPの概念的な書籍のため、読んだだけでOOPが理解できるようにはならない。しかし、自身でのOOP実装と本書を組み合わせると、次々と理解できる部分が増えてくる。構造化プログラミングからOOPへのパラダイムシフトを手助けしてくれる。

### [なぜ,あなたはJavaでオブジェクト指向開発ができないのか~Javaの壁を克服する実践トレーニング](https://www.amazon.co.jp/%E3%81%AA%E3%81%9C-%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AFJava%E3%81%A7%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E9%96%8B%E7%99%BA%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%AE%E3%81%8B-Java%E3%81%AE%E5%A3%81%E3%82%92%E5%85%8B%E6%9C%8D%E3%81%99%E3%82%8B%E5%AE%9F%E8%B7%B5%E3%83%88%E3%83%AC%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0-%E3%82%A2%E3%82%AF%E3%83%AD%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%83%86%E3%82%AF%E3%83%8E%E3%83%AD%E3%82%B8%E3%83%BC%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BE/dp/477412222X/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=KLQV67K7ZYP1&keywords=%E3%81%AA%E3%81%9C%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AFjava&qid=1645797094&s=books&sprefix=%E3%81%AA%E3%81%9C%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AFjav%2Cstripbooks%2C192&sr=1-1)
ひとつ前の書籍は、概念と実装の比率が9:1に対して、本書籍は、3:7くらいである。二冊合わせて、概念と実装の両方からOOPを学べるので、併読がおすすめである。

### [オブジェクト指向のこころ](https://www.amazon.co.jp/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%81%AE%E3%81%93%E3%81%93%E3%82%8D-SOFTWARE-PATTERNS-%E3%82%A2%E3%83%A9%E3%83%B3%E3%83%BB%E3%82%B7%E3%83%A3%E3%83%AD%E3%82%A6%E3%82%A7%E3%82%A4/dp/4621066048/ref=sr_1_1?crid=24DV88PW8UP6L&keywords=%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%81%AE%E3%81%93%E3%81%93%E3%82%8D&qid=1645797441&sprefix=%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%81%AE%2Caps%2C173&sr=8-1)
OOPの概念から生まれたデザインパターンを知ることで、さらに概念の中心にあるOOPを深く学ぶことができる。概念的に理解してきたOOPを、本書にて体系的に知識にすることができる。深くOOPを知ることがDDDなど次のステージに進むことを助けてくれる。

### [ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本](https://www.amazon.co.jp/%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E8%A8%AD%E8%A8%88%E5%85%A5%E9%96%80-%E3%83%9C%E3%83%88%E3%83%A0%E3%82%A2%E3%83%83%E3%83%97%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8B-%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E8%A8%AD%E8%A8%88%E3%81%AE%E5%9F%BA%E6%9C%AC-%E6%88%90%E7%80%AC-%E5%85%81%E5%AE%A3/dp/479815072X/ref=sr_1_4?keywords=%E5%AE%9F%E8%B7%B5%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E8%A8%AD%E8%A8%88&qid=1645797825&sprefix=%E5%AE%9F%E8%B7%B5%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%2Caps%2C190&sr=8-4)
業務系アプリケーションにおける、ビジネスロジックの複雑性を扱うエンジニアなら、必ずDDDはあなたの武器になる。
邦書ということもあり、DDDは本書から入るのがおすすめ。レポジトリパターンによる、DBの抽象化とモジュールの疎結合からの生まれるビジネスロジックの自動テスト化はあなたの仕事を根本的に楽にする。

## システム全般系、思想系
これらの書籍からは、もっと思考を上流に寄せて、プログラマのあるべき姿や、どのように仕事を続けていくべきか、自身のエンジニアとしての人生について、学べることが多いだろう。
### [達人プログラマー(第2版): 熟達に向けたあなたの旅](https://www.amazon.co.jp/%E9%81%94%E4%BA%BA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC-%E7%AC%AC2%E7%89%88-%E7%86%9F%E9%81%94%E3%81%AB%E5%90%91%E3%81%91%E3%81%9F%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AE%E6%97%85-David-Thomas/dp/4274226298/ref=sr_1_1?keywords=%E9%81%94%E4%BA%BA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC+%E7%AC%AC2%E7%89%88&qid=1645798330&sprefix=%E9%81%94%E4%BA%BA%2Caps%2C223&sr=8-1)
プログラマの聖書。哲学、アプローチ、ツール、プロジェクト…プログラマとしてどうあるべきかを示してくれる人生の一冊。

### [レガシーコードからの脱却 ―ソフトウェアの寿命を延ばし価値を高める9つのプラクティス](https://www.amazon.co.jp/%E3%83%AC%E3%82%AC%E3%82%B7%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89%E3%81%AE%E8%84%B1%E5%8D%B4-%E2%80%95%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E5%AF%BF%E5%91%BD%E3%82%92%E5%BB%B6%E3%81%B0%E3%81%97%E4%BE%A1%E5%80%A4%E3%82%92%E9%AB%98%E3%82%81%E3%82%8B9%E3%81%A4%E3%81%AE%E3%83%97%E3%83%A9%E3%82%AF%E3%83%86%E3%82%A3%E3%82%B9-David-Scott-Bernstein/dp/4873118867/ref=sr_1_1?crid=UPIRIKRXKH5L&keywords=%E3%83%AC%E3%82%AC%E3%82%B7%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89%E3%81%AE%E8%84%B1%E5%8D%B4+%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E5%AF%BF%E5%91%BD%E3%82%92%E5%BB%B6%E3%81%B0%E3%81%97%E4%BE%A1%E5%80%A4%E3%82%92%E9%AB%98%E3%82%81%E3%82%8B9%E3%81%A4%E3%81%AE%E3%83%97%E3%83%A9%E3%82%AF%E3%83%86%E3%82%A3%E3%82%B9&qid=1645798529&sprefix=%E3%83%AC%E3%82%AC%E3%82%B7%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89%E3%81%AE%E8%84%B1%E5%8D%B4%2Caps%2C160&sr=8-1)
システムにおける、開発と保守のコストを下げるためには何が必要なのか。工業的産業でうまくやっていた方法で情報的産業を行ってもなぜ上手くいかないのかを示してくれる。1章の書き出しは「何かが間違っていた。」である。あなたにも感ずるところはあるのではないか。

### [アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣](https://www.amazon.co.jp/%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E3%83%97%E3%83%A9%E3%82%AF%E3%83%86%E3%82%A3%E3%82%B9-%E9%81%94%E4%BA%BA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AB%E5%AD%A6%E3%81%B6%E7%8F%BE%E5%A0%B4%E9%96%8B%E7%99%BA%E8%80%85%E3%81%AE%E7%BF%92%E6%85%A3-Venkat-Subramaniam/dp/4274066940/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1KNO0U3913L5V&keywords=%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E3%83%97%E3%83%A9%E3%82%AF%E3%83%86%E3%82%A3%E3%82%B9&qid=1645799523&sprefix=%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E3%83%97%E3%83%A9%E3%82%AF%E3%83%86%E3%82%A3%E3%82%B9%2Caps%2C180&sr=8-1)
達人プログラマのコミカル&簡易版といえる。現在の開発プロセスがウォーターフォールだから、活かせないと勘違いしてはいけない。アジャイル的な考えは優れたプログラムを生み出すためには必須だし、いかなる時でも活かせるプラクティスなのだ。

## 機械学習系
### [スッキリわかるPythonによる機械学習入門 (スッキリわかる入門シリーズ)](https://www.amazon.co.jp/%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8BPython%E3%81%AB%E3%82%88%E3%82%8B%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E5%85%A5%E9%96%80-%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E9%A0%88%E8%97%A4%E7%A7%8B%E8%89%AF/dp/4295009946/ref=sr_1_1_sspa?keywords=python+%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92&qid=1645799717&sprefix=pyton%2Caps%2C171&sr=8-1-spons&psc=1&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUEzRU00QzhaVldXMzhWJmVuY3J5cHRlZElkPUEwMjYwOTE5MVdGSFQ5Q1hRNExZTyZlbmNyeXB0ZWRBZElkPUEyRjZRRlJWSEE0VTU3JndpZGdldE5hbWU9c3BfYXRmJmFjdGlvbj1jbGlja1JlZGlyZWN0JmRvTm90TG9nQ2xpY2s9dHJ1ZQ==)
機械学習のさわりを学びたいのであれば、本書で十分。scikit-learnを用いて、機械学習の手法から、データ整理→学習→評価→チューニングの流れを実際に手を動かすことで学ぶことができる。

## マネジメント系、チームビルド系(追加更新予定)
### [Team Geek ―Googleのギークたちはいかにしてチームを作るのか](https://www.amazon.co.jp/Team-Geek-%E2%80%95Google%E3%81%AE%E3%82%AE%E3%83%BC%E3%82%AF%E3%81%9F%E3%81%A1%E3%81%AF%E3%81%84%E3%81%8B%E3%81%AB%E3%81%97%E3%81%A6%E3%83%81%E3%83%BC%E3%83%A0%E3%82%92%E4%BD%9C%E3%82%8B%E3%81%AE%E3%81%8B-Brian-Fitzpatrick/dp/4873116309)
この体系の書籍の中では、一番コミカルな書籍。かなりソフトウェア寄りなところが、プログラマでも共感しやすく、面白い。一番刺さるのは、ソフトウェア開発のチームリーダー的なポジションの人だと思う。