読んでよかった読み物（2018-2021)

#はじめに

筆者が読んで良かったものを回顧する。
※昔書いたやつ（[未経験から4年働きながら、読んでよかった読み物](https://qiita.com/Nao9syu/items/0bedec7a749ab2d8123a)）

#評価目安
URL貼ってある：Webで公開されているページ。書籍化もあったりすることも。
URL貼ってない：書籍。

難易度
　★★★・・・初学者には読むのが少し辛い
　★★☆・・・初学者でも普通に読める
　★☆☆・・・初学者でもまあ楽に読める
　？？？・・・内容の難易度にバラツキがある

優先度
　★★★・・・6ヶ月以内に読んどくべきだった
　★★☆・・・24ヶ月以内に読んどくべきだった
　★☆☆・・・急ぐ必要はないが読んで良かった
　？？？・・・人によっては明らかに不要かも（筆者には良かったと思う）

#ソフトウェア設計

####Java言語で学ぶデザインパターン入門
難易度★★☆
優先度★★☆

パターンとして知って認識すれば、車輪の再発明を毎回しなくてよいので楽ができる。
サンプルがJavaなだけで、ほとんどの言語に通用する概念。
無理して全部使いこなす必要なないけど、知っておくと楽。


####Java言語で学ぶデザインパターン入門　マルチスレッド編
難易度★★☆
優先度★☆☆

デザインパターンのマルチスレッド編。
確かにそういう使い方するよなっていう復習になった。

###Clean Architecture　達人に学ぶソフトウェアの構造と設計
難易度★★☆
優先度★★☆

有名なSOLIDパターンとか依存関係楕円の本。
モジュールの依存の方向性を管理することの重要性と手段について。
歴史的背景もよき。
プログラムの分類とか宣言型、構造型、関数型とか。
昔はテープ使ってた話とか。ビジネスロジックは保存先がテープとかHDDの詳細を知らなくていい。すげ替えらえっるようにしなければならない。

###アジャイルサムライ――達人開発者への道
難易度★☆☆
優先度★★☆

アジャイルの本。
コミュニケーションとか見積など、人間がかかわる部分についての方法論が多い。
全体的に理想水準が高い気がするけども、プロジェクトの選択肢として知っておいて損はないと思う。

###５０（フィフティ）　いまの経済をつくったモノ
難易度★☆☆
優先度☆☆☆

人類史における50の発明を紹介している。読み物として面白かった。
IT系では公開鍵暗号とかiPhoneとか載ってる。
人類史という俯瞰した観点からのITの立ち位置を見れる。

###レガシーコード改善ガイド: 保守開発のためのリファクタリング
難易度★★☆
優先度★★☆

ユニットテストのメリット説明と大量の事例集。
ユニットテストがないプロジェクトは全てレガシーだと断言し、
レガシーにいかにしてユニットテストを差し込むかという内容。
内容は正しいと思うが、常にコストを払うことを正当化できるとは思えなかった。
筆者はひたすらログ出力して、エラーがわかるようにして対応している。楽だし。
ユニットテストは文字列or数値を返す関数に対しては強いと思う。
筆者も昔、BNFで簡易言語を作った時はユニットテストと知らずに実装していたので強力なのはよく分かる。

###リファクタリング第二版
難易度★★☆
優先度★★☆

リファクタリング方法について網羅している。
著者も言及しているが、規模や状況でリファクタリングの仕方は変わるので、
選択肢として幅広く知るために読むといいと思う。
筆者はリファクタリングを良くしているので再確認くらいの気持ちで読めた。

#その他ドメイン

###「ものづくり」の科学史　世界を変えた《標準革命》
難易度★☆☆
優先度？？？

ねじ、鍵穴、銃、USB、qwertキーボードなどの規格の歴史をなぞる。
工学・品質・効率化などのテーマはIT分野とも密接にかかわるため、知っておくと知識の深みが出る。
原著者が日本人のため、翻訳ロスがゼロで読みやすく面白い。

###1ダースなら安くなる
難易度★☆☆
優先度☆☆☆

作業解析者ギルブレス（と家族）の伝記小説。
ギルブレスはテイラーと同時代の同業者であり、作業効率化という分野の先駆者である。
テイラーより早死にしたから、知名度は低い。
wikipediaによると、おそ松くんの元ネタとされる映画の原作らしい。
時代背景の教養にはなるが、わざわざ入手して読むほどではない。
ギルブレスの偉業については上述の『「ものづくり」の科学史』のほうが詳しく書いてある。

###人工知能は人間を超えるか
難易度★☆☆
優先度？？？

概要本なので、特に難しい数式は出てこない。
畳み込みニューラルネットワークで技術ブレイクしたとか、それまでの停滞とか。
読んだからと言って、機械学習の何かができるわけではない。
実装するだけなら、Kaggleチュートリアルとか読んだ方がいい。
機械学習に関わる（つもり）なら教養としては読んで損はない本だと思う。

###デッドライン
難易度★☆☆
優先度☆☆☆

デマルコ本。
プロジェクトの見積は難しいし、利害関係も複雑だ。
でもプロジェクトを成し遂げるには知恵を絞って何とかしないといけない、という馴染みの内容。
ラノベっぽいフィクション。
（異国誘拐されたら、炎上プロジェクト責任者に任命された件）

#その他

###Factorio
難易度★★★
優先度★★☆

PCゲーム。
面白いし、システム学習の教材としても優秀だと思う。
ロケットを打ち上げる（クリア）まで苦しむと、「スケール」という言葉の意味が実感として理解できる。
攻略情報なしでクリアできる人はシステム構築の天才か達人だと思う。
筆者は30時間くらい遊んでから攻略動画を見始めて、55時間でロケットを打ち上げました。
8時間クリア動画を見ると、設計・計画・下準備の段階で大きく差がつくことがよくわかる。

###他にも読んだもの
Andoroid入門、Unity入門、Swift入門、機械学習入門とかも読んだ。
立ち読みしてから購入するからハズレは引いてないけど、入門系統は人に勧めるのは難しい。
実装系はVersion更新で時代遅れになりがちだし。
他にも技術士補のために図書館で雑多にたくさん借りて読んだ。

###[erukiti氏おすすめ](https://note.com/erukiti/n/nbf7c7f898299)
この記事の4冊を当記事に含んでいる。
2020年12月に記事を読んで、感化されたので買い集めて読んだ。
（クリーンアーキテクチャは既に読んでいたので全体の期待値が高かった。）
コーダーからアーキテクトへと進歩するための、良書セレクションだと思う。

過去に作った中規模程度のシステムソースをを読書後に見直すと、ひどくて直したくなる部分が多かった。
保守対応部分だけ直したが、どう分離するべきかの検討が楽にできたのは読んだおかげだと思う。

>（引用）
>僕がこの4冊に込めた裏テーマが分かったことでしょう。
>それは、リファクタリング及び、それを支えるための自動テストです。

>設計が分かれば自動テストしやすい設計をできるようになりますし、
>レガシーコード改善ガイドを読んでいれば、
>テストのない状況からテストを書けるようになり自動テストを生み出せるはずです。
>自動テストがそろえば、不吉な匂いを嗅ぎ取って安心してリファクタリングを行えるでしょう。

>リファクタリングは呼吸をするかのごとく、水を飲むかのごとく、当たり前にできて然るべきです。