プログラマとウミガメのスープ
正月に「ウミガメのスープ」という推理ゲームで遊んだ。
これは、「シチュエーションパズル」ないし、「水平思考パズル」などと呼ばれるらしい。
シチュエーションパズルは通常何人かのグループで遊ぶ。
一人が問題を出し、他の人はイエス(はい、肯定)・ノー(いいえ、否定)で答えられる質問を出す
場合によっては「関係ありません」などのイエス・ノー以外の答もあり得る
質問者は、出題者が考えているストーリー、あるいは物を推測して語る。
それがすべての謎を説明できたとき、このパズルは解けたことになる。
以下の問題は、シチュエーションパズルの有名な問題の一つ。
ある男がバーに入ってきて、バーテンダーに水を一杯注文した。
バーテンダーは銃を取り出し、男に狙いをつけて撃鉄を上げた。
男は「ありがとう」と言って帰って行った。
一体どういうことか?
この問題で、出題者への質問とその答は、たとえば以下のようなものになる。
質問:バーテンダーは男の声を聞き取ることができたか?
答:はい。
質問:バーテンダーはなにかに怒っていたか?
答:いいえ。
質問:彼らは以前から顔見知りだったか?
答:いいえ。もしくは、関係ありません。
質問:男が「ありがとう」と言ったのは皮肉だったか?
答:いいえ。(ヒントを付けて答えるなら、「いいえ、ある理由で、男は心から喜んでいました。」)
質問:男が水を頼んだとき、乱暴な口調だったか?
答:いいえ。
質問:男が水を頼んだとき、変な頼み方だったか?
答:はい。
正解は以下の通り。
男はシャックリをしていて、水を注文した。
バーテンダーはシャックリの声を聞いて状況を知り、手っ取り早い方法として、銃で男を驚かしてシャックリを止めた。
男は驚いたが、シャックリが止まったので喜んだ。
そして水を飲む必要も無くなった。
遊んでいるときに、どうも、「ウミガメのスープ」になじめなかった。例えば、上記の例では「驚いてシャックリなんか止まんねーよ。」といったように、パズル自体の質に起因するもの。また、「「乱暴な口調か否か。」の問いには、「関係ない」かむしろ「はい」と返答するのが妥当じゃないか。」のように、出題者の返答に起因するものである。
即席で作った次のパズルを見てほしい。
問
あなたはあるウェブシステムを開発している。
テスターから不具合の報告が上がったが、あなたの環境では再現しない。
一体なぜ?
あなたとテスターは同じサーバで確認をしましたか。
-> いいえ。
あなたが確認したサーバと、テスターが確認したサーバに上がっているソースコードは同一ですか。
-> はい。
status codeは200ですか。
-> はい。
ブラウザのコンソールにエラーが出力されていますか。
-> はい。
テスターはブラウザのキャッシュをクリアして確認していますか。
-> はい。
あなたとテスターが使用してるブラウザは同一のものですか。
-> いいえ。
テスターが使用してるブラウザはIEですか。
-> はい。
答
あなたはChromeを使用していて、テスターはIEを使用していた。
一方で、あなたはIEがサポートしていない「Arrow function expressions」使用していたため、
テスターでのみ不具合が発生した。
こんなものは日常茶飯事じゃあないか。プログラマは厳密に「yes/no」で答えを得られる「質の良い」ウミガメのスープを毎日やっているのである。正月に感じた腑に落ちない点の正体はこれだったのだ。
プログラマが遭遇した事象をまとめた、プログラマのための「ウミガメのスープ」を出版したらそこそこ売れるんじゃないだろうか。
例えば、こんな話がある。
問
あるサーバは毎朝、決まった時刻に強制終了している。
一体なぜ?
答
清掃業者が掃除のためにサーバのコンセントを抜いていたから。
本格的に収集したら出版できそうな気がしてきた。