ソフトウェアエンジニアのための必読書10選

>本記事は、[Simon Holdorf](https://medium.com/@simon.holdorf)氏による「[10 Extraordinary GitHub Repos for All Developers](https://medium.com/better-programming/10-must-read-books-for-software-engineers-edfac373821b)」（2020年2月24日公開）の和訳を、著者の許可を得て掲載しているものです。

#ソフトウェアエンジニアのための必読書10選

>より良いエンジニアになるには、コードを書くだけでなく、読むことも重要。

![Image for post](https://miro.medium.com/max/700/1*73NFzEe6PDGLlIUylvJfUw.jpeg)

>Photo by [Ria Puskas](https://unsplash.com/@riapuskas?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) on [Unsplash](https://unsplash.com/s/photos/library?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)

##はじめに

現代には、様々な優れたもの（ポッドキャスト、ビデオ、ブログなど）がありますが、良い本を読むことも、依然として多くの人にとって大切なものです。私はこれまで、ソフトウェアエンジニアリングなど技術関連の良書を多く読んできました。今でも新しいパターンやベストプラクティスを学ぶために読んでいます。

ソフトウェアエンジニアリングに適した本を見つけるのは容易なことではありません。なぜならエコシステムは急速に変化し、短期間で多くのものが時代遅れになってしまうからです。プログラミング言語の特定のバージョンに依存する本に関しては、特にそうです。

しかし、ずっと変わらないものもあります。メタ関連、デザインパターン、一般的なマインドセットを扱う本などです。

以下に、最も人気があり読まれている、入手可能な本を集めています。今日でも有用な上級開発者からジュニア開発者まで勧められることが多い本です。特にソフトウェアエンジニアにとって時間が貴重なことは分かっていますが、もしこれらの本を読むことができれば、間違いなくあなたとあなたのキャリアに役立ちます。どの本も同じようにお勧めできるもので、リストは順不同です。

注: 以下のリンクは、アフィリエイトリンクではありません。

## Cracking the Coding Interview
（コーディング面接の攻略方法）

![Image for post](https://miro.medium.com/max/399/1*k6qXti3yMOI4sj-lAHgBbw.png)
「[Cracking the Code Interview: 189 Programming Questions & Solutions](https://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/0984782850)（コーディング面接の攻略方法：189のプログラミング課題と解決策）」は、コーディング面接を受けたい、または受ける必要がある人にとてもお勧めです。著者のGayle Laakmann McDowellは、経験豊富なソフトウェアエンジニアであり、面接官であると同時に受験生でもありました。この本は、課題に隠された詳細を探し、小さな断片に分解し、概念をよりよく学ぶのにお勧めです。

さらに、あなたがコーディング面接の準備を整えられるよう、Gayleは実際の面接の課題と解決策を189個も提供しています！

## Code Complete
（完全なるコード）

![Image for post](https://miro.medium.com/max/234/1*FhAYH5WX83bNQxlF_5QFZA.png)

Steve McConnell著「[Code Complete: a Practical Handbook of Software Construction, 2nd Edition](https://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=sr_1_1?crid=3Q3SYCQ4CAQA6&keywords=code+complete+2&qid=1582557412&s=books&sprefix=Code+Complete%2Cstripbooks-intl-ship%2C174&sr=1-1)（完全なるコード：ソフトウェア構築の実践ハンドブック・第2版）」は、すべてのプログラマーが人生で恐らく一度は目を通しておくべき本の一つです。

ソフトウェア構築に関する包括的な分析で、よくまとまっており、業界でも高い評価を得ています。設計、コーディング、デバッグ、テストなどのテーマを扱っています。

全体的に見るとこの本は、おそらくプログラミング経験1～3年のプロフェッショナルの開発者にとって、最高の費用対効果が得られるでしょう。しかし、ソフトウェア構築の際に自信を持つことができるので、初心者にもお勧めです。

この本の要点は何でしょう？開発者は複雑度を管理し、自分にも他の人にも、保守しやすく読みやすいコードを書くことです。

## Clean Code
（クリーンコード）

![Image for post](https://miro.medium.com/max/446/1*IxHhQQ2SdEkWecLYWzNqNQ.png)

Robert C. Martin（Bobおじさん）著「[Clean Code: A Handbook of Agile Software Craftsmanship](https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882)（クリーンコード：アジャイルソフトウェア達人の技ハンドブック）」は、巷で最も人気のあるプログラミング本の一つです。クリーンなプログラミングコードの記述原則を、ソフトウェアエンジニアに教えるために書かれました。コードをリファクタリングして、より可読性や保守性の高いコードにする方法を説明する多くの例が掲載されていますが、Java中心の内容であることに注意してください。一部のパターンやテクニックは一般的なプログラミングや他の言語にも応用可能ですが、この本の主な読者はJava開発者です。

もう一つ注意すべきことは、この本が2009年のものであるということです。ツールやIDEが利用できるようになったため、コードフォーマットのようないくつかの内容は、今日ではあまり有用ではありませんが、それでも良い本です。

## Refactoring
（リファクタリング）

![Image for post](https://miro.medium.com/max/296/1*yaDik3ZBkwd8HS01fcLlEw.png)

Martin Fowler著「[Refactoring: Improving the Design of Existing Code, 2nd Edition](https://www.amazon.com/Refactoring-Improving-Existing-Addison-Wesley-Signature/dp/0134757599/ref=sr_1_1?crid=3AU96IVZG7OX7&keywords=refactoring+improving+the+design+of+existing+code+2nd+edition&qid=1582557750&s=books&sprefix=refactoring+improving%2Cstripbooks-intl-ship%2C158&sr=1-1)（リファクタリング：既存コードの設計改善・第2版）」は、20年前の初版と同じように、リファクタリングとは何かを解説しています。多くの方がおそらく疑問を持っていることで、この本で答えられていることには、以下のようなものがあります。

- なぜコードをリファクタリングする必要があるのか？
- どのようにリファクタリングが必要なコードを判断するのか？
- どのようにコードのリファクタリングを成功させるのか？

この本を読めば、リファクタリングの過程と一般原則が理解でき、自分のコードベースにすぐに応用できるようになるはずです。また、同僚のコードがリファクタリングを必要とする「臭い」を嗅ぎ付けることができるようになるはずです。

## Head First Design Patterns
（Head Firstシリーズ・デザインパターン）

![Image for post](https://miro.medium.com/max/344/1*3w6rSl6VWuLCB6b_893KkQ.png)

Eric Freeman／Bert Bates／Kathy Sierra／Elisabeth Robson著「[Head First Design Patterns: A Brain-Friendly Guide](https://www.amazon.com/Head-First-Design-Patterns-Brain-Friendly/dp/0596007124/ref=sr_1_1?crid=2KBE6WUPQMB5B&keywords=head+first+design+patterns+a+brain-friendly+guide&qid=1582557840&s=books&sprefix=head+first+design+%2Cstripbooks-intl-ship%2C159&sr=1-1)（Head Firstシリーズ・デザインパターン：脳に優しいガイド）」は、機能的で再利用可能な、洗練されていて柔軟なソフトウェア作成のために、他の開発者が使用しているデザインパターンやベストプラクティスを学ぶことができます。また、新しい概念をより簡単に学ぶのに役立つ素晴らしい可視化技術が満載です。

もしファクトリー、シングルトン、依存性注入などについて学びたいのであれば、この本が最適です。例はJavaで書かれているので、Javaやその他のオブジェクト指向の言語を知っておいて損はないでしょう。

## Patterns of Enterprise Application Architecture
（エンタープライズアプリケーションアーキテクチャパターン）

![Image for post](https://miro.medium.com/max/262/1*l8ChhI3MxIADbuLOcoDOFg.png)

Martin Fowler著「[Patterns of Enterprise Application Architecture](https://www.amazon.com/Patterns-Enterprise-Application-Architecture-Martin/dp/0321127420/ref=sr_1_1?crid=UEOW22J47EO1&keywords=patterns+of+enterprise+application+architecture+2nd+edition&qid=1582557939&s=books&sprefix=Patterns+of+Enterprise+Application+Architecture%2Cstripbooks-intl-ship%2C174&sr=1-1)（エンタープライズアプリケーションアーキテクチャパターン）」は、エンタープライズアプリケーション開発の実践を扱ったもう一つの素晴らしい本です。エンタープライズアプリケーションについて、開発方法に関する短い解説の後、設計時のよくある問題の解決策として、40以上のパターンを紹介しています。また、UMLによる可視化やJavaやC\#で書かれたコード例も多数掲載されています。

この本を読めば、エンタープライズアプリケーションのレイヤー分割、ビジネスロジック整理の主な手法の理解、MVCパターンを使用したWebアプリケーションの構造化、複数トランザクションにまたがるデータの同時実行処理ができるようになるはずです。

ただ、この本はかなり古くなっているので、RESTやクラウド、JSONなどの新しい概念には触れていません。それでも良い本ですが、批判的に読んでください！

## Working Effectively with Legacy Code
（レガシーコードの効果的活用）

![Image for post](https://miro.medium.com/max/388/1*1lqW4Y2WN-QMtulbwowbbQ.png)

Michael Feathers著「[Working Effectively With Legacy Code](https://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052/ref=sr_1_1?crid=2V9GN3L8TZTI5&keywords=working+effectively+with+legacy+code+-+michael+c.+feathers&qid=1582558039&s=books&sprefix=Working+Effectively+with+Legacy Code%2Cstripbooks-intl-ship%2C207&sr=1-1)（レガシーコードの効果的活用）」では、大規模な未テストレガシーコードベースを処理するための戦略を提案しています。2020年現在、クリーンで保守可能なコードとマイクロサービスしかないため、レガシーコードはもう問題ではないと思うかもしれませんが、これは誤解です。レガシーコードは依然として、多くの企業にとって最も困難な問題の一つです。

この本を読めば、機能追加、バグ修正、パフォーマンス最適化、設計改善など、ソフトウェア変更の一般的な仕組みを理解できるようになるはずです。さらに、レガシーコードをテストに使用できるようにする方法や、コード変更が必要な箇所を特定する方法も学べます。

この本には、Java、C++、C、C\#で書かれた例が掲載されていますが、オブジェクト指向ではないレガシーコードを処理する方法のヒントも付いています。

## The Clean Coder
（クリーンコーダー）

![Image for post](https://miro.medium.com/max/348/1*PeLOHNuSjtAw2QhhRnIgew.png)

Bobおじさんはもう一つの本で、真のソフトウェア職人の技術、規律、ツール、実践について教えています。「[The Clean Coder: A Code of Conduct for Professional Programmers](https://www.amazon.com/Clean-Coder-Conduct-Professional-Programmers/dp/0137081073/ref=sr_1_1?keywords=clean+coder+robert+martin&qid=1582558154&s=books&sr=1-1)（クリーンコーダー：プロフェッショナルプログラマのための行動規範）」は、見積もり、コーディング、リファクタリング、テストに関する実践的なアドバイスが満載です。

この本を読めば、競合やタイトなスケジュール、理不尽なマネージャーに対応したり、容赦ないプレッシャーに対処して燃え尽き症候群を回避したり、時間を管理したり、コーディングフローに精通したり、開発者やチームが成長できる環境を構築したりできるようになるはずです。

この本は業界ではかなり受け入れられていますが、私はすべてが価値のある内容だとは思いません。この本には多くの逸話や架空の会話が含まれており、大抵の場合、最終的に開発者がその行動に責任を持つという結論に達しています。ある文章の中で、コードにバグを発生させた開発者へのアドバイスは、会社に金銭的損失を補償することだとまで書かれています。

そのため、この本を読むなら、注意深く批判的に読むことをお勧めします！

## Introduction to Algorithms
（アルゴリズム入門）

![Image for post](https://miro.medium.com/max/377/1*-Iuz9LuZH4CTYWlmBUPUfQ.png)

Thomas H. Cormen／Charles E. Leiserson／Ronald L. Rivest／Clifford
Stein著「[Introduction to Algorithms, Third Edition](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844/ref=sr_1_1?keywords=Introduction+to+Algorithms+cormen&qid=1582558272&s=books&sr=1-1)（アルゴリズム入門）」は、あらゆる種類のアルゴリズムに関する必須ガイドに他なりません。非常に包括的で、初心者から専門家まで、あらゆる種類の読者に利用しやすくなっています。明確に書かれ、多くのテーマを網羅しています。しかし、少し複雑でもあり、理解するのが難しいかもしれません。

この本は、データ構造、高速アルゴリズム、一見難解な問題の多項式時間アルゴリズム、グラフ理論、計算幾何学などのテーマを取り上げています。疑似コードの例がいくつか含まれていますが、私の目には非常に理論的な本であることに変わりはありません。

## The Pragmatic Programmer
（実利的プログラマー）

![Image for post](https://miro.medium.com/max/388/1*NWIMGnrK2wJHRJWWeTvBkg.png)

「[The Pragmatic Programmer](https://www.amazon.com/Pragmatic-Programmer-journey-mastery-Anniversary/dp/0135957052/ref=sr_1_1?eywords=Pragmatic+Programmer+hunt&qid=1582558437&s=books&sr=1-1)（実用的プログラマー）」は、私が今まで読んだ中で最も重要な本の一つです。この本には技術的で専門的な実践的アドバイスが満載で、多くのプロジェクトで私を助け、より良い開発者になるための助けとなってくれました。

この本は2020年でもなお、20周年記念版は特に有用です。個人的責任やキャリア開発からアーキテクチャ技術に至るまでのテーマを研究することにより、現代の開発者であることが何を意味するのかを分析しています。

この本を読めば、継続学習の意味と重要性、柔軟性や適応性のある動的コードの記述方法、並列コードの問題解決方法、セキュリティ脆弱性の防止方法、徹底的で効果的なテスト方法、その他多くのことが分かるはずです。

もし、私があなたに本を一冊お勧めするとしたら、間違いなくこれでしょう！

##まとめ

周囲の開発者に最も人気のある本をいくつかご紹介しました。もしあなたにお勧めする本を選ばなければならないとしたら、Andrew Hunt著「[The Pragmatic Programmer](https://www.amazon.com/Pragmatic-Programmer-journey-mastery-Anniversary/dp/0135957052/ref=sr_1_1?eywords=Pragmatic+Programmer+hunt&qid=1582558437&s=books&sr=1-1)（実用的プログラマー）」でしょう。Robert C. Martinの本は業界で受け入れられ、多くの開発者が好んでいますが、私はBobおじさんとあまり意見を同じくしないので、批判的に読んでいます。

>Zack Shapiroに謝意を表します。

##翻訳協力

Original Author: [**Simon Holdorf**](https://medium.com/@simon.holdorf)([@simonholdorf](https://twitter.com/simonholdorf))
Original Article: [10 Extraordinary GitHub Repos for All Developers](https://medium.com/better-programming/10-must-read-books-for-software-engineers-edfac373821b)
Thank you for letting us share your knowledge!

この記事は以下の方々のご協力により公開する事ができました。改めて感謝致します。
選定担当: @gracen
翻訳担当: @gracen
監査担当: Taki
公開担当: @gracen

##ご意見・ご感想をお待ちしております
今回の記事は、いかがだったでしょうか？
・こういう記事が読みたい
・こういうところが良かった
・こうした方が良いのではないか
などなど、率直なご意見を募集しております。
頂いたお声は、今後の記事の質向上に役立たせて頂きますので、お気軽に
コメント欄にてご投稿ください。[Twitter](https://twitter.com/BabyDegu?lang=ja)でもご意見を受け付けております。
皆様のメッセージをお待ちしております。