オイラが printf()デバッグをする理由、またはオイラがヘタレプログラマな理由かも
完全に流行には乗り遅れたのだけど、この記事を読んで思うところがあったので。
2009-03-22 - 未来のいつか/hyoshiokの日記
流石に21世紀になってprintf()デバッグもなかろうと思うのだが、綺麗なIDEで、ブレークポイントを設定し、華麗にデバッグをしている姿というのが、どれくらい一般的かはわからないが、printf()デバッグはいかがなものかと思う。
うーん、オイラデバッガの使い方は一応知っているんだけど、あんまり使ったこと無いんだよね。 print文を埋め込むことは割と良くやる、でもすぐ消す。
最近は Perl 屋さんなので、
# in some code... use Data::Dumper; warn Dumper($hoge); # ...
みたいなのはしょっちゅうやってる。
まあそれは割とどうでもいい話。
自分の場合は、大きなプログラムをあんまり書かないっていうのもあるけど、そもそもデバッガであの変数やこの変数をダンプして云々。。。みたいな激しいバグをあんまり食らわないんだよね。
Perl かシェルスクリプトを書くようになってからだと思うのだけど、「ちょっと書いたらすぐ実行、で値を確認」ってするようになった。まあスクリプトの場合は割と普通な書き方だと思う。で、気づいたら C とか Java で書くときもいつの間にかそんなスタイルになっていた。(まあ最近は C も Java も書かないんだけど。。。)
そういう書き方が当たり前になってから、TDDをやるようになったので、TDD に出会ったときはすごく衝撃的だった。自分の書き方を突き詰めた、もっとすごい事やってるんだ、超すげー、と思った。
TDD やって、テストコードをちゃんと書くと、デバッガが必要なバグは割と食らいにくい、ちょっとずつ書くから値がおかしくなることは少ないし、もし既存のコードに影響を与えたらテストスイートがコケてくれるから。
でも、TDD屋さんとしてオイラが未熟なせいもあるけど、ちょっとずつ書く書き方だと、設計があさっての方向に行ってしまって、やり直しになることは割とよくある。ケント・ベックみたいな達人でもあるみたいだから、オイラに無いはずないよね。。。
あと、TDDに限らずちょっとずつ書く書き方って、大物には向かない気がする。TDDの本にも確か書いてあった気がするけど、OS とか、コンパイラとか、デバドラとか、データベースなどのミドルウェアとか、そういうものを作るのは厳しいだろうなぁ。つーか自分には作れる気が全然しない。
最初に通すべきテストケースが何も思いつかないもんね。でも世の中にはそうじゃなくて、ぱっと設計がひらめいて一心不乱にコード書ける人もいるんだよね。オイラは絶対無理。ちょっと書いたらすぐ確認したい。
あえて今の書き方を封印して、デバッガを使って大きなプログラムを書いてみたら、プログラマとして少し成長できるのかな?TDD に初めて触れた時のように、違った世界が開けるんだろうか?
試してみたいのだけど、業務の場合はテストコード残しておきたいので TDD にせざるを得ないねぇ。。。時間ができたら遊びでデバドラとかシステムプログラミングとかやってみようかなぁ。