開発言語

最近アジャイルソフト開発を研究するなかで設計者のツールとなるスクリプト言語の活用の必要性を感じて調査していました。
先日書いた様に機能と表記法の好みからpythonが自分に合っていそうだと思っていましたが、そのあとちょっとRuby調査するだけで言語の設計に対する影響についての認識を改めることになりました。
そこで言語と設計との関係についてブログに書こうと思っていろいろ調べていたのですが、Martin Fowler氏が私の漠然とした理解を代弁してくれていましたので私の下手な説明の代わりに紹介しておきます。

「ひとつの言語」
開発努力において言語は1つだけにすべきか?
http://capsctrl.que.jp/kdmsnr/wiki/bliki/?OneLanguage

要点は、

  • 言語は設計の思考に影響する
  • いろいろな言語を学習することで設計の幅が広がる
  • 言語の選択は現実的には機能よりも個人的(あるいは組織などのローカル)な事情により決まる

だと理解しています。


言語と設計の思考との関係について、今までの経験を冷静に考えてみるとやはり大きな影響があったと思います。
それもオーソドックスな言語よりも特徴的な言語の方が考えさせられることが多かったです。
具体的にはVBによるミドルウェア開発の経験が現在の私が好むコンポーネントインスタンス)指向の構造設計に影響しています。


生産性の問題について、今までは抽象的な設計とその実現手段である開発言語は別の問題で、生産性は言語よりもライブラリやフレームワークなどの開発環境の問題であると考えていました。
中規模以上のアプリケーションやシステム開発の場合はやはりそうだと思いますが、ちょっとしたアプリケーションや特定の用途の場合には言語が生産性に大きく影響する場合があるということを認めざるを得ません。


Rubyの調査を通じて思ったことは書籍「達人プログラマー―システム開発の職人から名匠への道」で言うところのメタプログラミングの用途においては言語が生産性が大きく影響するということです。
HTML文書も一種のプログラムかメタデータと考えるとWEBアプリ開発動的言語が適している事も理解できました。
開発者が自身の開発作業を補助するために使用する言語も同様だと思います。
ただ動的言語はその強力な柔軟性が諸刃の剣とならないように利用範囲や用途を適切にコントロールすることが重要だと思います。


ちなみに私がRubyで気に入った点は既存クラスの拡張(動的なパーシャルクラス?)とクロージャです。
これらの機能は他の言語でもサポートしているものもあると思いますが、これらの機能を設計者の直感的な表記の実現のために駆使するという思想が何よりもすばらしいと思います。
これは特定の問題の領域にその問題に適した表記を行うようにカスタマイズできるということであり、開発者が言語の表記に煩わされずに本来の問題解決のためのプログラミングに集中できると言うことだと思います。
うまく活用すれば生産性向上に貢献することができるはずです。
精進したいと思います。