要求開発に於けるプロトタイピング

Matz さんのところで、

Rubyでアジャイルプロトタイピング(1)

というエントリが。
多分、元記事が言いたいことは、

お仕事環境では「やっぱりJavaでないと」というよく分からない圧力があるようだ。

という話なだけではなくて、要求開発については Ruby の様な生産性と自由度の高いインフラを用いてプロトタイプを作成することで行ないましょう、ということかと思います。

以前、「現物主義」に基づいたソフトウェア開発手法(1)という記事について、リファクタリングに付きまとうトレードオフという記事で言及があり、更にコメント欄で議論があり、それに対して再度「現物主義に基づいたソフトウェア開発手法」に対するご意見についてという記事が出てまとめられるという議論がありました。
このときの議論の始まりとなった最初の反応と、今回のRubyでアジャイルプロトタイピング(1)に対するまつもとさんの反応はとても近いものだと思います。
で、実際、私が読んだ限りでは、「プログラマ日記」の kwatch さんが書かれている「現物主義」というものと、今回の「アジャイルプロトタイピング」とは、ほぼ同じものに思えます。

実は私は、上の議論の中で `ten' という名前でコメントしているのですが、今回のプロトタイプによる手法も、そこでコメントしたラピッドプロトタイピングと同じ系統のものではないかと思いました。
つまり、あくまで顧客要件 (外部仕様) を確定させるため *だけ* にプロトタイプを作成しようとするものです。
ただ、ラピッドプロトタイピングと言ってしまうと、記事にある「紙芝居プロトタイピング」になっていまうのかもしれませんが、ちょっと拡大解釈しているかもしれません。
そして、顧客からのフィードバックを受けて迅速に改善し、実際のソフトウェアの振る舞いを明かにしながら要求を確定させて行くというイテレーションを何度も繰り返すには、Ruby の様な言語、RoR の様なフレームワークによる足回りの良い開発基盤が適していると言いたいのだと思います。

その上で、再利用可能なコードがあれば再利用すれば良いじゃないか、という意見はあるでしょうが、ここでの目的はあくまでより早く確実な要求開発ですので、重要なのは顧客 (利用者) から見える部分を如何に早く実現するか *だけ* なのです。
そのためには、内部の構造設計やアルゴリズムの洗練といった、設計、実装で必要となる事柄を *敢えて捨てて* 行ない、とにかく早く確実な要求開発に注力します。
これが、再利用すること (というか、成果物となる実装に向けた設計) を考慮してしまうと、目的である要求開発のスピードや確実性を損なってしまうという考えているのではないでしょうか。

なにも捨てんでも、と思うのだが。プロトタイプを高速に作ったら、なにかの事情で Rubyでは全然ダメだというのでなければ、そのままRubyで突き進めば良いのにね。

という訳で、多分、そのまま Ruby で突き進むかもしれないとかは考えない、プロトタイプとして作成したソフトウェアは捨てる、Ruby で開発を継続する場合でも from scratch で開発する、という具合に決めてしまえということではないかと思うのです。