道具の違いと、機械化と新しい世界

 大事なことは思考を妨げず、進化していくこと。 - kensir0uのしくみは、JavaRubyの話では用途の違う道具(ここではプログラミング言語のことだ)の使い分けのような話になっているけども、戦争を終わらせるのに必要なのは1本の動画なんじゃないか? - プログラマーの脳みそで述べたのは、道具を使う道具(IDEといったプログラム言語を扱うのを補助する道具のこと)の有用性を認識すべきだという話だった。

 Eclipseからテキストエディタに戻れない10の理由 - プログラマーの脳みそでも、どのような良い点があるかという各論が書かれているけども、話の核は個々の機能が便利だね、ということではなく、道具を操るための道具が、道具の使い方のシチュエーションを変えたがゆえに、道具のあるべき姿さえも変えたという、もうちょっと俯瞰した抽象的な話題なんだ。

 プログラム言語をテキストエディタで書きつづるということは、書かれたプログラムを再編する大変さがあって、再編が大変だからこそ後で構造を大きく変えなくて良いように計画して作ろうという話になる。その代表はウォーターフォールなわけだけども。

 原稿用紙に手書きで文章を書くと推敲して文を再編していくと赤書きだらけになってわけがわからなくなるところだけど、ワープロは切った張ったが格段に楽になった。となれば、最初から構成が変わらないように計画して書くのではなくて、思いついた部分を思いついたままに書き連ねて切って張って原稿にすることが可能になる。前提が変わるというのはそういうことだ。

 今、IDEによるプログラミングの機械的サポートが強烈に推し進められた結果、Javaではとりあえず思いつくがままにプログラムを書いて、動くままにリファクタリングして構造を後でかえればいいじゃないかというスタイルが可能になった。同じスタイルを他の言語でやれるだろうか?という話題。

 マーチンファウラーのリファクタリング本にあるような、ちまちまと多くの手順を踏んで慎重に行い、それでも失敗するリファクタリングと、ボタン一つでできあがるリファクタリングというのは、楽か大変かというだけの話題にとどまらない。「リファクタリングするコストが折り合う」と前提が置き換わる大事件なんだ。

 少なくとも、現在のJavaの開発環境はリファクタリングのコストが折り合う。リファクタリングのコストが折り合うからこそ、リファクタリングを前提とした開発スタイルが折り合う。リファクタリング機械的なサポートが弱い言語ではリファクタリングのコストがネックになってそうした新しいスタイルを実用化できない。

 プログラム言語によってアルゴリズムを書く際のプログラミングパラダイムが異なるね、という話とは全く違うレイヤーの話題がここにある。

 ※ 夜中に勢いで書いたのでタイトルが意味不明過ぎたので修正した