この地図の役割
ソフトウェアの振る舞いを、ライブラリや流行のフレームワークから切り離して説明できるようにするための基礎地図です。基礎は暗記するための前置きではなく、性能・正しさ・資源制約・障害の原因を説明するためのモデルとして使います。
推奨する順序
- データ構造 (Data Structures)とアルゴリズム (Algorithms)で、データを表現し問題を解く方法を学ぶ。
- 計算量 (Computational Complexity)で、入力規模に対するコストと限界を見積もる。
- コンピュータアーキテクチャ (Computer Architecture)、オペレーティングシステム (Operating Systems)、ネットワークの基礎 (Networking Basics)で、プログラムが動く実行基盤を理解する。
- 離散数学 (Discrete Mathematics)、線形代数 (Linear Algebra)、確率と統計 (Probability and Statistics)、論理学 (Logic)で、仕様・証明・データ・不確実性を扱う。
- パラダイムを比較し、問題に対してどの抽象化が適切かを判断する。
パラダイム
- オブジェクト指向プログラミング (Object-Oriented Programming): 状態と責務の境界を設計する視点。
- 関数型プログラミング (Functional Programming): 値の変換、純粋性、合成を中心に考える視点。
- 手続き型プログラミング (Procedural Programming): 制御の流れと状態変化を明示する視点。
- 宣言型プログラミング (Declarative Programming): 望む結果や制約を記述し、実現手段を分離する視点。
設計への接続
基礎の学習は、それ自体で完結させません。計算量はソフトウェアアーキテクチャの設計判断へ、OSとネットワークはシステム設計と分散システムへ、論理と確率はソフトウェア品質モデル (Quality Attributes)と検証へ接続します。
詳細マップ
- データ構造 (Data Structures)
- アルゴリズム (Algorithms)
- 計算量 (Computational Complexity)
- コンピュータアーキテクチャ (Computer Architecture)
- オペレーティングシステム (Operating Systems)
- ネットワークの基礎 (Networking Basics)
- オブジェクト指向プログラミング (Object-Oriented Programming)
- 関数型プログラミング (Functional Programming)
- 手続き型プログラミング (Procedural Programming)
- 宣言型プログラミング (Declarative Programming)
- 離散数学 (Discrete Mathematics)
- 線形代数 (Linear Algebra)
- 確率と統計 (Probability and Statistics)
- 論理学 (Logic)
- システム設計と分散システム