# 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科目) * **設計**: 厳密な仕様を満たすプログラミング、ソフトウェア構造と文書化(モジュール設計等) * **並行・リアルタイム**: 並行およびリアルタイムソフトウェア、コンピュータ制御システムの設計 * **アルゴリズム・データ管理**: アルゴリズムとデータ構造の選択、データ管理技術 * **システム**: コンピュータシステムの性能分析、計算の基礎、ネットワークとセキュリティ、ヒューマンコンピュータインターフェース * **社会責任**: ソフトウェアと社会的責任 ## 教育の重点と教員の資質 * 実用性と適用可能性を最優先する。 * 特定のシステムや言語は原則を学ぶための手段に過ぎない。 * 教員は実際のシステム設計・分析の経験を持ち、製品開発に深い関心を持つ実務家であるべきである。