コンテンツにスキップ

コンピュータサイエンス 自習カリキュラム

文系卒・現役エンジニアが、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
  • 量子計算入門
  • 暗号理論(ゼロ知識証明・準同型暗号)
  • ブロックチェーン・分散合意の応用
  • バイオインフォマティクス
  • 組込み・リアルタイムシステム
  • ロボティクス

学習順序の目安

文系卒・実務エンジニア向けの推奨順序(独学を続けやすい順)。

  1. 離散数学 + データ構造とアルゴリズム を並走(CS の「読み書き」)
  2. コンピュータアーキテクチャOS(下から上へ。実務の謎が一気に解ける)
  3. ネットワークデータベース(Web エンジニアの空気感が変わる)
  4. 計算理論 + コンパイラ(言語と抽象化の正体を知る)
  5. 線形代数 / 確率統計 を補強しつつ AI / ML
  6. 分散システム + セキュリティ(モダンなアーキテクチャを設計できる土台)
  7. 残りは興味駆動で第 4 層へ

各項目は「定番教科書 1 冊 + 手を動かす課題」を 1 セットにすると定着しやすい。 理論だけ・実装だけに偏らず、両輪で回すことを推奨する。