自身のITエンジニアとしての技術力（特に判断力）を身につけるときに影響を受けた技術書

自分は何を根拠に判断してるのかなってのを人に説明するなら、こういう本を読んできたよってところからだろうなと思ったので、影響を受けた本を列挙してみます。

（筆者の簡単なバックグラウンド）
経験は１０年以上くらい。新卒あたりからはJavaでバックエンドの開発にかかわっていた。システム連携基盤の技術支援担当だったので、実装の話も勉強しつつ、アーキテクチャとかも勉強したりしていた。

割と若い時期に接した本を中心に紹介したため、Javaを扱う本が多くなりますが、大体はJava固有の話題というわけではない場合が多いので、言語によるって感じはない認識です。



- 基本情報処理技術者試験の勉強
    - 開発における教養が効率よく身につく

- [技術系メーリングリストで質問するときのパターン・ランゲージ](https://www.hyuki.com/writing/techask.html)
    - 社内でも、相手に質の高い質問をする上で押さえておきたいパターン

- [技術的なお問い合わせに関するガイドライン](https://aws.amazon.com/jp/premiumsupport/tech-support-guidelines/)
    - AWSサポートへの問い合わせのガイドライン。技術的な質問をする上で必要な情報とは何かがよくまとまっている。AWS固有の話題もあるが、一般的なものもある。
        - 全般的な留意事項
        - 解決したい課題を明確にする
        - 状況を正確に共有する
        - 経緯を共有する

- [Joel on Software](https://www.amazon.co.jp/dp/B0963FNRT8/)
    - 古いけど、Stackoverflowなどで有名なJoel氏がシステム開発のもろもろについて面白く語っているよい本。

- [アートオブプロジェクトマネジメント](https://www.amazon.co.jp/dp/4873112990/)
    - システム開発をうまくやり遂げるために必要なコミュニケーション、意志決定のあり方を説明している。

- [アジャイルサムライ](https://www.amazon.co.jp/dp/B00J1XKB6K/)
    - アジャイルの開発プロセスについて外観がつかめる

- [デスマーチ](https://www.amazon.co.jp//dp/B00F4QOMUO/)
    - デスマーチになってしまったとき、どうリカバリー（本書ではトリアージと呼ぶ）をするのかについて考察された本。プロジェクト運営に必要な権限についてや組織、ボトルネックなどについていろんな示唆が得られる。

- [アジャイルな見積もりと計画づくり](https://www.amazon.co.jp/dp/B00IR1HYGW/)
    - ストーリーポイント法による見積もりは賛否両論ありますが、フィーチャー駆動開発についての説明やベロシティの考え方は参考になります。

- [知識ゼロから学ぶソフトウェアテスト（改訂版）](https://www.amazon.co.jp/dp/B00HQ7S5CA/)
    - 品質保証部門の方との円滑なコミュニケーションや、エンジニア側からのテストケースの提案などで必要な知識。

- [Head First デザインパターン](https://www.amazon.co.jp/dp/4873112494/)
    - よく使われるデザインパターンについて分かりやすく学ぶことができる
    - [第二版](https://www.amazon.co.jp/dp/4873119766/)が近々発売される

- [Head First オブジェクト指向分析設計](https://www.amazon.co.jp/dp/4873113490/)
    - ユースケース記述やフォーチャーの作り方とその分析方法について理解できる
    - アーキテクチャとは何か？
    - SOLID原則のいくつかが分かりやすく学べる（インタフェース分離の原則と依存性逆転の原則は出てこない）
    - 契約によるプログラミングと防御的プログラミングの違い

- [リファクタリング（改訂版）](https://www.amazon.co.jp/dp/4274224546/)
    - 全部読む必要はない。第一部をみておいて、不吉なにおいの種類をいくつか覚えておく。必要に応じてどのリファクタリングのカタログが使えるかを不吉なにおいから辿れるように。ただ、重複コードに対するリファクタリングくらいはどういう手順か確認しておくこと。

- [Webを支える技術](https://www.amazon.co.jp/dp/B07JK7FZH2/)
    - RESTfulについてまとめられている本です。Atomについての記述などは一部ふるいですが、1-3部は今も適用できるかと思います。　

- [［改訂新版］プログラマのための文字コード技術入門](https://www.amazon.co.jp/dp/B07M98R3S5/)
    - 適切に文字コードを扱う上で必要な知識がまとめられています。
    - UTF-8以外の文字コードを扱うことがあるなら、なるはやで読むべきです。特にシステム連携が必要な時に、システムによって文字コードが違う場合が危ないです。

- [リーダブルコード](https://www.oreilly.co.jp/books/9784873115658/)

- [レガシーコード改善ガイド](https://www.amazon.co.jp/dp/B01AN97W08/)

- [体系的に学ぶ安全なWebアプリケーションの作り方: 脆弱性が生まれる原理と対策の実践](https://www.amazon.co.jp/dp/B07HHT54YR/)
    - 徳丸本。Webアプリケーションセキュリテイについて確かな知識が身につく。

- [現場で役立つシステム設計の原則](https://www.amazon.co.jp/dp/B073GSDBGT/)
    - 斜め読みしかしてないですが、幅広く設計についての話題を取り扱っていてよさそう。ドメインモデルについても取り扱ってる。

- [サーバ/インフラを支える技術](https://www.amazon.co.jp/dp/B07JHRVXGT/)
    - システムのパフォーマンスをついて計測する上で、ロードアベレージなどの指標の説明がなされてたりする。他にもシステムのチューニングについて必要な考え方が扱われている。
        - 冗長化、ロードバランサ、リバースプロキシ、死活監視はクラウド時代でも必要になる知識かと思います。
        - また、Apacheのチューニングについての話はみじかでよいかも。ただし内容が古いため、代替としてnginxが候補に挙がってなかったり、ポストc10k問題については触れられてはない。

- [エンタープライズアプリケーションアーキテクチャパターン](https://www.amazon.co.jp/dp/B01B5MX2O2/)
    - かなり古いですが、現在でもよく使われるアーキテクチャパターンの選択肢とそのトレードオフがまとめられている本です。
 

- [良いコード／悪いコードで学ぶ設計入門 ―保守しやすい 成長し続けるコードの書き方](https://www.amazon.co.jp/dp/B09Y1MWK9N/)
    - 筆者は未読ですが、評判良さそうなので上げておきます。

- 「[Java並行処理プログラミング（ソフトバンククリエイティブ）](https://www.amazon.co.jp/dp/4797337206/)」または、「[並行コンピューティング技法 ―実践マルチコア/マルチスレッドプログラミング（オライリー）](https://www.amazon.co.jp/dp/4873114357/)」
    - 並行処理を実現するために、アトミックな処理、排他制御、イミュータブルなオブジェクトといった概念を知っておきたい。

- [TCP技術入門 ―進化を続ける基本プロトコル](https://www.amazon.co.jp/dp/B07TKGKH8V/)
    - 通信に関わる知識がある方が、トラブルシュートの幅が広がってよい

- （障害切り分けの知識系）
    - [現場で使えるデバッグ&トラブルシュート Java編](https://www.amazon.co.jp/dp/4798118354/)
    - [システム障害対応の教科書](https://www.amazon.co.jp/dp/B085VVD74Z/)
    - [システム障害と僕達はいかにして戦えば良いのか、障害対応について考えた (Qiita記事)](https://qiita.com/zaru/items/edb49d8d2a2a6981789a)