トラック3・🔍人間がコンピュータになる訓練

ラバーダック・デバッグ

読む目安 約10分・ゴール:コードを声に出して説明することで、自分の理解の穴を見つけられるようになる

アプリでこのトピックを学ぶ(無料・登録不要)

このトピックの要点

海外のプログラマの机には、ゴム製のアヒルのおもちゃが置いてあることがあります。ふざけているわけではありません。アヒルに向かってコードを説明するという、由緒正しいデバッグ手法のためです。

やり方

  1. 詰まっているコードを開く
  2. アヒル(ぬいぐるみでも観葉植物でも可)に向かって、声に出して説明する
  3. 「この行は〜をしています。なぜなら〜」と、1行ずつ、飛ばさずに
  4. 説明が詰まった場所で止まる。そこがバグか、理解していない場所

本当にこれだけです。そして、驚くほどよく効きます。

ビットボクでよければ聞くよ。ボクは何も答えないけど、それでいいんだ。

なぜ効くのか

理由は、頭の中で読むときと、声に出すときで使っている脳の働きが違うからです。

黙読では、人は無意識に飛ばし読みをします。「ここはこういう意図で書いたから、まあ大丈夫」と、自分の意図で埋めてしまうのです。ところが声に出して他人に説明しようとすると、その省略ができません。相手は何も知らない前提で話すことになるからです。

そして「この行は……えっと、なんでこう書いたんだっけ」と詰まる瞬間が来ます。そこが穴です。理解していない場所を、自分の口が教えてくれるわけです。

うまくやるコツ

説明できない=まだ書くべきではない

この手法には、もう一つの使い道があります。書く前に使うのです。

これから書こうとしている処理を、コードにする前に声で説明してみる。すらすら言えるなら書けます。詰まるなら、まだ手順が固まっていないということです。そのまま書き始めれば、確実に迷子になります。

書けない原因は、たいてい文法を知らないことではありません。何をすればいいかが決まっていないことです。そういうときは第2トラックに戻って、分解と擬似コードをやり直すのが最短の道になります。

AI時代のラバーダック

今なら、アヒルの代わりにAIに説明するという手があります。しかもこの方法には、おまけが2つ付きます。

  1. 説明を書いているうちに自分で気づく(従来のラバーダック効果)
  2. 気づかなかった場合、その説明文がそのまま良い質問になっている

「動きません、助けて」と聞くのと、「この関数は合計を出すつもりです。3行目で i を足していますが、結果が1つ多くなります」と聞くのとでは、返ってくる答えの質がまるで違います。説明を書く行為そのものがデバッグなのだと考えてください。

この「自分の理解を言葉にする」習慣は、第6部でAIと組んで開発するときの土台にもなります。

アプリでこのトピックを学ぶ(無料・登録不要)

確認問題

確認問題 1

ラバーダック・デバッグ(アヒルの人形にコードを説明する手法)が効く理由として、最も適切なものはどれでしょう。

  1. アヒルの人形にプログラムを直す力があるから
  2. 声を出すと集中力が上がり、タイピングが速くなるから
  3. 説明した内容が、そのまま自動でコードになるから
  4. 声に出して他人に説明しようとすると、黙読のときのような飛ばし読みができなくなるから
答えを見る

正解:D(声に出して他人に説明しようとすると、黙読のときのような飛ばし読みができなくなるから)

黙読では「ここはこういう意図だから大丈夫」と自分の意図で行間を埋めてしまいます。相手が何も知らない前提で説明すると、その省略ができません。そして説明が詰まった場所こそが、理解していない場所=バグの候補です。相手はアヒルでも観葉植物でもAIでも構いません。

確認問題 2

ラバーダック・デバッグのやり方について、本文が「必ず」と念を押しているのはどれでしょう。

  1. 頭の中で読むのではなく、必ず声に出して説明する
  2. 必ずアヒルの人形を用意する
  3. 必ず他の人に聞いてもらう
  4. 必ずコードを紙に印刷してから読む
答えを見る

正解:A(頭の中で読むのではなく、必ず声に出して説明する)

声に出すことが本体です。頭の中でやると結局は飛ばし読みになり、「ここはこういう意図だから大丈夫」と自分で行間を埋めてしまいます。聞き手はアヒルでも観葉植物でもAIでもよく、人形そのものに意味はありません。他人に聞いてもらう必要も、印刷する必要もありません。

「人間がコンピュータになる訓練」の目次

  1. トレース表とは——実行を目で見る道具
  2. 代入をトレースする
  3. 分岐をトレースする
  4. ループをトレースする
  5. バグを見つける思考法——仮説と検証
  6. ラバーダック・デバッグ
  7. エラーメッセージは敵ではない
  8. 総仕上げ——紙上プログラム実行

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版の販売ページは準備中です。

ほかのトラック

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版