# Software Engineering Programs are not Computer Science Programs
[PDF Source](https://bioinfo.uib.es/~joemiro/semdoc/PlansEstudis/Bachelor_Masters_Curricula/DParnas.pdf)
## 概要
デイビッド・ローゲ・パルナスは、[[ソフトウェア工学]](SE)プログラムを[[コンピュータサイエンス]](CS)のサブフィールドではなく、土木工学や機械工学と同様の工学分野として扱うべきだと主張。これは教育の内容とスタイルに関する重要な問題であり、真の専門職としてのSEを確立するための提言である。
## ソフトウェア工学教育の核心
* **科学と工学の目的の違い**:
* 科学者は知識の拡張と最新研究に焦点を当てる。
* 技術者(エンジニア)は、信頼性の高い製品の設計と実証済み技術の適用に焦点を当てる。
* 工学教育は、卒業後すぐに現場で問題解決できる能力の育成を重視する。
* **認定(アクレディテーション)の必要性**:
* 公共の安全を担う工学分野には厳格な認定プロセスが不可欠。
* 既存の工学認定システムを活用し、SEを工学の新しい分野として位置づけるべきである。
* **ソフトウェアエンジニアの責任**:
* 単なるプログラマーではなく、製品の適合性と安全性を保証する専門家である。
* 要件分析、システム構成、性能分析、保守など、開発の全工程に責任を持つ。
## コンピュータサイエンスとの相違点
* **教育の伝統**:
* CSは科学の伝統に従い、学生に多くの自由を与えるが、工学的な規律が不足しがち。
* CSは最新の流行や特定の言語に依存する傾向があるが、SEは普遍的な設計原則を重視する。
* **理論と実践の統合**:
* CSでは理論と実践が乖離しやすい。
* SEでは、理論(数学的モデル等)を具体的な設計にどのように適用するかを教える必要がある。
* **分離のメリット**:
* 電気工学と物理学が分離したように、CSとSEが分離することで、各分野がそれぞれの役割をより専門化できる。
## 推奨されるカリキュラム構成
### 1. 工学基礎科目 (G科目)
他の工学分野と共有する。
* 工学数学(線形システム、行列、複素数、微分方程式、ベクトル解析)
* 工学のための微積分、入門力学
* 一般化学、工学経済学、安全訓練
* 工学設計とコミュニケーション
### 2. 他分野工学紹介 (E科目)
異分野のエンジニアとの協力を可能にする。
* 工学材料の構造と特性入門
* 物理システムのダイナミクスと制御入門
* デジタルシステム原理と論理設計
* コンピュータとマルチプロセッサのアーキテクチャ
* 熱力学と熱伝達入門
### 3. 応用数学 (M科目)
数学をソフトウェア設計に利用する方法を学ぶ。
* [[ソフトウェア工学]]における数理論理学・離散数学の応用
* ソフトウェアエンジニアのための統計的手法
### 4. ソフトウェア専門科目 (S科目)
* **設計**: 厳密な仕様を満たすプログラミング、ソフトウェア構造と文書化(モジュール設計等)
* **並行・リアルタイム**: 並行およびリアルタイムソフトウェア、コンピュータ制御システムの設計
* **アルゴリズム・データ管理**: アルゴリズムとデータ構造の選択、データ管理技術
* **システム**: コンピュータシステムの性能分析、計算の基礎、ネットワークとセキュリティ、ヒューマンコンピュータインターフェース
* **社会責任**: ソフトウェアと社会的責任
## 教育の重点と教員の資質
* 実用性と適用可能性を最優先する。
* 特定のシステムや言語は原則を学ぶための手段に過ぎない。
* 教員は実際のシステム設計・分析の経験を持ち、製品開発に深い関心を持つ実務家であるべきである。