プログラムをデバッグしていて、つくづくそう思います。技が必要になります。どんな技かと言いますと、手先の器用さが必要になります。例えば、陶芸家とか輪島塗りの塗師とか、みなさん技をもっています。同じようにプログラマーにはプログラマーの手先の器用さが必要です。頭だけでは技にはなりません。物を仕上げるには手先が必要です。手先とは何か、簡単には表現できませんが、キーボードの入力術とか、マウスの使い方術とか、そういう具体的な技ではありません。一口に手先といっても、脳や体にしみ込んだデバッグ経験、血や汗かもしれません。あの時の苦労とか、なぜなぜの繰り返しで得られた正解や、失敗から得られたノウハウ、それらの体験は体にしみ込んでいます。どこにかはわかりません。DNAにも残っているかもしれません。
デバッグとは、「虫取り」のことだと思いますが、なにか悪さをする虫(プログラムの不具合)を取り除くことでしょうか。細かい指使い(ピンセットのような)で小さい虫を取り除くことかもしれません。悪い虫だけをより分けることも大事でする。中にはいい虫もいるかもしれません。
デバッグノウハウ
王道はなく、一種の職人技ともいえると思います。長い間の経験や失敗から学ぶことが多いからです。単なる学習からだけでは身につかない技のようなものです。歌手の歌い方もこの技が関係していると思います。ハスキーな声、裏声、透き通った声など個性的な歌い方には技も関係していると思います。みなさん職人技と言えると思います。
処理の流れを追うが
プログラムは一つのシーケンスだけが上から下へ順序立てて流れるのではなく、優先度によってあっちこっちのシーケンスにながれるため、処理の流れを追うのが大変です。ブレークポイントを張っておくとその流れが飛び飛びになっているのがわかります。非同期処理でこのシーケンスが崩れるのがわかります。コードの記述の順には実行されず、非同期は処理が終わってから元の位置に戻ってきます。そのため、順番来るものと思っていたら、非同期をコールした直後に次のステップを実行してしまいます。まだ、非同期処理が終わっていないのですが。これが非同期処理です。このため、思い違いでなぜ、この処理が実行されるのか不思議だと悩みますが、非同期なので先に実行してしまいます。この勘違いはよく起こります。これもデバッグ時の技のひとつになります。これも失敗の経験を重ねることで取得できる技です。
たくさんの職人技をもつといい
これは、時間をかけなければ取得できないものです。一朝一夕で取得はできません。無駄な時間も必要です。一回の失敗で取得できるものではありません。かなり前に理解した技も時間が経つと忘れていることもあります。また、一から覚え直しです。この繰り返しで少しずつ身につけて行きます。

