C言語学習ポータル(無料版) 学習コンテンツ 人間がコンピュータになる訓練 ラバーダック・デバッグ

🔍 人間がコンピュータになる訓練

ラバーダック・デバッグ

無料公開版に収録・読む目安 10分

🎯 コードを声に出して説明することで、自分の理解の穴を見つけられるようになる

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

やり方

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

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

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

なぜ効くのか

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

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

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

うまくやるコツ

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

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

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

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

AI時代のラバーダック

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

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

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

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

要点まとめ

アプリで演習問題まで解く(無料・登録不要)

この項目に出てくる用語

デバッグでばっぐ

プログラムに潜むバグを見つけて直す作業のこと。「なぜ期待通りに動かないのか」を仮説と検証で突き止めていく、地道だが重要な作業。「バグ(虫)を取り除く」という言葉の成り立ちがそのまま作業内容を表している。

バグばぐ

プログラムに含まれる誤りのこと。意図した動きと実際の動きがずれている状態を指し、プログラミングにつきものの現象として扱われる。「虫」を意味する言葉が由来とされ、古くから使われてきたプログラミング用語。

擬似コードぎじこーど

プログラミング言語の文法にとらわれず、日本語や簡単な記号で手順の流れを書き表したもの。実装に入る前に頭の中を整理するための下書きにあたる。「もし〜ならば」「〜を繰り返す」のように、日本語まじりで書いてかまわない。

同じトラックのほかの項目

トレース表とは——実行を目で見る道具トレース表の作り方と書き進め方のルールを覚え、自分で表を用意できるようになる 代入をトレースする代入が「右辺を計算して左辺に上書きする」動作だと理解し、値の推移を正確に追える 分岐をトレースする条件の真偽を判定し、通った道だけをトレース表に残せるようになる ループをトレースする繰り返しの1周ごとに条件判定・本体・更新を追い、ループ終了後の値まで正しく求められる バグを見つける思考法——仮説と検証バグの原因を絞り込む手順(再現→範囲を狭める→仮説→1つずつ検証)を身につける エラーメッセージは敵ではないエラーメッセージの構造を知り、英語のまま読んで対処できるようになる 総仕上げ——紙上プログラム実行代入・分岐・繰り返しが混ざったプログラムを、最後まで自力でトレースできる
‹ バグを見つける思考法——仮説と検証 エラーメッセージは敵ではない ›

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

完全版(BOOTH)を見る

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

Web版 / BOOTH