個人的にオススメの技術書3選

こんにちは。最近コードレビューばかりしている平井です。

今回は、自分が持っている技術書(技術関連書)の中から個人的にオススメの書籍を3冊紹介したいと思います。
読者の方にとって、なにかしらの役に立ったら幸いです。

1冊目は『SOFT SKILLS』です。
SOFT SKILLSで一番オススメなのは第三部の「学ぶことを学ぼう」です。*1
自分が新卒で入社した会社での技術研修は、フルスタックエンジニアを目指そうという内容のものでした。
そのため、研修期間で学習する項目*2が多く、一週間から二週間でひとつの技術を習得する(基礎を勉強して課題を解決するアプリをつくる)というのを何回もやるスケジュールでした。
そのようなスケジュールだと、基礎、すなわち基本的な概念やユースケースをドキュメントやチュートリアル、サンプルなどで学習すること、課題を解決するための(アプリをつくるための)おおまかなプランを素早く立ててそれをスコープ分割しそのスコープごとに登場するミニ問題をひとつひとつ解決すること(ウェブで検索して情報収集しIDEなどで作業すること)をある一定以上の効率性をもってやらないといけません。
このアプリ開発の難易度は何で決まるのかということを考えると、色々な観点がありますがたとえばそれはアプリを開発するのに要求される知識量に依存します。
ここでいう知識は、開発するアプリがよりビジネス的だったりすると、技術的知識だけでなく業務知識も含まれてきます。
このように時間的な制約がありそれを緩和できない場合、学習する内容が多くなるほど、学習の仕方、学習の効率が重要になってきます。
SOFT SKILLSの第三部の前半ではそんな学習の仕方、学習の効率に関する有益なヒントが書かれています。

2冊目は『Clean Architecture』です。
いまのチームで数年前*3にソフトウェアアーキテクチャを勉強するために読んだ書籍のうちの一冊です。
内容はほとんど忘れてしまいましたが、唯一覚えているのは依存方向を一方向にすることの大切さです!
これは「第11章 DIP:依存関係逆転の原則」に書かれています。
もちろんこのほかにもソフトウェアアーキテクチャに関する有益な考え方が数多く書かれています。
個人的な感想ですが、ソフトウェアアーキテクチャに関する本は分厚かったり退屈な部分が多かったりしてだいたい掬読だったのですが、『Clean Architecture』は唯一通読できました。

3冊目は『デバッグの理論と実践』です。
これを読んだのは結構昔で自分が大学の研究室に所属してるとき(2012~2015)です。
当時の自分はゲームをプレイするプログラムの研究をしていました。
評価関数を作成するために機械学習を利用していて、ゲームのプログラム同士を対戦させて、どういったゲーム状態でどういった選択をしたか、その結果そのプレイヤーの順位はどうだったかといったデータを収集していました。
収集したデータをニューラルネットワークにおける誤差逆伝播法に使用できるように加工するプログラム、ゲームをプレイするプログラムなど色々なプログラムを書いてたのですが、コンパイルして結果を確認すると想定と違うことが多々あり、それによりデバッグすることが多々ありました。
最初はなんとなくデバッグしていたのですが、デバッグで苦戦することが多く、探して買って読んだのが『デバッグの理論と実践』です。
「ソースコードのうち、どの行までは正常で、どの行から異常なのか、バグはどの行にあるのか」みたいな基本的な考え方を経験だけでなく書籍からの知識としても学習したのがこれが最初だったと思います。
学生のときもそうですが社会人となっても全知全能でない一人間である不完全な自分がプログラムと向き合っているかぎり、エラー、それを引き起こした原因であるバグとの遭遇は日常茶飯事です。
そんなエラーやバグに対して、「うわ〜」とネガティブに捉えるか、自己成長のためのパズルだと思って楽しもうとポジティブに捉えるか(捉えられるか)は大きな違いです。
『デバッグの理論と実践』を読んでデバッグの真髄に触れ、デバッグが得意になると、エンジニア、プログラマーとしてハッピーになれるのかなーと思います。

*1:自分が持っているのは第一版で、第一版第三部「学ぶことを学ぼう」は第二版では第三部「学習」となっています。

*2:この研修期間で初めてウェブサイト、iOSアプリ、Androidアプリをつくりました。

*3:次世代システムをつくろうとなってマイクロサービスなどを中心にソフトウェアアーキテクチャを勉強していた時期