メルマガバックナンバー 第9回
アナログなデバッグって?
そのバグを語れ!
今回のテーマはアナログなデバッグです。
バグの原因が分からない状況で、有効な方法を一つ紹介します。
バグで悩む学生から相談された時、私がよく用いるテクニック?です。
それは…
バグの内容を、人に説明する
って事です。
つまり「どんな状況に陥ってるか」を、他人に話してみるわけです。
私が学生の相談を受ける時、最初の会話はほとんどテンプレになります。
学生「先生、ヤバイです。バグが取れないんです!」
私 「じゃ、まず どんな感じか話してみてー」
学生「ア、ハイ。かくかくしかじか…」
こんな風に、現在の状況を具体的に話してもらいます。
そして、あれこれ喋ってるうちに「あ!」と何かに気付き、解決のカギが見つかります。
こんなケースは驚くほど多いです。
情報の整理
なぜ、こんなことが起きるか?
それは、具体的な言葉にすると、脳内で情報が整理されるからです。
1人で考えている時は、頭の中に色んな刺激が飛び交い、いわゆるカオスな状態です。
やってみると分かるんですが
自分が詳しい事でも他人に説明するのは、なかなか難しいですよね。
「アレだよアレ」
みたいに、ついつい代名詞を多用してしまいます。
好きなアニメやゲームの魅力を、見たことない人へ説明しても上手く伝わらない…
そんな経験ありませんか?
そのカオス状態を具体的な言葉にするには、まず考えている事を分割・統合・並び替えする必要があります。
そうやって情報を整理する過程で、新しい視点が見付かり、解決に向かうカギが表れるのです。
とりあえず友人でも同僚でもいいので、何かを話してみると良いでしょう。
紙に書いたり、身振り手振りも交えると尚良いです。
聞いた話ですが、ある達人プログラマーはフィギュアに話しかけて解決策を探るそうです。
これなら1人でも大丈夫ですが、傍から見るとヤバイ人ですね…
話す視点
説明のコツですが、基本は自由に話せば良いです。
もし言葉に詰まるようでしたら、以下を参考にしてみて下さい。
私が学生に合いの手を入れる時、よく使うアプローチです。
そもそも何をしたいのか?(目的)
実はこれが分かってないケース、マジで多いです
私もよく自問自答します
どんな時に発生する?(発生条件)
バグが起きる条件を説明してみる
発生確率を100%にできれば占めたもの
いつまで動いた?
最近変更した箇所を思い出す
ソースじゃなくて、環境設定のケースも
ここは正常に動いてる?
正常に動いてる範囲を推測する
不要な所をコメントアウトして、最小構成で動かす
これ呼ばれてる?
ifブロックや関数の中に入ってない可能性を検討する
ブレークポイント、print出力で確認する
上の例は話す時だけでなく聞き手に回る時でも、参考になると思います。
人に分かりやすく説明をする、そして脳内を整理する。
これは非常に強力な方法なので、ぜひ試してみて欲しいです。
私は意識高い系っぽく
オーラルデバッギング Oral Debugging (訳:口述デバッグ)
と読んでます。
前回クイズの答え アニメOP当て
前回のクイズは、こんな問題でした。
>Twitterに動画を上げました。
>これはラズベリーパイとLEDで「あるアニメ」のオープニングを再現した様子です。
>さて、そのアニメのタイトルとは?
メルマガのクイズ問題です。
あるアニメのOPをラズベリーパイと8x8LEDで再現しました。
わかった人はメルマガに返信して応募しよー。#RaspberryPi https://t.co/JxwdKCYw50 pic.twitter.com/cWrVTZURIy— K-Eba@プログラミング書籍の館 (@EndymionProgram) 2018年2月24日
正解はドラゴンボールZでした。人造人間編のOPです。
今回は5件の応募を頂き、正解者は3名でした。おめでとうございます。パチパチパチ。
3名の方には、Amazonギフト券をお送り致します。
クイズ!ヤバいソース
さて今回のクイズは、私が経験した恐ろしい話です。
【 問 題 】
詳細は伏せますが
かつて私は某ソース(C言語)の関数冒頭で、こんな記述に遭遇しました。
// この配列は一度も使ってないけど、消すとクラッシュするので
// 絶対にコメントアウトしない事!
char aaaaa[256];
↑をみた時、思わず失禁…はしなかったですが恐怖で体が震えました。
さて、何故これが恐ろしいのか?
その理由をお答えください。
正解した方の中から3名様に、Amazonギフト券コード(500円分)をメールでお送ります。
応募は本メールに返信すればOKです。
※募集は終了しました
今回はここまでです。読んでいただきありがとうございました。
プログラミング書籍の館 江畑