ウェブサイト及びサーバー監視の プレミアム製品

Server Densityについて

ラバーダックデバッグの困難から抜け出す方法

1940年にハーバード大学の研究者のチームはMark IIコンピュータのリレーでスタックしている蛾を発見しました。「デバッグ」という用語の起源にいろいろな説があります。人間は初期の段階からからデバッグしています。根本的には、デバッグとは問題解決です。例えば。気候が変化し、淡水の流れ凍結した際に、魚を獲る問題 を解決するといった場合です。ほぼ、電気がない状態で、アポロ13の乗組員を救出する方法を考え出す場合です。

これは決して簡単なことではありません。

デバッグ、すなわち問題解決は、 すべての知的機能の中で最も複雑だそうです。人間は長期間に渡ってこれに取り組んできましたが、必ずしもうまくいったり、楽しんでいるというわけではありません。

実際には、人間は問題解決を避けてきました。

問題解決は無料ではありません。人間の脳は 体全体のエネルギー消費の約20%しか占めていません。人間はそもそもサバイバルとエネルギーの保存できるように、できているようなもので、考えるということを最後の手段ととらえる傾向があります。
 

困難な状況にスタックする

問題解決について考える時でも、実際にはそうではない場合もあります。私たちは、普通は実際の問題解決を必要としない自動的な活動をデフォルトとし、どのような方法でもグレーなことには無理をしません。( 機能的固定性を確認).

言い換えれば、考えることよりも掘る方が簡単であるということです。掘るというのはマニュアル作業で、繰り返しの作業です。考えもせずに、掘り続ければ、穴はどんどん深くなるばかりです。深くなればなるほど、多く投資する事になります。困難を深堀するということは、タスクに不均衡な時間を費やしてしまうということです。それは自分たちがやっていることの重要性が(サンクコスト)が歪み、論理自体がが歪みます。

先週、当社は 監視用のソフトのアラートの待ち/繰り返しの問題を解決するために、困難を深堀するようなことに、開発の時間を数時間割きました。

当社は、内部の状態の移行に何か問題があったと仮定し、コードのコア・ロジックのトラブルシューティングを開始しました。実際にはバグは他にある事がわかりました。(これはUIがアップデートをすべきでないフィールドをアップデートしていました)。つまり、最初の勘は見当違いであることが判明しました。それ自体に問題はありません。

その間違った仮定の下で、時間を費やす事は理想的ではありません。自分の仮説に疑問を投げかけるのを辞めてから、例えば自ら投資を始めて時に、リソースの配分ミスが始まりました。

当社でも、立ち往生する状況を回避する事はできません。しかしながら、そのような事が起きた場合は、それに対処するためシステムを持っています。ここではそれらの5つを紹介します。

1.フローの復元 – コンテキストスイッチ

皆さんも感じだことがあると思います。正しい場所にいるという感覚です。素早くタイプができなかったり、インスピレーションを流れ込んで、時間を忘れたりしてしまう時です。

また何かにスタックしてしまった時などその逆の場合は、自分が考えているようなソリューションや突破口が空間的または精神的に見つからない場合です。つまり、何も前に動いていないのです。

そのような場合には、起き上がってその場を立ち去った方がいいと思います。当社のメンバーは、会社の近くのChiswick Commons を散歩する事で対処しています。自分たちの思考パターンを置いておき、脳がもっと遠くまでさまようようにするのです。.

そこでコンテキストスイッチが役立ちます。6週間ごとに皆が予定していた仕事を止め、丸1週間自分が選択した別のプロジェクトに取り組みます。意図的に気晴らしをする目的は、ある一定の時間は問題から離れるためです。自分が戻るまでには、こうすることで困難なことは蒸発しているかもしれません

最後に、私たちは当たり前と思う場合でも、睡眠のことに言及しないならば不注意といえるでしょう。睡眠は脳を活性化させるだけではなく、神経科学者は インキュベーション効果と呼んでいます。. 私たちが寝ている間に、脳はデバッグしてくれるようなものです。

2. 問題を説明する

“シンプルさは究極の洗練である”
\~ レオナルドダビンチ

人に物事を説明するときには、私たちはスローダウンする傾向があります。なぜでしょうか?それは話す事で、人は状況から解放されるからです。それではまだ、話に追いつくことができません。

彼らが問題を理解するためには、最もシンプルな表現を使う必要があります。では、一体どんな問題を解決しようとしているのでしょうか?私たちは修飾語を使います。なぜ私たちはこの問題に時間を費やすのでしょうか?なぜ重要なのでしょうか?またこれまでどんなことを試してみたか、説明します。

実際はそれは大変なことであるように思われるかもしれません。良い質問にある厳密さは、魔法のように自分を表現するためソリューションとして十分です。良い質問を明言化することで、脳が問題を解決しようとするモードに追い込むのです。

こうすることで、そこで次のテクニックに移ります。 .

3. ラバーダックデバッグ – 質問をしてみなさい!

悪名高いラバーダックは、1999年にthe Pragmatic Programmer.の出版と同時に生まれました。

ラバーダックはかわいいものです。問題は、それがスマートではないということです。自分たちが扱っている問題の性質を​​理解するためには、余分なまでに説明をする必要があります。従来の方法のように、私たちはスローダウンし、物事を単純化する必要があります。

私たちはあどけないアヒルの笑顔を見つめて、しばしふとおもうことがあります。これは一番簡単な方法なのか?これは本当にやらねばならないのか?

これが当社のラバーダックのひとつで、こちらでご覧いただけます。Server Density.

当社のラバーダック

4. ピアリビューとペアプログラミング

時によっては動きのない物に語りかけることが、実行可能でない場合があります(オープンプランのオフィス?)または、問題解決のソリューションが自分の領域や範囲外であったりすることもあります。

何も単独では起こりませんし、チームワークが大切になります。コードバディ を持つ事で、スタックしてしまうという恐怖を軽減することができます。そんなことはないかもしれませんが、デバッグが面白くなるかもしれません、

ピア・レビュー(コード上の多くの人が確認する)は他の開発者と協力し、コードにバグがないことを確認するための最適の方法です。また、ものごとを学び、プロフェッショナルとして成長するための良い方法です。

5. 事前に計画する

何か他のことに移る前に、特定の問題をデバッグにどのくらいの個々の努力(時間)を投資するか決めます。

時には特定のバグと向き合っている時もあります。中にはこれまでより多くのバグを指す、とらえどころのないheisenbugsやフラクタルバグもあります。

割り当てた時間の終わりに達すると、何か他のことに取り組むことをお勧めします。一つのタスク(バグ)のために、他の優先順位がずれて、プロジェクトの進捗状況が危うくなることは避けてください。

コンテキスト切り替え、他のものに取り組んで、休んでみてください。そうすれば、新たな気持ちで、バグを再検討し、次のステップ(および優先順位)を決めることができます。

ここで、デバッグのツールについて述べておきます。セントラルロギング、エラー監視などすることで、バグをいかにすぐに解決するかにおいて大きな違いを生みます。今後の投稿でこのトピックについて説明したいと思います。

要約

デバッグ作業は、多くの場合、ゆがんでしまい、自分たちが困難な状況に陥り、生産性の落ちてしまいます。これは、自分が解決に導びかない簡単で反復的なことを繰り返してして、問題解決にならないためです。

自分が何にスタックしている理解できるようになってください。困難な状況に陥るような兆候を知り、うまく抜け出すようになってください。コンテキストスイッチング、ラバーダックデバッグ、減速、事前の計画などが正しい方向に戻るための実証された手段です。