Rubber Duck Debugging

Note 2022/05/06:
これは前ブログからの移行記事です。一部表現や文体の調整を行った箇所がありますがご了承ください。

お久しぶりです!しろくま@胡瓜です。

皆さんプログラムしててこんな経験はありませんか。

あなた: ママー、このプログラムが動かない!!

ママ: どっか間違ってるんだよ。もう一度確かめな。

あなた: そんなことないよ!めっちゃ見直ししたもん!

ママ: じゃぁ見直しが足りないんだよ。

あなた: そんなことないもん!うぇーん、パパー!!!!

パパ: ママの言う通りだ、ちゃんと見直ししなさい。(以下無限ループ)

ありますよね。いくら見直してもどこが間違ってるのかわからない。でも間違ってなかったらちゃんと動くはず。大抵、こう言うミスの原因の大半は===を間違えたとか、不等号の向きが違ったとかしょうもないミスであることが多いです。

そんなときに使える技。ラバーダック・デバッグ(Rubber Duck Debugging)をご紹介します。

用意するもの

  • お気に入りのぬいぐるみ
  • 恥を捨てた心 または個室

これだけです。ぬいぐるみは本家ではラバーダック(お風呂にいるアヒルちゃん🐤)を使用するそうですが、なんでも大丈夫です。持ち運べる卓上サイズのものがちょうどいいと思います。恥を捨てた心とは側から見たら「あいつ頭おかしくなったんじゃね?」って言う感じのことをするからです。個室があればそちらで存分やるのもいいでしょう。

今回僕はこちらのぬいぐるみにお付き合いいただくことにしました。kawaii

やり方

まず、合ってるはずなのになぜかうまく動かないプログラムをぬいぐるみに向かって声を出しながら説明していきます。その際に以下のことを必ず守ってください。

  • ぬいぐるみはプログラミング初心者だと思って丁寧極まりなく説明する。
  • 1行ずつ上から順に説明する。

やり方はこれだけです。簡単ですね。大事なのは恥を捨てることです。

わからないことがあったとき、何がわからないのかを人に説明している途中に勝手に自己解決してしまうこと結構ありますよね。それを再現するものになります。「ここがこうだから…あっ、待って、これ違くね?」みたいな感じでミスを見つけることができます。

練習

適当に下に1から10まで足すプログラム(C++)を用意しておきました。ただしこれは正しく動きません。これぐらいであればラバーダック・デバッグしなくても余裕だと思いますが練習だと思ってやってみましょう。(forを使えって感じですが、ここではあえて使わずにややこしくしてます。)

「まず、sumって名前の変数を0にして…あっこれは総和を代入する変数ね。次に、カウンタも0にリセットする。次にsumにcountの値を足して…」

って言う感じです。

練習の答え

if(count < 10) {

の行が違いますね。これは10まで足さないといけないので、

if(count <= 10) {

が正しいです。

最後に

今回はプログラミングを例にしてラバーダック・デバッグ🦆を紹介しましたが、意外と日常生活のいろいろなところで使えます。例えば僕がアホなだけかもしれませんが方程式を何回解いても答えが毎回変わる謎現象や、なぜかうまく動かない回路など応用できるところは幅広くあります。

最初は慣れるまで違和感があるかもしれませんが、慣れて仕舞えばものすごく有能なデバッグ方法になるのでぜひ試してみてください。ちょうどいいぬいぐるみがない人は今すぐ買いに行きましょう。愛着の湧く「ずっと一緒にいたい」と思えるものを選ぶことを忘れずに。

ではまた

Comments