全体マップ: CS/SE の領域
はじめに
ソフトウェアエンジニアとして働く上で、コンピュータサイエンス (CS) とソフトウェアエンジニアリング (SE) の全体像を把握しておくことは極めて重要だ。個別のトピックを深く学ぶ前に、まずどのような領域が存在し、それらがどう繋がっているかを理解しよう。
この全体マップは「すべてを暗記する」ためのものではない。自分が今どの領域の問題に取り組んでいるかを素早く認識し、適切な知識を引き出すための地図だ。
CS/SE の主要領域
1. データ構造とアルゴリズム (Data Structures & Algorithms)
ソフトウェアの「計算の基盤」にあたる領域。
- データ構造: 配列、連結リスト、ハッシュテーブル、木、グラフなど
- アルゴリズム: ソート、探索、グラフ走査、動的計画法など
- 計算量 (Big-O): 処理の効率を評価する共通言語
実務での関連: API レスポンスタイムの改善、大量データの効率的な処理、適切なデータ構造の選択。
2. システム設計 (System Design)
「どうやって大規模なシステムを構築・運用するか」を扱う領域。
- スケーラビリティ、可用性、一貫性
- ロードバランシング、キャッシュ、メッセージキュー
- マイクロサービス vs モノリス
- データベース設計とシャーディング
実務での関連: 医療 SaaS としての信頼性設計、患者データの安全な取り扱い。
3. ネットワークと通信 (Networking & Communication)
データがシステム間をどう流れるかを理解する領域。
- OSI / TCP-IP モデル
- HTTP/HTTPS、DNS、TLS
- REST、GraphQL、WebSocket
- CDN、リバースプロキシ
実務での関連: API 設計、パフォーマンス最適化、セキュアな通信の確保。
4. データベース (Databases)
データの永続化と効率的な取得を扱う領域。
- リレーショナル DB (PostgreSQL, MySQL) と NoSQL
- ACID 特性、インデックス、クエリ最適化
- 正規化、マイグレーション
- ORM の利点と落とし穴
実務での関連: 患者情報・診療データの管理、レポーティング、監査ログ。
5. OS とインフラストラクチャ (OS & Infrastructure)
ソフトウェアが動作する「土台」を理解する領域。
- プロセス、スレッド、メモリ管理
- コンテナ (Docker)、オーケストレーション
- クラウド (AWS): VPC, ECS, S3, IAM
- Infrastructure as Code (IaC)
実務での関連: デプロイメント、スケーリング、コスト最適化、環境の再現性。
6. セキュリティ (Security)
システムとデータを脅威から守る領域。
- 認証 (Authentication) と認可 (Authorization)
- 暗号化、OAuth/OIDC
- OWASP Top 10 (XSS, CSRF, SQL Injection など)
- 医療データ特有のセキュリティ要件
実務での関連: 患者データの保護、コンプライアンス、脆弱性対策。
7. ソフトウェアエンジニアリングの実践 (SE Practices)
チームとして質の高いソフトウェアを継続的に届けるための方法論。
- バージョン管理 (Git)、ブランチ戦略
- コードレビュー、テスト戦略
- CI/CD パイプライン
- 技術的負債の管理
実務での関連: 開発速度と品質のバランス、チームコラボレーション。
領域間の関係性
これらの領域は独立しているわけではなく、密接に関連し合っている。
┌─────────────────┐
│ SE Practices │
│ (横断的な実践) │
└────────┬────────┘
│
┌────────────────────┼────────────────────┐
│ │ │
┌─────┴─────┐ ┌──────┴──────┐ ┌──────┴──────┐
│ System │ │ Security │ │ Networking │
│ Design │◄────►│ │◄───►│ │
└─────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
┌─────┴──────┐ ┌──────┴──────┐ ┌──────┴──────┐
│ Databases │◄────►│ OS & Infra │◄───►│ DS & Algo │
└────────────┘ └─────────────┘ └─────────────┘
具体的な繋がりの例:
| シナリオ | 関連する領域 |
|---|---|
| API のレスポンスが遅い | アルゴリズム + データベース + ネットワーク |
| 新機能のデプロイ | SE Practices + インフラ + セキュリティ |
| データ漏洩リスクの評価 | セキュリティ + データベース + ネットワーク |
| システム障害への対応 | システム設計 + インフラ + ネットワーク |
| 患者データの新しい集計機能 | データベース + アルゴリズム + システム設計 |
学び方のガイドライン
広さと深さのバランス
すべてを深く知る必要はないが、各領域の基本概念と用語は押さえておきたい。以下のレベル感を目安にしよう:
| レベル | 説明 | 目安 |
|---|---|---|
| 認知 | 概念の存在を知っている | 全領域 |
| 理解 | 仕組みを説明できる | 日常業務に関連する領域 |
| 応用 | 実際の問題に適用できる | 自分の専門領域 |
| 評価 | トレードオフを判断できる | シニアレベルの領域 |
実践的なアプローチ
- 日常業務から学ぶ: 使っている技術の「なぜ」を掘り下げる
- 障害から学ぶ: インシデントの根本原因を追うと複数領域の理解が深まる
- 設計レビューに参加する: システム設計の議論はあらゆる領域の知識を動員する
- 教えることで学ぶ: 他のエンジニアに説明すると理解の穴が見える
医療 SaaS エンジニアとしての優先順位
raica のエンジニアとして、特に重視すべきポイント:
- セキュリティと患者データ保護 - 最優先。データ漏洩は事業の存続に関わる
- データベースと永続化 - 診療データの正確性と完全性は生命に関わりうる
- システムの可用性 - 医療現場でシステムが止まることの影響は大きい
- SE Practices - 品質を担保する仕組みがなければ、上記すべてが危うくなる
Agent-first 開発においてこれが重要な理由
AI コーディングエージェントに的確な指示を出すには、何を作るべきかの全体像を理解している必要がある。
- 適切な制約を与えられる: 「この機能はセキュリティ上の配慮が必要」「ここはパフォーマンスが重要」といった文脈をエージェントに伝えられる
- 出力を評価できる: エージェントが生成したコードが適切かどうか、CS/SE の知識がなければ判断できない
- 問題を正しく分解できる: 大きな課題を「データベース設計の問題」「ネットワークの問題」「セキュリティの問題」と切り分けて、それぞれに適切な指示を出せる
- 用語で正確にコミュニケーションできる: 「O(n^2) になっているので O(n log n) のアルゴリズムに変更して」のように、曖昧さのない指示が可能になる
エージェントは実装の細部を担えるが、アーキテクチャの判断と品質の評価は人間の責任だ。この全体マップはその判断力の土台となる。
Further Reading
- Teach Yourself Computer Science - CS の自習ガイド (英語)
- CS自学指南 - CS 自習ガイド (中国語、網羅的)
- The Missing Semester of Your CS Education (MIT) - 実践的な CS ツールの使い方
- roadmap.sh - 各領域のロードマップ
- System Design Primer - システム設計の入門
- OWASP Top Ten - Web セキュリティの必須知識