ここに、本日の講演を終えたとき、みなさんの心に残っていてもらいたい書籍があります。帰りに本屋に寄って本を買って帰ろうかと思ったら、この本のことを思い浮かべてみてください。この本は私が翻訳したから重要であると言うつもりはありません。この本の原著者が重要なのです。テスト駆動開発を編み出した張本人です。テスト駆動開発を編み出した本人がテスト駆動開発について書いた唯一の本であり、いわばテスト駆動開発の原典です。非常に重要な本なのですが、日本ではこの本は一度絶版になってしまいました。絶版になる前の訳書を扱っていたピアソンエデュケーションが技術書の取り扱いを停止してしまったためです。一部の界隈ではピアソンショックと呼ばれる事件でした。Example』をはじめとした数冊は、絶版になってはならない本です。あるならば、なんならこの際きちんと訳し直して再出版しようとプロジェクトが立ち上がり、何冊か再出版された中の一冊がこの本です。この本は、一度絶版になっても市場に帰ってくるくらい重要な、ソフトウェア開発の世界に強いインパクトを与えた本でした。いう非常に重要な本、強いインパクトを与えた本は、よく印象的な書き出しから始まると言われています。『テスト駆動開発』はどのような書き出しから始まっているでしょうか。『テスト駆動開発』は、次のような書き出しから始まっています。「動作するきれいなコード」。Jeffriesのこの簡潔な言葉が、テスト駆動開発(TDD)のゴールだ。動作するきれいなコードはあらゆる意味で価値があるこの簡潔で力のある言葉がテスト駆動開発の価値観であり、ゴールです。本日は、この「動作するきれいなコード」について考えてみましょう。当然ですが「動作するきれいなコード」をいきなり書ける人がいるわけではありません。いや、ときどきいるんですよ。ときどき、いわゆる天才プログラマと呼ばれる類の人で、頭の中にあるコードをエディタを通じて一筆書きをしていくだけで「動作するきれいなコード」を書けるタイプの人もいます。含め、普通のプログラマが「動作するきれいなコード」に歩みを進める方法です。普通の人は、すぐには「動作するきれいなコード」に辿り着けません。本人もこう言っています。動作するきれいなコードは、偉大なプログラマでもすぐには書けないことがあるし、普通のプログラマならなおさらだ(私もそうだ)。ここは分割統治しよう。分割統治し、分断して各個撃破しようと試みます。どこで切って、どうやって分割できるでしょうか。works"「動作するきれいなコード」という言葉は、その真ん中のところで分割できます。works"、「きれいな」と「動作する」という2つの要素に分けることができます。「きれいな」と「動作する」はそれぞれ逆を取ると「きたない」「動作しない」になります。マトリックスが作れます。目指すところはどこでしょうか。「動作するきれいなコード」の象限は、緑の輝く星の象限ですね。そこにはたどり着けません。やって緑の星の象限に対してアプローチするかを考えます。動作しない」の象限とすると、アプローチとしては道は2つあります。天才プログラマは真っ直ぐ緑の星を目指せますが、そうではない我々は、どちらかの道を選択して進みます。動作する」を目指します。はじめにきちんと設計しましょうというイメージです。動作する」を目指します。動くようにしてからそれをきれいにしよう、ざっくり言うとそういうイメージです。オレンジのコースから話を始めます。動作する」を目指すアプローチです。事前に、コードを書く前に、きっちりと設計をやり切るべきである。設計を終えるまではコードを書いてはならない、という考え方です。私は二十数年前に大学と学外コミュニティでソフトウェア工学を学んでいたからです。こちらのオレンジのコースが伝統的には推奨されていました。いった考え方が大勢を占めていました。設計するべきであるという価値観ですね。私自身も大学でそう学んできたものですから、オレンジのコースでキャリアを開始します。動作しない」象限に遷移しようとします。動作しない」象限は一種の沼地です。沼地とは、この象限で足をとられて時間を浪費してしまうという例えです。「まずきちんとした設計をしなさい、良い設計が得られるまではコードを書いてはなりません」と言われるとき、では「良い設計」とは何だろうかと考えます。これはなかなか答えの出ない難しい問いです。良い設計には明確な終わりがなく、良い設計を追い求めると非常に長い時間考え続ける罠に嵌ってしまいがちです。沼であるこの象限には、いくつかの感情がぐるぐる渦巻いているのです。Shame、「羞恥心」です。「まだ考えきっていない気がする。Vanity、「虚栄心」です。