【ラバーダックデバッグ】問題解決の糸口は話すだけ!?

PR
問題解決の糸口はクマ科アヒルか人間か?

自分一人で長時間悩んでいたことが、相談すると一瞬で解決することがありませんか?相手から答えを教えてもらったわけでもないのに。

「話すだけで問題が解決する」という現象は、システム開発に関する書籍でもよく語られ、現場でも多く見られる現象です。

なぜ、そんなことが、しかも頻繁に起きるのでしょうか?

目次

ラバーダックデバッグとは

ラバーダックデバッグとは、「ゴム製アヒルに対して声に出して問題点を説明すると、問題が解決できる」という手法です。

ラバーダッグはゴム製のアヒル、デバッグは不具合修正のことで、システム開発の現場でよく用いられていますが、あらゆる問題解決にも有効であるとして注目されています。

「達人プログラマー 職人から名匠への道」という名著にある次の記述から「ラバーダックデバッグ」と呼ばれています。

完了できない、納期に間に合わない、壊れているといった理由を誰かに報告する前に、いったん立ち止まって自分自身の言い分に耳を傾けてください。ディスプレイの上に置かれているゴム製のアヒルちゃんでも猫でも構わないので、まず話しかけてみてください

アンドリュー ハント, デビッド トーマス他「達人プログラマー 職人から名匠への道」

相手はアヒルのおもちゃです。答えを教えてもらえるなんてことはありません。

それでも、「声に出して説明するだけ」で、長時間悩んでいたことの解決方法が見つかったり、気付けなかったことに気付けたりするのです。

なぜ、このようなことが起こるのでしょうか?

ラーニングピラミッド

ラバーダッグデバッグ ラーニングピラミッド

どのような学習行動がどれ表すだけ定着するかをラーニングピラミッドによると、「他の人に教える」ことが最も学習効率が高いとされています。

自分の実体験から考えても、アウトプットする前提でインプットした時ほど深く理解できることが多いです。

「相談する」ことも、頭の中をアウトプットすることです。

アウトプットすることで、次のことを自然に行っていると考えられます。

  1. 説明するために事象を整理する
  2. 言葉にして自分で聞く
  3. 聞こえた自分の言葉を自分で客観視する
  4. 言葉にする過程で頭の中が整理される
  5. 矛盾に気づく・理解が深まる

ラバーダックデバッグのメリット

ラバーダッグデバッグ メリット

ラバーダックを行うメリットは次の5つです。

  • 気軽に相談できる
  • 問題を自分一人で解決できる
  • 問題が整理できる
  • 理解が深まる
  • 相談する練習ができる

気軽に相談できる

問題が起きたとき、気が焦ったり自分で解決しなければと思い込んでしまい、人に相談するのが苦手な人もいますよね。

そんな時、机の上のアヒルなら、ちょっと友達に相談するような気軽さでリラックスした状態で話をすることができます。

「リラックスした状態」の時にこそ、解決策が思いつきやすいものです。

問題を自分一人で解決ができる

机の上のアヒルに相談することで閃きが生まれたり、問題点が明確になったりするため、一人で問題解決できます。

相談相手を探したり、相手の時間ができるまで待つ必要もありません。

問題が整理できる

「声を出して説明する」ことで、自分の声を自分の耳で聞くことになり、問題点を頭の中に絵として描きやすくなります。

問題が客観視しやすくなることで、問題を整理し直したり、矛盾点がどこか見つけることができます。

理解が深まる

問題を整理する過程で事実を確認しなおしたり、追加で調べたりすることで、問題に対しての理解が深まります。

相談する練習ができる

たとえ問題が解決できなかったとしても、一度アヒルに向かって説明することで問題点を整理することができるため、人に相談するときにも論理的に話せます。

メリットが分かったところで、ラバーダックデバッグを実践してみましょう。

ラバーダックデバッグの実践方法

ラバーダッグデバッグ ラバーダッグ

1. ラバーダッグを用意する

まずは相談相手を隣に置きましょう。

相談相手はアヒルでなくても構いません。「リラックスした状態」で話せる相手を選びましょう。

ベアプログラミング(Bear Programing)

テディベアを相手に困りごとを相談する「ベアプログラミング」も推奨されています。

テディベアは不安を解消するとも言われていますので、おすすめです。

カーニハンの「プログラミング作法」には、とある大学のヘルプデスクにはテディベアのぬいぐるみが置いてあって、問題に困った学生にはいったんぬいぐるみに向かって説明させたという話もあります。

自分のコードを他人に説明してみよう

自分のコードを誰かほかの人に説明して聞かせるのも効果的なテクニックだ。こうすると自分自身にバグが見えてくることが多い。 場合によっては説明し始めた途端に気がついて、 「あ、もういいや、変なとこ
ろがわかったよ。 ごめんごめん」 などと言って照れくさい思いをすることもある。
このテクニックは意外なほど有効だし、聞き手は別にプログラマでなくてもかまわない。 ある大学の計算機センターのヘルプデスクのそばにはテディベアのぬいぐるみが常備されており、 魔訶不思議なバグに悩む学生は、 人間のスタッフに相談する前にそのぬいぐるみに向かって説明しなければならないことになっている。

誰かと問題について話すこれは「告白デバッグ」とも呼ばれる。他人にエラーを説明していると、自分のミスに気付くことがある。

Brian W. Kernighan / Rob Pike「プログラミング作法」

告白デバッグ(Confessional debugging)

もちろん、人に話すことも推奨されています。

誰かと問題について話す

これは「告白デバッグ」とも呼ばれる。他人にエラーを説明していると、自分のミスに気付くことがある。

McConnell「コードコンプリート(下)第2版 完全なプログラミングを目指して」

相槌を打ってもらうだけで、言葉が出てきやすくなるのかもしれませんね。

2. 問題を言語化する

相談相手に向かって、問題を言葉で説明します。独り言でも良いですし、パソコンでメモアプリに入力しても良いです。

まずは頭の中をアウトプットすることが大事です。

これだけで問題点が明らかになり、問題解決することもあります。

3. 事実関係を明らかにする

次は問題点の整理です。

話す内容を、事実と推測を分けます

事実は5W1H(When・Where・Who・What・How)の要素に分けて、相談相手に分かりやすく説明します。

前提条件や既に試してみたことなど、分かることはできるだけ明示すると良いでしょう。

4. ゴールを確認する

事実関係が明らかになったら、もう一度ゴールを確認しましょう。

「どうあるべきか」「どうなれば良いのか」というゴールはもちろん、「こういう状態は不適切」という除外すべきゴールも共有すると良いでしょう。

意外とゴールが明確になっていない状態のまま悩んでしまっている人も多い印象です。

5.解決策を調べる

ゴールと問題点が明確になったら、もう一度自分で解決策を調べましょう

漠然と悩んでいた時とは調べ方が変わってくることもあります。誰かに相談しても良いですね。

「事実を確認し直す」「関連書籍を読む」「インターネットで質問する」「適切な人に相談する」などゴールにあった方法を取りましょう。

整理した問題点と明確なゴールを意識しながら解決策を探すと脳が答えを見つけやすくなります。また、相談相手も回答しやすくなります。

6. 結果をまとめて共有する

相談に乗ってもらった人には、どうなったかという結果を共有しましょう

問題が解決した時はもちろん、問題解決しなかった場合も共有するとこの方法はダメなのだということが分かり、あなたの経験や悩んだ時間が誰かの役に立ちます

まとめ:ラバーダックデバッグは有効な問題解決法

ラバーダックデバッグは、「アヒルに対して声に出して問題点を説明すると、問題が解決できる」という手法です。

システム開発以外にもあらゆる問題解決に有効な方法です。

好きな人形やおもちゃを近くにおいて、ぜひ相談してみてください。

目次