コンピュータサイエンス 自習カリキュラム¶
文系卒・現役エンジニアが、CS 専攻の学部生が 4 年間で学ぶ内容を体系的に自習するための項目リスト。 実務での「なぜそうなっているのか」を腹落ちさせることを目的に、以下の 4 層に分けて整理する。
- 第 1 層: 数学的・論理的基礎(あらゆる CS 科目の前提)
- 第 2 層: コア科目(CS 専攻の必修にあたるコア領域)
- 第 3 層: 応用・発展(実務に直結する応用領域)
- 第 4 層: 選択・先端(興味・キャリアに応じて選ぶ領域)
第 1 層: 数学的・論理的基礎¶
CS の議論を厳密に追うための共通言語。後続のあらゆる科目で前提となる。
1.1 離散数学 (Discrete Mathematics)¶
- 命題論理・述語論理、論理式と推論規則
- 集合・関係・写像
- 同値関係・順序関係
- 帰納法(数学的帰納法・構造的帰納法)
- 組合せ論(順列・組合せ・包除原理・鳩の巣原理)
- グラフ理論(無向/有向、木、連結性、最短路、彩色)
- 代数系入門(群・環・体の初歩)
1.2 線形代数 (Linear Algebra)¶
- ベクトル空間・線形独立・基底・次元
- 行列演算・行列式・逆行列
- 固有値・固有ベクトル、対角化
- 内積・直交・正規直交基底
- 特異値分解 (SVD)(機械学習・グラフィックス・検索の基盤)
1.3 微積分 (Calculus)¶
- 1 変数微積分(極限・連続・微分・積分)
- 多変数微積分(偏微分・勾配・ヘッセ行列)
- テイラー展開・ニュートン法
- 最適化の基礎(凸関数・勾配降下法)
1.4 確率・統計 (Probability & Statistics)¶
- 確率空間・条件付き確率・ベイズの定理
- 確率変数・期待値・分散
- 主要な分布(二項・正規・ポアソン・指数)
- 大数の法則・中心極限定理
- 推定(点推定・区間推定)・仮説検定
- マルコフ連鎖入門
1.5 計算のための論理 (Logic for Computer Science)¶
- ブール代数(回路設計・SQL の WHERE 節の理論的背景)
- 一階述語論理(プログラム検証・型理論の入口)
- 形式的証明・自然演繹
第 2 層: コア科目¶
CS 専攻の中核。ここを押さえれば「専攻卒相当」のリテラシーになる。
2.1 プログラミング入門 / プログラミング言語パラダイム¶
- 手続き型(C)— ポインタ・メモリ・配列・構造体
- オブジェクト指向(Java / C++)— カプセル化・継承・多態性
- 関数型(Haskell / OCaml / Scheme)— 高階関数・再帰・代数的データ型・パターンマッチ
- 動的言語(Python / Ruby)— ダックタイピング・REPL 駆動
- 複数パラダイムを「触る」ことで、言語非依存の概念を身体化する
2.2 データ構造とアルゴリズム (Data Structures & Algorithms)¶
- 配列・連結リスト・スタック・キュー・デック
- ハッシュテーブル(衝突解決・ロードファクタ)
- 木構造(二分木・二分探索木・平衡木 AVL/赤黒木・B 木)
- ヒープ・優先度付きキュー
- グラフ表現(隣接リスト・隣接行列)
- ソート(比較ソート・線形時間ソート)
- 探索(線形・二分探索)
- グラフ探索(BFS・DFS・ダイクストラ・ベルマン-フォード・ワーシャル-フロイド・最小全域木)
- 設計技法(分割統治・動的計画法・貪欲法・バックトラッキング)
- 計算量解析(O 記法・最悪/平均/償却計算量・マスター定理)
2.3 計算理論 (Theory of Computation)¶
- 形式言語と文法(Chomsky 階層)
- 有限オートマトン・正規表現の等価性
- 文脈自由文法・プッシュダウンオートマトン
- チューリングマシン
- 計算可能性(停止問題・決定不能性)
- 計算複雑性(P・NP・NP 完全・還元)
2.4 コンピュータアーキテクチャ (Computer Architecture)¶
- 数の表現(2 の補数・IEEE 754 浮動小数点)
- 論理回路(組合せ回路・順序回路・FSM)
- ALU・レジスタ・データパス
- 命令セット (ISA)(RISC-V または x86 の初歩)
- アセンブリプログラミング
- パイプライン・ハザード・分岐予測
- メモリ階層(キャッシュ・仮想記憶・TLB)
- I/O・割り込み・DMA
- 並列性(命令レベル・スレッドレベル・データレベル)
2.5 オペレーティングシステム (Operating Systems)¶
- プロセス・スレッド・コンテキストスイッチ
- スケジューリング(FIFO・SJF・ラウンドロビン・MLFQ)
- 同期(ミューテックス・セマフォ・モニタ・条件変数)
- デッドロック(必要条件・回避・検出)
- メモリ管理(ページング・セグメンテーション・スワップ・ページ置換アルゴリズム)
- ファイルシステム(inode・ジャーナリング・コピーオンライト)
- 仮想化・コンテナの基礎
- システムコール・ユーザ空間/カーネル空間
2.6 コンピュータネットワーク (Networking)¶
- OSI 参照モデル / TCP/IP モデル
- 物理層・データリンク層(Ethernet・MAC アドレス)
- IP(IPv4/IPv6・ルーティング・サブネット)
- TCP / UDP(再送制御・輻輳制御・3 ウェイハンドシェイク)
- DNS・DHCP・NAT
- HTTP/1.1・HTTP/2・HTTP/3、TLS
- ソケットプログラミング
- CDN・ロードバランサ・プロキシ
2.7 データベース (Databases)¶
- 関係モデル・関係代数・関係論理
- SQL(DDL/DML/DCL・結合・集約・サブクエリ・ウィンドウ関数)
- 正規化(1NF〜BCNF)と非正規化のトレードオフ
- インデックス(B+ 木・ハッシュ・カバリングインデックス)
- クエリプランと実行計画
- トランザクション・ACID・分離レベル・MVCC
- ロギングとリカバリ(WAL)
- NoSQL(KVS・ドキュメント・カラム指向・グラフ)と CAP 定理
2.8 プログラミング言語処理系 / コンパイラ (Compilers)¶
- 字句解析(正規言語)
- 構文解析(CFG・LL・LR)
- 意味解析・型検査
- 中間表現(AST・IR・SSA)
- 最適化(定数畳み込み・デッドコード除去・ループ最適化)
- コード生成・レジスタ割付
- ランタイム(スタックフレーム・ガベージコレクション)
- インタプリタ・JIT の基礎
2.9 ソフトウェア工学 (Software Engineering)¶
- ライフサイクルモデル(ウォーターフォール・アジャイル)
- 要求分析・仕様化
- 設計(モジュール分割・凝集度・結合度・SOLID 原則)
- デザインパターン(GoF)
- バージョン管理 (Git) のモデル
- テスト(単体・統合・E2E、TDD、カバレッジ、プロパティベーステスト)
- レビュー・リファクタリング
- CI/CD・DevOps の基礎
- 計測(複雑度・障害率)
第 3 層: 応用・発展¶
実務との接続が強く、コア科目を踏まえて学ぶと吸収が早い領域。
3.1 セキュリティ (Security)¶
- 脅威モデリング・最小権限・多層防御
- 共通鍵暗号・公開鍵暗号・ハッシュ関数・署名
- 認証と認可(OAuth 2.0・OIDC・JWT)
- TLS の仕組み・PKI
- Web の脆弱性(XSS・CSRF・SQL インジェクション・SSRF)
- メモリ安全性(バッファオーバフロー・UAF)
- セキュアコーディング・OWASP Top 10
3.2 分散システム (Distributed Systems)¶
- 時間と順序(論理時計・ベクタークロック)
- 一貫性モデル(線形化可能性・順序一貫性・結果整合性)
- レプリケーション・シャーディング
- 合意アルゴリズム(Paxos・Raft)
- 分散トランザクション(2PC・サーガ)
- 障害モデルと冪等性
- メッセージング(at-most/at-least/exactly-once)
3.3 人工知能・機械学習 (AI / ML)¶
- 探索(盤面ゲーム・A*)
- 教師あり学習(線形回帰・ロジスティック回帰・決定木・SVM)
- 教師なし学習(クラスタリング・次元削減)
- ニューラルネットワーク・誤差逆伝播
- 深層学習(CNN・RNN・Transformer)
- 評価指標・過学習・正則化・交差検証
- LLM の基礎と応用
3.4 ヒューマンコンピュータインタラクション (HCI)¶
- 認知モデル・ユーザビリティ原則
- インタラクション設計・プロトタイピング
- ユーザー評価手法
3.5 コンピュータグラフィックス (Computer Graphics)¶
- 線形代数の応用(座標変換・射影)
- ラスタライズ・レイトレーシング
- シェーディング・テクスチャ
- GPU プログラミングの基礎
第 4 層: 選択・先端¶
興味とキャリアの方向に応じて選ぶ。
- 自然言語処理 (NLP)
- コンピュータビジョン (CV)
- 強化学習
- 形式手法・モデル検査・型理論(依存型)
- プログラム検証 (Coq / Lean)
- 並列計算・GPU・HPC
- 量子計算入門
- 暗号理論(ゼロ知識証明・準同型暗号)
- ブロックチェーン・分散合意の応用
- バイオインフォマティクス
- 組込み・リアルタイムシステム
- ロボティクス
学習順序の目安¶
文系卒・実務エンジニア向けの推奨順序(独学を続けやすい順)。
- 離散数学 + データ構造とアルゴリズム を並走(CS の「読み書き」)
- コンピュータアーキテクチャ → OS(下から上へ。実務の謎が一気に解ける)
- ネットワーク → データベース(Web エンジニアの空気感が変わる)
- 計算理論 + コンパイラ(言語と抽象化の正体を知る)
- 線形代数 / 確率統計 を補強しつつ AI / ML
- 分散システム + セキュリティ(モダンなアーキテクチャを設計できる土台)
- 残りは興味駆動で第 4 層へ
各項目は「定番教科書 1 冊 + 手を動かす課題」を 1 セットにすると定着しやすい。 理論だけ・実装だけに偏らず、両輪で回すことを推奨する。