自分は何を根拠に判断してるのかなってのを人に説明するなら、こういう本を読んできたよってところからだろうなと思ったので、影響を受けた本を列挙してみます。
(筆者の簡単なバックグラウンド)
経験は10年以上くらい。新卒あたりからはJavaでバックエンドの開発にかかわっていた。システム連携基盤の技術支援担当だったので、実装の話も勉強しつつ、アーキテクチャとかも勉強したりしていた。
割と若い時期に接した本を中心に紹介したため、Javaを扱う本が多くなりますが、大体はJava固有の話題というわけではない場合が多いので、言語によるって感じはない認識です。
-
基本情報処理技術者試験の勉強
- 開発における教養が効率よく身につく
-
- 社内でも、相手に質の高い質問をする上で押さえておきたいパターン
-
- AWSサポートへの問い合わせのガイドライン。技術的な質問をする上で必要な情報とは何かがよくまとまっている。AWS固有の話題もあるが、一般的なものもある。
- 全般的な留意事項
- 解決したい課題を明確にする
- 状況を正確に共有する
- 経緯を共有する
- AWSサポートへの問い合わせのガイドライン。技術的な質問をする上で必要な情報とは何かがよくまとまっている。AWS固有の話題もあるが、一般的なものもある。
-
- 古いけど、Stackoverflowなどで有名なJoel氏がシステム開発のもろもろについて面白く語っているよい本。
-
- システム開発をうまくやり遂げるために必要なコミュニケーション、意志決定のあり方を説明している。
-
- アジャイルの開発プロセスについて外観がつかめる
-
- デスマーチになってしまったとき、どうリカバリー(本書ではトリアージと呼ぶ)をするのかについて考察された本。プロジェクト運営に必要な権限についてや組織、ボトルネックなどについていろんな示唆が得られる。
-
- ストーリーポイント法による見積もりは賛否両論ありますが、フィーチャー駆動開発についての説明やベロシティの考え方は参考になります。
-
- 品質保証部門の方との円滑なコミュニケーションや、エンジニア側からのテストケースの提案などで必要な知識。
-
- よく使われるデザインパターンについて分かりやすく学ぶことができる
- 第二版が近々発売される
-
- ユースケース記述やフォーチャーの作り方とその分析方法について理解できる
- アーキテクチャとは何か?
- SOLID原則のいくつかが分かりやすく学べる(インタフェース分離の原則と依存性逆転の原則は出てこない)
- 契約によるプログラミングと防御的プログラミングの違い
-
- 全部読む必要はない。第一部をみておいて、不吉なにおいの種類をいくつか覚えておく。必要に応じてどのリファクタリングのカタログが使えるかを不吉なにおいから辿れるように。ただ、重複コードに対するリファクタリングくらいはどういう手順か確認しておくこと。
-
- RESTfulについてまとめられている本です。Atomについての記述などは一部ふるいですが、1-3部は今も適用できるかと思います。
-
- 適切に文字コードを扱う上で必要な知識がまとめられています。
- UTF-8以外の文字コードを扱うことがあるなら、なるはやで読むべきです。特にシステム連携が必要な時に、システムによって文字コードが違う場合が危ないです。
-
体系的に学ぶ安全なWebアプリケーションの作り方: 脆弱性が生まれる原理と対策の実践
- 徳丸本。Webアプリケーションセキュリテイについて確かな知識が身につく。
-
- 斜め読みしかしてないですが、幅広く設計についての話題を取り扱っていてよさそう。ドメインモデルについても取り扱ってる。
-
- システムのパフォーマンスをついて計測する上で、ロードアベレージなどの指標の説明がなされてたりする。他にもシステムのチューニングについて必要な考え方が扱われている。
- 冗長化、ロードバランサ、リバースプロキシ、死活監視はクラウド時代でも必要になる知識かと思います。
- また、Apacheのチューニングについての話はみじかでよいかも。ただし内容が古いため、代替としてnginxが候補に挙がってなかったり、ポストc10k問題については触れられてはない。
- システムのパフォーマンスをついて計測する上で、ロードアベレージなどの指標の説明がなされてたりする。他にもシステムのチューニングについて必要な考え方が扱われている。
-
- かなり古いですが、現在でもよく使われるアーキテクチャパターンの選択肢とそのトレードオフがまとめられている本です。
-
良いコード/悪いコードで学ぶ設計入門 ―保守しやすい 成長し続けるコードの書き方
- 筆者は未読ですが、評判良さそうなので上げておきます。
-
「Java並行処理プログラミング(ソフトバンククリエイティブ)」または、「並行コンピューティング技法 ―実践マルチコア/マルチスレッドプログラミング(オライリー)」
- 並行処理を実現するために、アトミックな処理、排他制御、イミュータブルなオブジェクトといった概念を知っておきたい。
-
- 通信に関わる知識がある方が、トラブルシュートの幅が広がってよい
-
(障害切り分けの知識系)