TL;DR

本質的複雑性と対になる複雑さ。Fred Brooks は論文「No Silver Bullet」で、ソフトウェアの難しさを本質と偶有に分け、偶有を「今の作り方に伴うが、ソフトウェアに本来備わってはいない難しさ」とした。

なぜ必要か

Brooks によると、ソフトウェア開発のこれまでの大きな進歩は、偶有的な難しさを取り除いたものだった。本質と偶有を分けて考えると、ある技術がどちらの難しさを減らすのかを見極められる。

例

Brooks は偶有的な難しさを取り除いた進歩として次の 3 つを挙げている。

  • 高水準言語: プログラムの論理には含まれない、機械語レベルの細部からプログラムを解放した
  • タイムシェアリング: バッチ処理で結果を待つ時間の長さを減らした
  • 統合されたプログラミング環境(Unix、Interlisp): 共通のライブラリ、ファイル形式、パイプで、個々のプログラムを組み合わせて使うときの難しさを減らした

関連

出典