デバッガは使えるべきかな

アプリケーションの開発時にはデバッガーを使うのはあたりまえだろう。そのデバッガーを使えなくて何がプログラマだ、くらいの事は思うのだけど、世のプログラミング言語の入門書にデバッグの仕方もましてやデバッガーの使い方も載っていない。
未来のいつか/hyoshiokの日記 2008-08-24

吉岡さんの意見はデバッガは使えるべし、というものです。
自分もバグを特定するときには、極力使おうとします。
あと、ソースコードリーディングをするときにも使います。

この手の言い草はよく聞くけれど、私はデバッガはほとんど使わない。使ってもせいぜい、どうしても他に資料のないコアダンプを解析しなきゃいけない時だけで、普段はまるっきり使わない。そこにソースがあるなら、怪しい箇所を推理しつつprintfをつっこむ。なぜなら、私はプログラムを書く時に一番大切なものは、そういったツールを使う能力ではなくて、
思考力
であると思うからだ。それと共に、本当にクリティカルなバグには、デバッガは無力だからでもある。
おごちゃんの雑文 デバッガなんて使わねーよ

おごちゃんの意見としてはソース読めということだと思います。
そもそもソースがまともに読めないのは問題だろう、というのは賛成です*1
マルチスレッドのバグにはデバッガは無力なことが多いですし、そもそもデバッグシンボルを入れただけでバグが再現しなくこともあります。
それに対して、ちゃちゃっと入れれるprint文は確かに手軽で有効ですが、自分はとりあえずprint文を埋め込むというスタイルは反対です。
理由はその時点でソースを改変しているからです。
ソースが変わると現象が変わるということもありますし、ソースを変えると手を入れてはいけないところまで入れてしまい、よくわかんない状態になることがあります。
あと、print文を入れてから確認するところまでのサイクルが、ものすごく時間がかかるようだと現実的な方法論とはいえません。
しかし、デバッガがない言語(もしくはデバッガのできが良くない開発環境)による開発だとそもそもデバッガが使えないわけで、そういう場合などはprint文に頼るのは仕方ないと思います。


こういうのって突き詰めると「ツールに頼るな!ソースが全てだ!」となってくるんじゃないでしょうか。
その逆は「ツール万歳!」かなw
自分のスタンスは、使えるものは使おうよ、という感じです。
時間の短縮や正確なプロファイルができるなら、それはそれで使う価値がある思うんですよね。
そもそもジョエルもジョエル・テストで「買える範囲で一番良い開発ツールを使っているか? 」ということを言ってるぐらいですからね。


そもそもなんでこういうことに言及するかと言いますと、やっぱりHudsonのようなCIツールを使うときに問題になる点だと思うからです。
「CIツールなんてなくても開発できるよ」、「CIツールに頼らなくても個々の能力が高ければ問題ない」とかとか。
そうです、開発できます。
昔は無かったわけですしね。
しかし、開発現場ではコミットミスで開発がストップすることはありえますし、単体テストが通らないソースが放置されることがあります。
そういうことが起こると、馬鹿にならないロスが発生します。
あなたは、そのロスを少なくしたくないですか?


ツールを使うことは解きたい問題を適切に解くことだと思います。
なので、デバッガをうまく使えるようになるといいことあるし、逆に袋小路に入り込む場面もありますよ、と。

*1:自分はまだまだだと思いますが