I. はじめに
今回は、私がエンジニアをやってきた中で本当に役立った本を紹介します。
正直これらの本なしに今の自分はなかったと言っても過言ではない本の数々です。
これらの本で私が得られたのは
- 時代と技術にとらわれないポータブルなスキル
- プログラムに関する広く深い知識
- 生産性の高いコードを書く技術
- etc.
などなど様々です。
これを読んだあなたが3年後、5年後、そして10年後に本当に読んでいて良かったと思えるような深い本だと思っているので是非一読いただければと思います。
II. 一生使える技術
CODE COMPLETE 完全なプログラミングを目指して 上・下
コードを書いたり設計をする際に必要なことが網羅的に書かれています。万人におすすめできる良書です。例えば以下のような項目が網羅的に解説してあります。
- 設計
- クラス
- 関数
- デバッグ
- 変数
- 命名
- データ型
- 条件文
- Bool
- ソフトウェアの品質
- リファクタリング
- チューニング
全体がよく整理されてをりとても読みやすく、また必要な項目のみをつまみ食いの形で読めるようになっています。
プログラミングでは右か左かのようなどちらが正しいのか悩ましい問題に遭遇することが多いが、そのような事柄に関して、実際に行われた調査等を元に何が望ましいかなどを解説していて、内容にとても説得力があります。
CODE COMPLETE 第2版 上 完全なプログラミングを目指して
CODE COMPLETE 第2版 下 完全なプログラミングを目指して
アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技
この本は、アジャイルの本ではなくデザインパターンの本です(誤解を恐れずに言えば)。
ソフトウェア開発における重要な概念である
- 単一責任の原則(SRP)
- オープン・クローズドの原則(OCP)
- リスコフの置換原則(LSP)
- 依存関係逆転の原則(DIP)
- インターフェース分離の原則(ISP)
の解説と、それらを実現するためにどのようにデザインパターンを使うかの解説がされています。デザインパターンの本としてよく引き合いに出されるオブジェクト指向における再利用のためのデザインパターンよりデザインパターンを学ぶのには適しているのではと思います。
ただし、かなり概念的な解説なので実際にデザインパターンを実践で使うには、各々の使用言語で書かれたサンプルや記事などを見て追加で学習する必要があるかもしれません。
アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技
達人プログラマー 職人から名匠への道
本質的にプログラムはどのようなものであるか、本質的にどのようなスタンスとスタイルで開発すべきかという概念的なことに関する解説の本です。CODE COMPLETEに近い分野をカバーしていますが、こちらはより概念的な解説に寄っています。CODE COMPLETEと対比させながら読むのも面白いと思います。
ちなみに上・下巻にわたる巨大なCODE COMPLETEと比べるとこの本の厚さはその半分以下なので、比較的短い時間で読破できると思います。
Clean Code
アジャイルソフトウェア開発の奥義を書いたRobert C. Martinの著書です。この本はアジャイルソフトウェア開発の奥義と比べより具体的なコードに近い部分のテクニック等が解説されています。書籍の命名の通りクリーンなコードを書くために技術が書かれています。
具体的には以下のようなトピックをカバーしています。
- 命名に関して
- 関数
- コード上のコメント
- コードのフォーマット
- オブジェクトとデータ構造(Classの中の設計等)
- エラー処理
- Unitテスト
- クラス
- etc.
特にコードのフォーマットに関する部分は、他の書籍ではなかなか触れられていない部分ですが、非常に参考になりました。Linterが機械的に判別できない部分で、いかにコードを分かりやすくするかという内容が書かれています。
リファクタリング―既存のコードを安全に改善する
コードを書いている時、AとBのような複数の実装方法が考えられ、それぞれがその方法で実装するのに合理的な理由をもっているという状況に遭遇することは多々あります。
例えば以下のような事柄です。
- あるメソッドをクラスXに持たせるかクラスYへ持たせるか
- 関数へ引数を3つ渡すか、それら3つのフィールドを持った1つのオブジェクトを渡すか
- ある処理のまとまりを関数として分離するか、しないか
開発をしたことがある人ならば少なからずこのような問題に遭遇したことがあると思います。
また、物事は常にトレードオフで何かの正しいと言われているルールを優先すると、別の何か正しいと言われているルールに違反してしまうような問題が起こることはよくあります。
この本はそのような状況の時、どちらの方法を選ぶべきか、そしてその理由を述べて解説をしています。
この本は私自身が今でも実装で迷った時によく参照する本のうちの一つです。
エリック・エヴァンスのドメイン駆動設計
User modelやPost(投稿) modelを作るというプロセスは、開発をする上で皆が当たり前のように行なっている作業ですが、これは広義に行けばドメイン駆動設計の一部と考えられます。
おそらくこの本はそのような設計プロセスを初めて体系的に紹介した本だと思われます。ドメイン駆動設計のアンチパターンとしてUser modelやPost modelを作らず(この記事の著者の想定では)、プロジェクトのレイヤー化もせずに全てをUIに入れて作成するスマートUI(賢いUI)というものを紹介しています。
この本はビジネスの要求を噛み砕きそれをUserやPostのようなモデルへ落とし込み、それらを中心に捉えて開発するという設計手法を紹介しています。実のところほとんどの開発現場が意識せずとも大雑把に言えばこのような手法で開発をしているのではと思われます。
ちなみにこの本は難解なことでも有名ですが、英語の原著は非常に明快に書かれており全く難しさを感じずに読めました。英語に自身がある方は原著を読んでみるといいかもしれません。
最後に、この本で紹介されているレイヤードアーキテクチャは少々古いので、代わりにクリーンアーキテクチャを使うのが良いと思います。
Clean Architecture 達人に学ぶソフトウェアの構造と設計
さて、そこそこ開発をしている人ならば以下の図を見たことがある人が多いのではないでしょうか?
The Clean Architecture by Robert C. Martin (Uncle Bob)
皆んさんご存じのクリーンアーキテクチャの図解です。この本はこのクリーンアーキテクチャの記事を書いた著者がクリーンアーキテクチャに関して解説した本です。
実際の本の解説のほとんどはクリーンアーキテクチャが必要な背景となる開発の本質やプログラミング技術に関してで、クリーンアーキテクチャそのもの解説は多くはない。
しかし、私はこの本を深く読むことで初めてクリーンアーキテクチャがなぜ優れているのかという本質をやっと理解できました。そしてそれを理解する過程でその素晴らしさに感動すら覚えたくらいです。
この本は私が2019年に読んだ本の中でも一番良かった本でした。
初心者には少々難しいかもしれません。
Clean Architecture 達人に学ぶソフトウェアの構造と設計
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック
非常に有名な本。読みやすいコードを書くための方法論が書かれています。概念というよりはかなりコード寄りの解説本です。
本は薄いですが、内容は全く薄くないです。簡単に読めて初心者でもすぐ役立つことが多数書かれています。一度は目を通しておきたい本です。
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック
III. ビジネススキル
考える技術・書く技術―問題解決力を伸ばすピラミッド原則
英語版の原題はPyramid Principleという名称で、情報を抽象から具体へとピラミッド状に論理的に整理するスキルに関する本。これは論理的な文章を書いたり物事を考える際に非常に重要となるスキルです。
開発を行う際、知識と同じくらい考える力が大事です。特にプログラムをわかりやすく構造化するには、この本に書かれている技術は必須と言っても過言ではないです。
さらには仕様書を書いたり、文章で同僚とやりとりする際にひときわ光るわかりやすい文章を書くのにも、この本の技術は役立ちます。
エンジニアのみならず社会人全員に読んでもらいたい本の一つです。
ただし、この本は少々ヘビーなので、ライトなものから始めたいという方は、考える技術・書く技術のワークブックがあるのでそちらを読むと良いでしょう。ワークブックも本体の本と同じくらいオススメです。
考える技術・書く技術―問題解決力を伸ばすピラミッド原則
考える技術・書く技術 ワークブック〈上〉
考える技術・書く技術 ワークブック〈下〉
チームが機能するとはどういうことか――「学習力」と「実行力」を高める実践アプローチ
学習し続ける優れたチームを作るための方法論の本。最近よく聞く「心理的安全」等の概念も解説されています。
開発は一人ではできません。チームのメンバーがお互いに無関心にならず、どうしたら皆で協力して高い成果を出せるようになるかに関して解説されています。
チームに関して私が今一番おすすめしたい本です。
チームが機能するとはどういうことか――「学習力」と「実行力」を高める実践アプローチ
人を動かす
デール・カーネギーの世界的な名著です。内容を知らない人には「人を動かす」という命名が少々ミスリーディングですが、この本はいかに紳士的に人に接するべきかという事に関して書かれている本です。
開発は一人ではできません、周りの人に紳士に接し、職場の人たちが快適に働けるようにすれば、結果として、それらがあなたに帰ってくるという事です。
100%実践できているわけではまだまだないですが、私が仕事で人と接する時は常にこの本に書かれていることを心がけるようにしています。
IV. さいごに
なかなか私の好みに偏ってしまった感がありますが、1冊でもあなたが気になる本があり、その本があなたの成長の糧になれば幸いです。