# プログラム理解性
## 定義
プログラム理解性(program intelligibility)とは、人間が静的なソースコードを読み解くことで、計算機上で実行される動的なプロセスの振る舞いや状態推移、不変条件を知的に把握・追跡できる容易性の度合いを指す。[[Edsger W. Dijkstra]] は [[@1968__CACM__Go To Statement Considered Harmful]] において、人間の認知能力が空間的・静的な関係の把握に適しており時間的に推移するプロセスの直感的把握には不向きであるという前提に立ち、テキスト空間(プログラム)と時間空間(プロセス)の対応関係を自明に近づけることがプログラム理解性の根本要件であると論じた。(Source: [[@1968__CACM__Go To Statement Considered Harmful]])
## 未解決の問い
- プログラム理解性を高める構造化や抽象化は、実行時効率や低レイヤ最適化とトレードオフになる場合、どこでバランスされるべきか。
- LLM や AI によるコード生成・解析が普及する環境において、人間にとってのプログラム理解性(可読性や静的対応)の要求水準はどのように変化するか。
## 未編纂の観察
- [[@1968__CACM__Go To Statement Considered Harmful]] では、変数の意味を解釈するためにはプロセス進行の座標が不可欠であると指摘された。プログラム理解性とは単に変数の命名やコメントの問題ではなく、実行中の任意の瞬間において「今どのような状態にあるか」をコードの静的記述から一意かつ容易にマッピングできるかどうかに依存している。
- [[情報処理システムとしての人間]] の観点(Simon らによる人間の情報処理能力の限界論)と突き合わせると、Dijkstra が指摘した「静的関係には強いが時間的推移プロセスには弱い」という人間の認知的制約は、限定合理性のもとで外部環境(プログラムテキスト)を設計することの重要性を端的に表している。
## 関連
- 概念: [[構造化プログラミング]] / [[制御構造]] / [[情報処理システムとしての人間]] / [[設計の科学]]
- ソース: [[@1968__CACM__Go To Statement Considered Harmful]]
- エンティティ: [[Edsger W. Dijkstra]]
## 出典
- [[@1968__CACM__Go To Statement Considered Harmful]]