この記事は自分の学習ロードマップ整理のための記事です。
各分野の良い書籍やチュートリアルがあればぜひ教えてください。
(紹介しているものの大半は購入済みでおすすめできるものです。)
- バックエンドから入り、将来的にはアーキテクト・プラットフォームエンジニア・SREを志望
- 以下のレイヤーを横断して学んでいく
ソフトウェア開発
要件定義・開発プロセス
│
設計 (DDD / Clean Architecture)
│
言語 (OOP / FP / Go / TS)
│
ランタイム / 並行並列処理
│
分散システム・マイクロサービス
│
DevOps・SRE・Platform
|
システム(OS, インフラ)
コーディング
- 駆け出しの人におすすめ
- 最低限のコーディング作法・OOP・設計・アーキテクチャの知識を網羅的にわかりやすく解説する
- 手放しにおすすめできる1冊
GO言語
- 低レイヤーの理解の足掛かり
- GO(のランタイム)は軽量OS的な機能を有する(ユーザー空間でのスレッド管理とスケジューリング)
- goroutine
- scheduler
- GC
- channel
- netpoll
- etc
- GO(のランタイム)は軽量OS的な機能を有する(ユーザー空間でのスレッド管理とスケジューリング)
- モダンバックエンドのため
- クラウド・分散システム
- 公式チュートリアル
- 言語仕様を一通り学べる
- アプリケーション開発者目線で低レイヤーシステムを解説する
- 開発で使えるレベルになるため
並行/並列処理・非同期処理
- GOを学ぶ過程で理解できるようにする
- 並行処理 (Concurrency)
- 並列処理 (Parallelism)
- 非同期処理 (Async)
- 非常に評価が高く面白そう
フロントエンド・TypeScript
- すでにある程度、設計・実装できる
- そこまで興味はないのでリファレンス的な書籍を一周して個人開発で実践する
- 関数型的な実装ができるようになりたい
- 型システムやエラー処理、非同期処理などTSを総合的に解説
- リファレンス的一冊
- 筆者の提唱するモデルベースでUIデザインをするための具体的な方法論を解説
- センス・デザインスキルではなく、論理的にUIを構築する方法を知りたくて購入
関数型プログラミング(Functional Programming, FP)
- 数学の関数のような純粋・副作用の無い関数の評価の連続で処理を実現するプログラミングパラダイム
- さらなるコーディングスキル向上のため学ぶ
- すでに学習を開始しており、非常に面白い
- OOPをある程度理解した人は是非とも学んでほしい
- FPに興味のある全員におすすめできる
- Scalaを使いJava(同じくJVM言語)の命令型・OOPコードと対比しながら、FPの概念・利点を明快に解説する
オブジェクト指向プログラミング(OOP)
- すでにある程度理解
- 不足した知識を埋める
- リファクタリングが必要になる問題の吉兆に「コードの悪臭」という抽象的な概念がある
- それに対しメソッドを5行以内にするという明確なルールで統制するという面白い発想
-
DI(依存性注入)だけをテーマにしており興味深い
- 設計能力向上のため読みたい
-
駆け出しの人へのおすすめはこれら
- 結城 浩さんの書籍
設計
クリーンアーキテクチャ
- クラス・関数設計はすでにできる
- よりマクロな設計能力を身につける
- pythonの柔軟な言語仕様を活用し、保守性・拡張性の高い設計を具体的・実践的に解説する
- 後述のDDDやテスト駆動開発も併せて解説
- 初心者向け
- 原典
- 今年中に理解できるようになりたい
ドメイン駆動設計(Domain Driven Design, DDD)
- アーキテクトの教養として学ぶ
- 後述のマイクロサービスにも役立つ
- コードの実装だけでなく、理論的な部分も抑える
- 初心者向けに良いが、OOPの理解は前提
- タイトルからわかる絶対に面白いやつ
- 関数型言語 F#(.NET系)とDDDを組み合わせた。柔軟で高品質なソフトエア開発手法を解説
- FPの設計能力を上げるために学ぶ
- 業務帳票からデータモデリングする手法を解説
- セキュリティと言いつつDDDが内容の大半を占める
- 原典
- 今の僕には難しく、今年中にこれを理解できるようになりたい
インフラ
- 目指す職種のためにインフラの全体像を総合的に学ぶ
- 現代的なインフラ・クラウドの基礎知識を網羅的に解説
- インフラ専門ではなくバックエンド開発者向けでもある
DB・データ基盤
- SQLや簡単なテーブル設計は可能
- より内部構造を深く理解したい
- RDB以外も学びたい
- 言わずもがな必読
- すでに通読済み
- 再度読み直し、深く理解する
- ポスグレを使う予定なので学ぶ
- 日本語のチュートリアル
- 操作を知りたいだけならこちらでもいい
- バックエンドなら上記の2冊で十分
- 暇な時に読む
- redisというインメモリKV DB
- cache, queue, pubsub, lockなど全部できる
- モダンバックエンドの標準的ツール
- キャッシュによるweb配信高速化を解説する貴重な1冊
- データ基盤構築の解説書で友人の推薦
OS
- コンテナやセキュリティの理解のため学ぶ
- すでに通読。初心者の最もおすすめできる
- python, GOといったモダン言語を使用
- 図解が丁寧
- 後述のコンテナの解説も含む
- 必要に応じてさらに詳細なものを読む
ネットワーク
- あまり興味はないので、ざっくりと全体的に学ぶ
- 申し訳ないが面白くはなかった
- TCP/IPだけは最低限理解した
- 駆け出しの人はそれ専用の本を買った方がいいと思う
- TCP/IPだけは最低限理解した
- (厳密にはネットワークとは違うが、)webの知識・解像度が全体的に上がる
- 駆け出しの人はこちらの方が良いと思う
- https://amzn.asia/d/0gmw5qzW
セキュリティ
- 認証認可
- 目指す職種のためにセキュリティの知識は必須なので体系的に学ぶ
- webセキュリティのバイブル的1冊
- 書店で見るたびに「読まねば…」と思うが、分厚さに心がやられている
- 腹を決める
- 個人開発で使用予定のKeycloakを用いてSSOを解説する
- kindle unlimitedで無料
運用・監視
- 主要なツールを公式チュートリアルで一通り学び、個人開発で実践する
- metrics
- Prometheus(データ収集) + Grafana(可視化)
- Datadog, AWS CloudWatch, GCP Cloud Monitoring
- Logging
- Tracing
- OpenTelemetry
- etc
- metrics
- 監視にフォーカスしたもの
- 近年のクラウドベースシステムにあるオブザーバビリティ(可観測性)」という概念にフォーカスしたもの
- ロギングに関するhow2的なもの
コンテナ・オーケストレーション
- 開発で利用できる程度の知識しかない
- web・分散システムには必須なので深く理解できるまで学ぶ
- Docker, Kubernetes, Helmの公式チュートリアル
クラウド
- 言わずもがな必須知識
- AWSを中心に学ぶ
- compute, networking, storage, database, security, observability / monitoring, AI
- AWSを中心に学ぶ
IaC
- 目指す職種でインフラのコード化は必須知識
- Terraform, Ansibleの基本的な機能を公式チュートリアルで学ぶ
テスト
- あまり知識がないので、一度体系的に学びたい
- テスト駆動開発も設計能力向上のために学び、実践する
- 評価が高いので通読してみたい
- ソフトウェアテストについて体系的に学べる
-
TDDの原典
-
単にテスト手法を学びたいのであればこちらがおすすめ
アーキテクチャ
- アーキテクトに求められる知識を体系的に、網羅的に学ぶ
- すでに通読
- よく言えば網羅的、悪く言えばつまみ食い的
- アーキテクトという職種に興味があれば読んで損はないと思う
- 今の僕には難しい
- 1冊目を再読してよく理解してから臨む
分散システム・マイクロサービス
- モダンweb・バックエンドの理解のため学ぶ
- API
- REST, GraphQL, gRPC
- メッセージング
- Kafka, Queue, Pub/Sub
- CAP定理
- 車載システム(後述のAUTOSAR adaptive)もマイクロサービスで動作しており、理解したい
- API
- マイクロサービスのリファレンス的1冊
- 分散システムのバイブル的1冊
- 分散システムのDB, トランザクションなどデータ管理を解説
プラットフォームエンジニアリング
- 開発環境の整備などを専門とする分野
- プラットフォームエンジニアリングの数少ない解説書
- CDに焦点を当てたもの
- github actions公式チュートリアル
- github actionsを用いたCI/CDの実装を解説する貴重な1冊
- AWS, KubernetesでのCI/CD構築例
SRE・DevOps
- 開発と運用が協力し、迅速なリリースを実現することを目的とする概念・役職
- ソフトウェアエンジニアリングで運用を改善する
- 開発者よりの運用
- 全体像をざっくりと学ぶ
- ソフトウェアエンジニアリングで運用を改善する
- SREの基本的な知識をまとめた1冊
- より詳しいものも探す。良いものがあれば教えてください
- 技術的な事柄だけでなく、組織作りやコミュニケーションについての解説書
- 原典
MBSE(モデルベースシステムエンジニアリング)
- 仕事で自動車関係の案件に入っている
- モデルベースの開発プロセスを学ぶ
- SysML(システムズモデリング言語)での要求〜設計
- matlab, simulink, stateflowなどの使い方も学びたい
- モデルベースの開発プロセスを学ぶ
- 製品開発の上流におけるモノづくり手順や分析手法を、システムズエンジニアリングのプロセスに沿って正しく適用する方法を解説
- 必要に応じてこちらも読みたい
AUTOSAR・SDV(Software Defined Vehicle)
- AUTOSAR classic
- 自動車の低レイヤー・ECU(マイコン)のハード差異や通信プロトコルを抽象化するための規格
- AUTOSAR adaptive
- 自動運転など重い処理はECUでなくLinuxベース・汎用コンピューターを使う
- そこから低レイヤー(AUTOSAR classic)側にアクセスするための規格
- SDVについての入門的1冊
開発プロセス・要件定義
- 仕様を正確に文書化・モデリングして、実装に繋げられるようになりたい
- すでに通読。かなり参考になった
- OOPを理解した人全員におすすめ
- ICONIXという開発プロセスを解説
- 最小限のUMLコアセットからモデルをコードに落としていく手順
- 洗練されたOOP的設計・実装
- 「要求の仕様化」にフォーカスし、その方法論までを解説する1冊
- 著者の派生開発の方も気になる
個人開発
- 学んだ技術の集大成的なプロダクトをリリースしたい
- 今の所、英語学習アプリを考えている
その他
-
Rust
- 一度学ぼうとしたが挫折
- FP, GOの後に再度挑戦しようと思う
- 一度学ぼうとしたが挫折
-
LLM/AIエージェント系
-
https://amzn.asia/d/059VfGYM
- データサイエンティストの友人のおすすめ
- LLM/AIエージェント系周りの知識を網羅的に解説
-
https://amzn.asia/d/059VfGYM
-
ランタイム
- node.js, .NET, JVM, etc
-
etc…
まとめ
- あまりにも膨大で心が折れそうですが、一緒に頑張っていきましょう