テスト駆動開発の何がありがたいか

最近RSpecに再挑戦してるんだけど、その過程で思ったこと。
書いたコードに対して常に自動化されたテストが準備されていることも大きな魅力だけど、自然とよい設計にせざるを得ないことが最大のメリットだと感じた。
テストを最初に書くというルールを守るかぎり、テスト不可能なコードは記述しようがない。書きたくても書けない……というか、テストできないコードを書こうという発想自体起こらない*1
また、テストしにくい設計は実際のコードを書く前に苦痛をもたらす。この順番は重要だ。もしコードを最初に書いて、いざテストコードを書くときに苦痛が現れたら、泥団子相手にテストコードを書く羽目になっていただろう(コードを書き直すのは面倒だ……)。テストを最初に書いておけば、いやおうなしにテストしやすい設計を実装せざるを得ない。
開発手法が思考を規定する、非常にわかりやすいかたちの実例。

*1:ニュースピークでビッグブラザーを否定しようとするようなものだ