メルマガバックナンバー 第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です。
 ※募集は終了しました
今回はここまでです。読んでいただきありがとうございました。
プログラミング書籍の館 江畑

