あるいは不確実性について。
2024/07/20に次のイベントで設計についての話をしました。
サブテーマとして後期クイーン的問題を取り上げたのですが、LTの時間だと話しきれなかったので詳細を書き残します。単なる読み物に近いものになります。
勉強不足で解釈に誤りがあるかもしれないので、ご指摘いただければと思います。
後期クイーン的問題とはなにか
まずは困ったときのWikipediaです。
大きく分けて、以下の2つの問題を指しています。
探偵の推理の証明不可能性
作中で探偵が最終的に提示した解決が、本当に真の解決かどうか、作中では証明できないという問題です。 つまり、推理小説という閉じた世界の中では、どんなに緻密な論理を組み立てたとしても、探偵が唯一の真相を確定することはできない、ということです。
偽の手がかりが混ざっていたとして、作中で探偵に検証されなければ真の手がかりとして扱われます。
探偵の全知全能性
作中で探偵が神のように振る舞い、登場人物の運命を決定することの是非に関する問題です。 探偵が全ての情報を把握し、完璧な推理によって事件を解決するという設定は、ある意味で神のような存在感を与えてしまいます。 このような探偵の役割は、果たして物語として適切なのか、という問いが投げかけられます。
例えば、探偵が決定的な証拠がない状態でカマをかけて真相にたどり着くシーンを稀に見ます。
犯人しか知り得ない情報が会話に含まれないかチェックするようなシーンです。これも一種の後期クイーン的問題で、全く異なる別の証拠が見つかっていれば、もっと言えば、ボロを出した人が別の人物であったなら犯人が変わってしまう可能性があります。
ちょっとした例示
エラリー・クイーンではないですが、アーサー・コナン・ドイル氏のシャーロック・ホームズに関する次のエピソード*1はかなり象徴的かと思います。
ホームズはワトソンをひと目見て次のように声をかけます。
「アフガニスタンにおられたのでしょう?」
推理は「当然」あたっており、ワトソンはアフガニスタンで軍医をしていました。
作中では医者であることは「ドクター」と呼ばれていたことから事前に知ることができましたし、癖などから軍にいたこともわかったでしょう。一方で「怪我や日焼けあとからアフガニスタンに行っていた」と断定するのはちょっと厳しいように思えます。また前述の「アフガニスタンにおられたのでしょう?」 というセリフの前で日焼けしていることが明確にわかる文章はなかったように思われます。 もちろん描写されていない特徴でなにかヒントがあった可能性はありますが、それこそ「探偵の推理の証明不可能性」、「探偵の全知全能性」に繋がります。
後期クイーン的問題についてはなんとなく伝わったでしょうか?ここから設計の話をしていきます。
後期クイーン的問題とシステム設計の共通点
共通点の話の前にもう一つ寄り道をします。ホームズのエピソードは種明かしをするきっかけとして『命の書』というものが出てきます。
『命の書』と"銀の弾丸"
作中の『命の書』("The Book of Life,")は雑誌の記事のタイトルであり、そこには「観察と推理を極めて導き出した結論は決して判断を誤ることはない」というようなことが書かれています。つまり演繹による結論は絶対であるという話です。
そもそも『命の書』というは聖書の『ヨハネの黙示録』等にあるもので、「最後の審判で天国に入れる人が記された本」です。
ここでは結論が決まっているものの象徴として、記事の題名に引用されています。
やっとシステム開発の話を進めます。
"銀の弾丸"は不死身の人狼を倒すことができる武器のことで、ソフトウェア開発の文脈では万能な解決策*2のことを指します。
さてソフトウェア開発において"推理"は"銀の弾丸"たり得るでしょうか?
答えは今のところNoです。
推理とシステム設計
ミステリー小説の探偵が行う推理とシステム設計はよく似ていると思います。
探偵が事実から積み重ねて演繹的に理論を組み立てる一方で持ち前の知識を抽象化し帰納的に犯人を追い詰めて行くように、システム開発における設計も機能要件からアーキテクチャを組み立て、仕様を抽象化し設計原則に当てはめていきます。
システム設計において設計者は探偵、対してレビュー者やプロダクトオーナーは読者のような関係になります。
ところで後期クイーン的問題の「探偵の推理の証明不可能性」は多くの示唆を含みます。次に例示します。
- 全知全能でもないと完璧な推理はできない
- 未知については証明できない
- 探偵と読者は根本として情報に非対称性がある
システム設計について設計者はあらゆる論理を尽くしてアーキテクチャを作り上げていきます。しかしそれは恣意的になりがちで、設計者が見落としたもの(設計思想、サービスなど)は、多くの場合そのまま考慮されず完成を迎えます。
その背景の一つには探偵と読者のように設計者とレビュー者の非対称性にあります。レビュー者は設計者を信用して見ますし、すべてをレビュー者が考慮するのはしんどいです。
また、未知についてはどうにもなりません。
『人月の神話』では解決すべき複雑性は"本質的な複雑性"と"偶有的な複雑性"という2つにわけて語られています。優れた設計によって偶有的な複雑性はある程度緩和できると言われています。一方で本質的な複雑性は完全に解決することはできず、常に付き合っていく必要があります。この本質的な複雑性の発生源は「人間の行動の未知」であり、他人を完全に知ることができないことに発します。他にもシステムのロジック部分などの、どれだけ科学が発展しても最後に残るものが本質的な複雑性になります。
ホームズではない私たちはどうすれば良いのか
設計者は本質的な複雑性に対する銀の弾丸は持たず、灰色の脳細胞*3も持ち合わせていません。ホームズでもないし、完璧な演繹、推理なんて不可能です。
さて、ミステリーファンはご存知だと思いますが、「本格ミステリー」と呼ばれるジャンルは(乱暴に言えば)作中で説明された情報のみで読者が探偵になれるものになっています。単に読み物(ファンタジー)として成立するだけではなく、探偵(あるいは著者)との知恵比べとなるわけです。
本格ミステリーも結局は作中に出ている情報を拾っていくと確かに犯人は探偵の指すのですが、その情報の確かさや、すべてのヒントを本当に見つけられているのかという後期クイーン的問題は内包し続けています。言い換えれば「すべてをひっくり返す決定的な証拠X」の存在を否定できないというわけです。
設計も同じように、常に「最善の設計X」の存在を否定できません。偶有的な複雑性を解決する手段がもしかしたらあったかもしれません。
とはいえ、探偵たちは物語終盤で「その時点の真実」にたどり着いています。私たちシステム開発者、設計者も常に「その時点の真実」、つまり考えうる最善の設計を続けるべきだと思います。
たとえそれが、10年後に技術的負債*4と呼ばれようと、胸を張って、「犯人はお前だ」と設計をやり遂げ、論理的な推理を示しておくことが私たちにできる精一杯ではないでしょうか?