銀の弾などない
オブジェクト指向プログラミングでは、クラスの概念を導入し、カプセル化と継承を活用することができる。
多くのソフトウェア工学分野の研究者が、オブジェクト指向プログラミングの有効性に大きな期待を寄せている (グラディ・ブーチ) 。
そして、ブルックス自身も、オブジェクト指向プログラミングに非常に期待している。
ただし、オブジェクト指向プログラミングも、ソフトウェア開発の過程における偶有的な複雑性の一つを除去するにとどまる。
したがって、オブジェクト指向プログラミングが発展しても、本質的な複雑性が低減されるわけではない。
Adaなどの現在のプログラミング言語が出現したことは、進歩であるといえる。
ただし、Adaなど現在のプログラミング言語の出現は、高水準プログラミング言語が初めて出現したことよりも、影響は小さい。
また、Adaは、モジュール化、抽象データ型、階層構造化を促進している。これらは、有用な進歩であるといえる。
しかし、Adaもまた高水準プログラミング言語の一つに過ぎない。
そのため、Adaなどの現在のプログラミング言語が出現したことによる影響は、あくまで偶有的な複雑性を低減することにとどまる。
自動プログラミングとして言及されてきた技法は、つまるところ高水準プログラミング言語を使ったプログラミングの婉曲的表現である (デイビッド・パーナス) 。
ブルックスの主張で重要なことは、ソフトウェア開発の複雑性について、「本質的な複雑性」 (essential complexity) と「偶有的な複雑性」 (accidental complexity) を区別していることである。なお、これは、アリストテレスの分類にヒントを得たものである。
偶有的な複雑性は、ソフトウェア開発者自身が発生させている解決可能な問題に関連する。例えば、アセンブリ言語のプログラムコードの記述、最適化、バッチ処理などによってもたらされる遅延は、偶有的な複雑性に由来する。
本質的な複雑性は、解決すべき問題によってもたらされるものであり、これを取り除くことはできない。もし利用者が30の異なることを行う1つのプログラムを望む場合、この30のことは本質的であり、開発するべきプログラムはこの30の異なることを実行しなければならない。
ブルックスによると、ソフトウェア開発者はこれまで偶有的な複雑性の多くを退治してきたが、その一方で、現在 (1986年) のプログラマは自分の時間の大部分を本質的な複雑性に取り組むことに費している。