ソフトウェアエンジニアにおすすめしたい本を100冊選んでみた

本棚から本を選ぶ人
Adobe Firefly で生成

PdMむけの記事でこのような記事がある。

「プロダクトマネージャーこそ、戦略的に読書せよ!」── 最短で成果を出すための読書地図 (1/6)|ProductZine(プロダクトジン)

これのエンジニア向けの記事がないかなと思っていたがなさそうだったので作ろうと思った。しかし客観的な視点でこれがおすすめというのは難しいので自分が参考になったと思った本を家の本棚を見ながらまずは100冊リストアップしてみた。

紹介する本は10年読まれていたり、近年発売のものであれば10年後にも読まれているだろうというものを選ぶようにしている。個別のプログラミング言語やフレームワークなどの本はバージョンアップに追随ができないことが多いので選んでいない。

入門本

定番中の定番。おそらくこの2冊はあちらこちらで紹介されている。とりあえず読んでおいて損はない。

コンピュータサイエンス教科書

大学生向けのコンピュータサイエンスの本もたくさんあるが、手にとって読みやすいものを考えるとこれかなと。

コンピュータ

コンピュータ自体の知識は入門として『コンピュータ、どうやってつくったんですか?はじめて学ぶ コンピュータの歴史としくみ』を導入にして他2冊を読むのがよさそう。

ソフトウェアエンジニアリング

ソフトウェアエンジニアリングに関連する本としておすすめできそうな本が 2 冊あったのでこちらも紹介。Google本は10年後には古くなっていそうな気がするが、『実践ソフトウェアエンジニアリング』は大学で教科書として使われたり改訂を重ねているので問題ないだろうと思っている。また守備範囲も広いためおすすめがしやすい。 この数年 4keys だったり、価値あるプロダクトを高速に届ける組織がどのようなことをしているかとういうことに関心が集まっている。『Lean と DevOps の科学』は必読書となっており、このレポートとその後継続して発表されているDORAのレポートは追いかけておくべきだろう。

コーディング

『リーダブルコード』が定番ではあるが、それとは別の本をといったときに近年は紹介できる本が増えたのでこのあたりを読むとよさそう。また変わり種ではあるが、『コーディングを支える技術――成り立ちから学ぶプログラミング作法』はとてもおすすめである。

アルゴリズム/データ構造

大学でアルゴリズムの勉強をしたがそのときは教科書の指定がなかった。また自分の本棚を見ても本はなかった。唯一あったのが『みんなのデータ構造』。分厚くもなく読みやすい本なのでとてもおすすめである。全部読まなくてもまずは興味を持った内容から読める本でもあるので1冊手元においておきたい。

設計

設計に関連する本も近年とても増えた。どれから読んでも問題はないが、『ちょうぜつソフトウェア設計入門』、『現場で役立つシステム設計の原則』、『オブジェクト設計スタイルガイド』の 3 冊から読むのがおすすめである。『データ指向アプリケーションデザイン』はとても分厚いし、『A Philosophy of Software Design』は英語なのであとで読むで問題ないかと。

アーキテクチャ

アーキテクチャについての本を家の本棚の中を見返すとこの4冊はよさそうだった。アーキテクチャ、設計(パターン)の分類の違いはなにかと問われると難しいがなんとなくで分けているので深追いはしないでほしい。

データモデリング

上手に設計ができるようになるためにはシステムを作る対象のドメインに詳しくなり、モデリングができるようにならないといけない。この分野のあまりたくさんの本は読んでいないがこの2冊に自分は影響を受けた。

テスト

作るものの品質を高めるため、高速に学習のフィードバックループを得るためにはテスト、TDD などは絶対に必要である。そのなかでもこの4冊に影響を受けている。『テスト駆動開発』から入り『単体テストの考え方/使い方』でテストについて深く考え、『Agile Testing Condensed Japanese Edition』『ソフトウェア品質を高める開発者テスト』でチームで品質を担保するためにはどのようにテストを捉えればいいのかが学べる。

キャリアパス

エンジニアになってからどのようなキャリアパスを進むかなんてほとんど考えてはいないが、世の中にはどのようなキャリアパスがあるのかを知っておいて損はない。この2冊がおそらく定番の本ではあると思われる。まあ数年後にはまた聞いたことがない肩書などが増えていると思われるのでその都度アップデートは必要になるだろう。

マネジメント

昨今エンジニアリングマネージャーにフォーカスされることがある。またキャリアパスとしてマネジメントに進む知り合いもたくさんいる。マネジメントの道へ進むときに参考になる本。マネージャーと協力して仕事を進めていく経験は誰しもがすることではあると思うのでマネージャーがどのような仕事をするのかを知っておくのは無駄なことではない。

リーダーシップ

キャリアを重ねていくとリーダー的なポジションに付くこともあるだろう。そのときにリーダーとしてどのような振る舞いをすべきなのかを学ぶにはこの 3 冊がおすすめ。『エラスティックリーダーシップ』は絶版になってしまっているので見つけたら即買うといいですよ。

見積もり

何人で何ヶ月ぐらいでできますかと見積もりを聞かれることはたくさんあると思います。またプロジェクトが遅延していると人を追加して解決することがありますがそれはアンチパターンです。なぜ見積もりが難しいのか、追加することがでかえって遅くなってしまうのかについては人類の叡智がすでにあるので勉強することで不確実性と戦っていけるでしょう。

データベース

RDB に関連する本しか選んでいないのはそれ以外の DB を長く使う機会がなかった。そして RDB はずっと触れていて枯れている技術なので、1度覚えると長く使える知識でもあるのでコスパがよい。『理論から学ぶデータベース実践入門』『SQL 実践入門』でSQLやデータベースの基礎知識を、『SQL アンチパターン』『失敗から学ぶ RDB の正しい歩き方』でアンチパターンを勉強するのがおすすめ。

エクストリーム・プログラミング

プログラマーのプラクティスとして『エクストリームプログラミング』はとてもおすすめの1冊である。またXPの歴史や背景については『パターン、Wiki、XP』は名著だと思うのでぜひ読んでほしい。

スクラム・アジャイル

アジャイルやスクラムについてはとてもたくさん本が出ているがまずは、『アジャイルサムライ――達人開発者への道』『SCRUM BOOT CAMP THE BOOK』を読んでほしい。そこから興味を持ったら他の本へ当たるのがよいかなと。

UNIX

どこに分類するか迷って謎のセクションを作ってしまった。名著でありいろいろな人が勧めているだけあってとてもよい本。安くて手に入れやすく、薄くて読みやすいが内容はとても濃い一冊。

セキュリティ

セキュリティにつていはこの本が一番有名でありまずはここから抑えよう。それ以外に関しては本よりもニュースなどで見ていることが多い気がする。

インターネット

Webサービスを作っているとその基盤になっているインターネットやHTTP、URIなどについて学ぶ必要は出てくる。そのときにはこの2冊がおすすめ。

HTML/CSS

ブラウザのHTML、CSSを避けて通ることはできないと思う。なにか選べと言われたらこの2冊かな。

パフォーマンス・チューニング

データ量が増えた結果パフォーマンス・チューニングを頼まれることもあるでしょう。推測せず計測してボトルネックを解決して行く必要がある。ボトルネックを解決する手段としてバックエンドとフロアライトエンドのおすすめの本としてはこれらがあるかな。

アクセシビリティ

近年のホットトピックの1つでもあるアクセシビリティはこの本が1番よさそう。他に類書を見ない。今後増えていくのかな。

レガシーコード

仕事をしていればレガシーコードと向き合っていかないといけない。そんなときに助けになる本。とくに『レガシーコードとどう付き合うか』はなぜ最初からきれいに設計することができないのかをビジネスの視点も含めて書かれておりとてもよい。

OSS

OSSのプロダクトは絶対に使うと思う。なぜソースコードがオープンになっているのかどういう経緯でオープンな文化が形成されてきたのかは考えることが少なかもしれない。そんなときに読むとよさそうな3冊です。

プロダクト開発

ソフトウェアを作っても使われないと意味がない、企業として利益を得ることができないと自分のお給料を得ることはできない。そうするとプロダクト開発についても学習する必要がある。最近はPdMというロールについても盛り上がりがあり、本もたくさん出ているので学習しやすくなった。とくに『プロダクトマネジメント ―ビルドトラップを避け顧客に価値を届ける』はまずは読んでほしい本。

デザイン

プロダクト開発をしているとデザイナーとコミュニケーションをする必要がある。またデザインレビューでコメントする必要があったりする。そのときにデザインに関する知識があったほうがいい。基礎的な知識としてまずは『ノンデザイナーズ・デザインブック』を読み、『ザ・ダークパターン』でよくないデザインについて学ぶのがよいかなと思う。

情報設計

データ構造が複雑になったり、画面の情報が複雑になったりしていくのはなぜなのかと考えると情報設計が上手にできていないことが多い。『今日からはじめる情報設計』は薄くてとっつきやすい。これを読んだ後に白熊本と言われる『情報アーキテクチャ 第4版』を読むとより詳しく勉強ができる。

ドキュメントライティング

プログラム以外にもドキュメントを書く機会はとても多い。読みやすい文章を書くためには読みやすい文章構造はどうなっているか知る必要がある。たくさん本は出ているが個人的に好きなこの2冊がおすすめ。

エッセイ

エンジニアの書いたエッセイを読むとモチベーションがあがる。近年こういうエッセイはあまり出版されていない気がするので古い本が多くなってしまう。どれも色々なところで言及される本でもあるので読んでおいて損はない。

仕事で役に立つ

プログラムが書けるようになることは必須だが、それとは別にソフトスキル、ビジネススキルも同様に大事。たくさんおすすめしたいものはあるが厳選してこの10冊にしてみた。『ライト、ついてますか 問題発見の人間学』『イシューからはじめよ――知的生産の「シンプルな本質」』などはオールタイムベストで好きな本でもあり、『独学大全』は生きていくうえで新しいことを学ぶ必要はずっとあるので生きていくのに役立つ本。 この記事の全体通して役に立つ『「技術書」の読書術 達人が教える選び方・読み方・情報発信&共有のコツとテクニック』も普段読書をしない人におすすめしたい1冊である。


今回選ばなかった本

DDD

エリック・エヴァンスのドメイン駆動設計』『ドメイン駆動設計入門』なども読んだが、実践してみようとはあまり思えず、経験がとても少ないので今回は選ばなかった。

インフラ

オンプレ、レンサバ、クラウドなど幅広くあり10年後に生きている知識を考えると自分が自信を持って勧めることができる本がなかったので諦めた。

機械学習・人工知能

ゼロから作るDeep Learning』や『ITエンジニアのための機械学習理論入門』などエンジニア向けのものはあるが、変化が激しく最近の本は読んでいないので選ばなかった。

デザインパターン(GoF)

Java言語で学ぶデザインパターン入門第3版』『Head Firstデザインパターン 第2版 ―頭とからだで覚えるデザインパターンの基本』などアップデートされている本も出てはいるが、GoFのデザインパターンなどは現代では特別視するものではなく自然と使っていたりすると思うので今回は選ばなかった。

オブザーバビリティ、SRE

入門 監視』や『SRE サイトリライアビリティエンジニアリング』など定番そうな本はあるが自分は詳しくないので選ぶのをやめた。


選んでみた感想

仕事を初めて10年でいろいろな本に影響を受けていることが改めてわかった。選んだ結果、アルゴリズムやOSについての勉強を全然やっていないし、セキュリティについての本も全然読んでいないことがわかった。このように振り返るといろいろと知っていることはいいことでもあり、自分が何を知らないのか俯瞰してみることができるのでみなさんも100冊とは言わないが選んでみてほしい。

もちろんここに選んでいないがおすすめしたい本は他にもある。それは別の記事で紹介する。

今回の記事で選んだ本は自分にはよかった本である。本は万能薬ではないので人によって合う合わないがあると思われるのでこの記事を読んで買って読んでみたがおもしろくなかったと思うこともあるだろう。時間をおいて読んだら助けられたという経験をすることもあるかもしれない。

次はこれらをマップにしてどういう順番で読むのがおすすめなのかを可視化してみたい。