・困った時にアヒルちゃんに話しかけることである。
・「人に相談するために説明していたら自分で解決法を閃いた」という現象を再現する。
・ラバーダックは風呂に浮かべるアヒルのこと。デバッグはプログラム上の問題点を見つけて修正すること。
・一応真面目な思考整理法。
・なんかよくわからんが、Wikipediaですら「アヒルちゃん」と呼ばれているのでこちらでも統一しよう。8割悪ふざけで。
・やることはアヒルちゃんを素人だと思って、行き詰まった所を説明するだけ。
由来
The Pragmatic Programmer[1]という本で紹介された、プログラマーがラバーダックを持ち歩きアヒルちゃんに向かってコードを1行ずつ説明することによりデバッグを行うという話が由来である。
https://ja.wikipedia.org/wiki/ラバーダック・デバッグ
・エピソードの1つとしてこのような話もある。
あるところに、部下から相談されるのが大嫌いな上司がいました。その上司は部下から問題を相談されると、自分ではなく部屋に置いてあるアヒルのはく製に話せと言うのだそうです。
そして、ある若手エンジニアが、言われたとおりにアヒルに問題を説明しているうちに、答えが見つかることがよくあることに気づきます。
彼が本当にしなければならなかったのは、問題を言葉で表現するという作業だったのです。
https://www.lifehacker.jp/2019/10/solve-your-own-problems-with-the-rubber-duck-trick.html
雑な質問と良い質問
・(自分にとって)まともな答えを得るためには、当然まともな質問を考えなくてはならない。
最低でもどのような状況で、どのような成果を得たいのかは伝える必要がある。そのためには客観的視点から、目的や経緯やらいろいろな説明を、言語化しなくてはならない。
・モノをわかりそうな人のところに持ってって「これできないんですけど」なんて聞くのもアリな時もあるが、アレは聞かれた側にとっては大抵テンプレを返すしかない。「どうしたいのか」「具体的にどこがわからないのか」などを言ってないから。
・結構雑な質問は多く、そして質問者にその自覚がないこともまた多い。
昔から「エスパーにしか答えられない」なんて言われるような、必要な情報全部抜けてる質問なんてのはある。それに対して答えられちゃうエスパーもいたけど。
質問者は焦っていたり必死だったりするので愉快犯ということもないだろう。
・大抵は「そんなことしなくてもわかるべきことは分かっている」なんて思いそうなものだ。この上でしっかりと見落としていることは結構多い。
・知識や理解にはレベルがあり、それが十分か不十分かはそれで何をしたいのかに拠る。そして大抵の場合は、「使う」ことが一番簡単になっている。家電の仕組みを知らなくても、スイッチを入れればいいわけで。当然これは、壊れた時に直せない。
例えば自分の顔を鏡を見ないで描けるか、と言えば大抵はまず書けない。画力の問題以前によく見ないと細部は思い出せないだろう。たとえ鏡で毎日見ている顔でも。
写真を見て自分だとわかるには十分な理解度だが、描くためには不十分だ。
・行き詰まった時、状況を人に伝えて相談するためには、現状よりも深い理解と客観的な言語化(他人にわかるように言うこと)が必要になる。
客観視も必須だ。高確率で当人は「主観による省略」をしているし、問題点は大体そこにある。
それをしようとすれば自然と状況への理解と客観視は深まる=判断材料が増えるから、自分で解決法が閃くことは、少なくとも試みる前よりはある。
・簡単に言ってしまえば、1から説明する時に、初めて1から見直すことができる。それまでは見直した「つもり」であることが多い。
1から見直したから、自分で理由がわかると。
・独り言ではボヤキに近い。恐らくは「他者」という立ち位置は必須だろう。アヒルちゃんでいいけど。
類似した例
告白デバッグ
・やることはアヒルちゃんと同じだが、この場合は相手は同僚。告白はしない。
同僚はただ座っているだけでいいとされる。アヒルちゃんでいいじゃん。というか、黙って人の話聞いてるのもしんどいものが有ると思う。
・人によっては問題の解決ではなく「共感してもらう」方に目的が逸れていく者もいる。自覚はないのだろうが、それは自分の現状に対しての強い肯定をかける。間違いに気づく気もなくなるかもしれない。無生物のほうが良いと思われる。
テディベア
どこで読んだか忘れたのですが、あるアメリカの大学の一般学生向け計算機センターの事務室では、質問受付のクマさんのぬいぐるみが置いてあるそうです。
何か不具合や質問があったとき、事務員に聞く前にまずこのクマさんに一度話してからでないといけないとか。で、質問者の半数はクマさんが解決してくれるそうです。
https://srad.jp/comment/880400
・ベアプログラミング/テディベアデバッグと呼ばれるプログラミングの方法としても存在する。アヒルちゃんの代わりにクマのぬいぐるみという点以外は同じ。
・派生してサイレントベアプログラミングというアイデアを見かけた。
従来の難点として「アヒル(クマ)の人形に話しかけるやべーやつ」「うるさい」などと思われるリスクがあるわけで、じゃあ声に出さなきゃ良いじゃんというもの。
テキスト上で自分と相手を設定し行う。
相談:「Python でなぜか ValueError: need more than 1 value to unpack が出る」
:rabbit:「あのー、すいません。相談したいことがあるんですが」
https://qiita.com/sta/items/6661cfcb57cfefa9a36a
:bear:「ええよ。言ってみ?」
:rabbit:「えっとですね、今書いてる Python のコードでですね、ValueError: need more than 1 value to unpack が出るんですが、原因がわからないんです」
:bear:「いきなり言語とエラーメッセージだけ言われてもわかるわけないやん」
:rabbit:「と言いましても、このコードをどこから説明すればいいのかわからなくてですね。コンテキストが複雑なので、出来れば説明することなしに済ませたいなと思っています」
:bear:「無理やろ。そんなん一般論しか言えへんわ。でもそれくらいわかっとるんやろ?」
:rabbit:「はい」
:bear:「本当に?じゃあそのエラーメッセージの意味を説明してみ?」
:rabbit:「えっと、unpack するのに必要な箱が足りないってことです」
:bear:「unpack とは?」
以下略。
重要なのが、これゲシュタルト療法の対立分身対話法そっくりだってことで。
椅子を2つ用意する。座布団でもクッションでもいいだろう。
https://embryo-nemo.com/472/#i-3
まず片方の椅子に座り、トップドッグの立場として意見を述べる。
次にもう一つの椅子に座り、アンダードッグとしてそれに反論する。
以上を繰り返し、妥協点を探る。
こちらは解決ではなく、「対話」がメインだが。トップドッグ=強気な自分とアンダードッグ=弱気な自分との。
ラバーダッグデバッグとしては「聞き役」は多分喋らんほうが良いのだろうが、こう言うスタイルもアリだと思う。人によっては聞き役が嫌味なキャラになるかもしれんし、その場合はやめたほうがいいだろうけど。
勘違いと思い込み
・ラバーダックデバッグの場合、説明している間に自分が「言ったとおりにやってない」ことに気づくか、「ここは間違いない」と思いこんで確認してないという例が多い。勘違いや思い込みに気づくのは難しい。
・文章でも、推敲の際には音読しろなんて意見もある。黙読だと「できてるつもり」になってしまい、問題の有る文章をスルーしてしまいがちということ。
・自分の頭の中だけで済ませる状態というのは、長年連れ添った夫婦が指示語(コレとかアレとかソレとか)で意思疎通ができてしまう状態に近い。言わなくてもわかるとか、いい加減でも大体汲み取れるとか。
・雑で早い。感覚的であり、パターン的である。ほぼ経験則とアウトプットで成り立っており、分析や思考とは別物となってくる。
これ自体はその方が早くなるし、その分他にも手が回るしで良いといえば良い。肯定的に言えば、「考えなくてもできる」ということである。
しかし言い方を変えれば「できてるつもり」の思い込みで動いている状態になる。大体は実際出来てるから問題ない。しかしそれが勘違いだった場合にはどうなるか。
・何かあった時にどこに問題が有るのか探すのが超めんどくさくなる。この流れでの失敗は、基本的に「どこから間違えたのかわからない」状態になる。
認識が「AだからBすればCになる」そのものなので、AだからBしたのにCにならない時には「なんで?」ってなる。
・ただ、この上で、経験則に拠るアウトプットが人の基本スタイルであるだろう。これをやらないってことは、毎日自分の家の前で「ここは本当に自分の家か?」と疑うのとおなじレベルになる。ノイローゼか。
・人の活動全てに、何かしらミスの余地は織り込まれている。それは修正する必要がある。さてどこで間違えたのか。
この「デバッグ作業」がうまく行かず、あるいはその必要性にすら思い至らず、壁に阻まれた気分になることもあるだろう。あるいは自分はこんな人間だと思ったりとか。
・ラバーダックデバッグは「相手を素人だと思え」という点と、それに対して説明を試みる=状況を1から説明することで主観による省略(=思い込み)をオフにする。
メモ
・なんかよくわからんが、アヒルちゃん人気あるっぽい。クソデカアヒルちゃんが世界各地で展示されるプロジェクトとかある。
その作者曰く、「ラバーダックは年齢や人種に関係なく、子供のころの記憶や、思い出を思い起こさせ、幸せや喜びの象徴でもある」。
まぁ、童心には帰れるかもしれない。
・犬猫やらぬいぐるみに話しかけるのは効果あるって事になって面白い。
・ディスクレパンシーという概念がある。不一致という意味。片方がもう片方より早いとか遅いとか、高いとか低いとかそんな感じ。例えば「セルフディスクレパンシー」なら、理想の自分と現実の自分とのギャップに努力したり、苦しんだりする様を指す。
今回の場合、「できてるつもりの認知」と、「できてない現実」のディスクレパンシー(ギャップって言ったほうが楽だった)をアヒルちゃんを通してバランスを取ることになる。
・認知というか、頭の中というのは基本的に異様に早い。この上でよく見ないで先に行く。せっかちな所がある。思考のペースダウン、現実と歩調を合わせることは、時に必要になるだろう。
・認知の歪みに対抗するためのメタ認知(自分を客観視する能力)も、頭の中に対しての「動体視力」のような側面が有ると思っている。
自分が見えていないのは、「早すぎて見えない」ということも有るのではないかと。そこで気づかなければ次へ行ってしまう。次に気づくチャンスは、問題が起きた時になる。
・相談相手は何でも良い、と言われてはいる。個人的には「目」がある物の方が効率がいいだろうと思う。
募金箱に目玉のシール貼ったら募金の量が増えたって話がある。論文で発表されたそうだ。
実験は、イングランド北部にある賑わっているスーパー店舗のレジ横に、店のロゴマークと慈善団体の名前が入った白いプラスチック製の募金箱を置いて行われました。そして、その研究の過程において募金箱に行われた変更はただ目玉シールを貼り付けただけでした。
https://japanese.engadget.com/jp-2019-05-04-48.html
シール貼る前の平均が5.48ポンド、シールがあると6.69ポンドに増加。
・「目」は「他者の内面」の象徴でも有る。加えて人間の品性や理性、自制心というものは、内発的よりも他人の目を意識した「外圧」から生じる比率の方が高い。
・まぁ要するに、目があったほうが多分客観視は楽になる。
・その問題が例えアヒルちゃんには荷が重かったとしても、誰かに聞くためのリハーサルとしては十分に役に立つだろう。