« バージョンアップだねぇ | メイン | 焦り、あるいは無力感 »
2007年01月13日
複雑性との闘い
これまでも散々書いてきたのでご存知だとは思うが、陰郎は C++ がネイティブ言語である。よってクラス、多態、多重継承、名前空間、例外処理、テンプレート、階層化、演算子オーバーロード...などなど、使える言語機能は何でも使う。おっと、Palmware 開発では例外処理だけは使わないようにしているけれども。
それぞれの言語によって提供される機能、あるいはその言語が持つ思想は互いに異なる。そのため、開発やデザインのアプローチは当然違ってくるわけで、ある程度規模の大きなソフトウェアを書くとなれば相応の複雑さと闘わなければならない。そのために言語が持つさまざまな機能を利用することで、言語特有のいわゆる 「 色 」 が出てくるわけだ。これはいろいろな言語で "Hello world" を書いてみた経験だけではわからないことである ( 当たり前だが )。
時折出くわすのが、「 C++ ができるならどんな言語でもできるでしょ? 」 という言明だ。しかし、陰郎は可能な限りこれに対して 「 No 」 と答えるようにしている。ここで問いに含まれる 「 できる 」 という言葉の意味を軽んじてはいけない。おそらく発言者の基準では、陰郎は 「 Yes 」 と答えるはずなのだ。その人にとっては 「 できる 」 はその程度の意味なのだ。しかし、陰郎にとっては 「 No 」 である。
確かに C++ は言語として大きいし、他の言語でできて C++ にできないことはほとんどないと言って良い。しかし、複雑性を制御し、ソフトウェア全体の構造を良い状態に保つためにその言語が持つ機能をフルに利用する人間というものは、その言語の機能に丸ごと ( 表現は良くないが ) 依存するような傾向のデザインをするものだ。自分の専門言語があまりに体内に浸透しているがゆえに、他の言語を触るときにいろいろな問題が発生する。その言語では使えない機能があることにフラストレーションを感じたり、逆にその言語にはある便利な機能を自然と避けてしまったりする。自分の専門言語が直接サポートする言語機能を模倣したいがためにいびつなプログラミングをしてしまう場合もあるだろう。陰郎の基準では、それは 「 できる 」 ことにはならないのである。たとえ、正しく動作するソフトウェアを書くことができたとしてもだ。その言語で 「 考え 」、その言語の機能を 「 正しく 」 使い、適切なデザインを自然と行うことができる...そうなって初めてその言語を使える、ということになるのだと陰郎は考えている。
...勢いで書いたので散漫なエントリになってしまった。現在作成中の Palmware、まだ道程の半分程度なのだが、ヘッダファイルとソースファイルの合計が 70 ファイルを超えた...記憶している限り、RPNToGo で約 70 ファイル、PipeWorks で 110 ファイルくらいあったはずだ。おそらく、過去最大規模になるだろう。RPNToGo や PipeWorks はデザイン上浅く広い継承階層ができていたためにファイル数が多くなったが、今度のはそうではない。純粋に機能性が高いのだ。
今度の旅は長くなりそうだ...
投稿者 kagelow : 2007年01月13日 23:30
トラックバック
このエントリーのトラックバックURL:
http://www.project-enigma.jp/members/kagelow/locus/mt-tb.cgi/471