偶有的複雑性 / 本質的複雑性

ソフトウェアの複雑性を、問題そのものに内在する 本質的複雑性(essential complexity) と、道具・言語・歴史的経緯から生じる 偶有的複雑性(accidental complexity) に分ける考え方。Fred Brooks「No Silver Bullet」(1986) が出典。偶有的は除去できるが、本質的は除去できない、というのが核。

「偶有的」の意味(誤読注意)

accidental の訳。アリストテレスの 偶有性(付帯的性質)= 本質(essence)ではない、たまたまそうなっている性質 に由来する。「偶発的・事故的(=ランダムに起きる)」ではなく 「本質ではない/取り除いてもその物が物でなくなるわけではない」 の意。

Brooks の主張

過去の生産性向上(高級言語、タイムシェアリング、統合開発環境)は、ほぼ 偶有的複雑性を削ったもの。だが偶有的が十分小さくなった今、残るのは本質的複雑性であり、それを一撃で10倍にする「銀の弾丸(silver bullet)」は存在しない。

本質的複雑性の源として4性質を挙げる:

区別の例

偶有的複雑性(消せる)本質的複雑性(消せない)
出どころ道具・言語・表現・歴史的経緯問題ドメインそのもの
例手動メモリ管理、ボイラープレート、設定地獄、貧弱な型表現、ビルドの煩雑さ税法・医療プロトコルの規則、並行/分散の本質的難しさ、要件間トレードオフ
対処抽象化・自動化・良い言語/ツールへの投資で削減モデル化・整理するだけ。消そうとすると別の場所へ移動する

なぜ重要か — 努力配分の指針

エンジニアリングの労力をどこに割くかを決める。偶有的複雑性は 投資で削れる(より良い抽象・言語・自動化)。本質的複雑性は削れず、無理に隠すと別の層に滲み出る(複雑性保存の法則 / Tesler’s Law)。

注意: 本質/偶有の線引きは 文脈依存で主観的。同じ複雑さが、視点を変えると偶有にも本質にも見える。

関連概念

関連

Graph