TDDで変わった人生
プログラミングは大学生の頃からしていました。さらに辿れば小学生からBASICでゲームを書いたりしていたので、期間だけで言えば30年近くプログラミングをしてきたことになります。大学のときにはアルバイトでプログラマをやっていて、小さいながら1システムの詳細設計以降くらいを任されたりもしていたので、まあ一応はプロのプログラマだったと言えるかもしれません。SIerに就職してからも、プロジェクトをとりまとめたりもしながらバリバリとコードを書く仕事をして、アプリケーションアーキテクトの真似事をやることもありました。まあ、ありがちなキャリアなんじゃないかなと思います。
当然はじめのうちはTDDなんていう発想はなく、テストの自動化に近いことはやっていたものの、作業自体は「前もってそっくり設計する」スタイルでした。せっかちな性格が災いして設計が詰まりきってないのに実装を始めて、案の定ハマってやりなおし、という間違ったイテレーティブプロセス(インクリメントしてない)に陥ることは、わりとあったように思います。
最初に出会ったのはXP、そしてテストファーストでした。このときはまだテスト駆動開発という言葉ではなかったですね。テストファーストの衝撃は、プログラミングする人としての自分の人生で最大のものだったように思います。なにがすごかったか。自分にとっての新発見が3つあったのでした。
- 先に全部考えなくても、始めてしまっていい
- 正しいかどうか、結果が教えてくれる
- 先に全部考えるより、試行錯誤したほうがよい結果が得られる
そのためになにが必要なのかも新たな発見だったと言えます。
- はっきりしたゴールがなくてはいけない
- 走りながら考えないといけない
- "失敗"は失敗ではない
TDDを学んでいく中で、結果的には自分の思考回路、行動パターン、価値観を変えていくような修行を、意図せずにしてしまっていたようです。気がつけば、TDDやソフトウェア開発に限らず、上に挙げたような考え方を生活全般でするようになってしまっていました。
「しまって」いた?われながら妙な言い方ですが、そんなつもりもないのに人生の価値観を書き換えられてしまったのだから、今になって考えてみればマインドコントロールされたようなものです。自分で自分のマインドコントロールをした、そういう話ではありますけれど。現在仕事の軸足がアジャイルにあるのも、このマインドコントロールのおかげかもしれません。
この話にオチはありません。プログラミングをするときはTDDしますし(100%ではないですけれど)、旅行の計画も走りながら考えますし(このテーマでは失敗が足らないので今でもたくさん失敗します)、人生の重大事もわりと考え抜かずに始めてしまいがちです。マインドコントロールはまだ効いているようです。