Index > Java vs Jython iTextを活用してPDFを操作するエントリーの整理をしていて気づいたこと
Sun, August 31, 2008

Java vs Jython iTextを活用してPDFを操作するエントリーの整理をしていて気づいたこと

前から整理しようと思って手がつけられなかったPDF関係のエントリーの見直しをした。 iTextを使って、PDFを処理するプログラムだが、当初はJavaで書いていたのだが、Jythonで書き直した。

Java は冗長

内容を改めて見直してみると、ほとんどコマンドライン引数の処理など PDF処理する肝心の本題とは直接関係ないコードが大半を占めていた。 それでJythonで書き直すことにしたのだが、実際にやってみると、コード量が減っただけでなく、 そこで説明したい内容が(以前よりは)はっきりわかるコードになった。

JythonではJavaと違って、型表記が不要だったり、例外をキャッチしなくても(とりあえず)よかったり、 import java.lang as lang のような省略が使えたり、 コードを短く書けるようになっている。

Javaで記述したとしても、 NetBenasやEclipseのようなIDEをつかっている場合には、補完機能によって入力自体の手間は 省ける、という意味では、短くコードが書ける=入力の手間という点での Jythonアドバンテージは、別にたいしたことはない。

それよりむしろ、本質的な部分だけを短くシンプルに表現できるという価値が大きい。 自分自身があとで読むときもそうだし、人に説明する上でもそう。 でも一番大きいのはコードを書いているときかもしれない。

つまり、 コードを書くという作業は、脳内アイデアを表現する(=コード化する)ことに近い。 だからなるべく人間の脳の思考パターンに沿った記述ができるプログラム言語が望ましいのだが、 Jython(Python)というのは、Javaより相当に自分の思考パターンに沿っているといえる。

(「ハッカーと画家」 の著者(ポール・グレアム氏)によれば、 RubyやLISPの方がより、思考パターンに近いらしいが。)

ちなみに、 Perlの場合短く記述できるのは間違いないが、短すぎるゆえにかえって難解になってしまう。 つまり、ただ短ければいい、ということではない。

そういえば、「集合知プログラミング」 というオライリーから最近出た本にも、 遺伝的プログラミングをつかって、数学関数を機械的に作り出すことができるサンプルが出ていた。

しかし、そうやって進化の結果生成された数学関数は、 人間が考え出した関数より無駄な部分が含まれごちゃごちゃした形になってしまう、 という話だった。(助長な部分が増える、といったイメージ)

なんとなく、Jython=人間が定義した関数、Java=進化によって機械的に産み出された関数、 ということを連想してしまった。
しかし、人間の脳自体も進化により産み出されているのだから、 この遺伝的プログラミングアプローチと同じように進化してきたのならば、 人間の脳内も実際はごちゃごちゃしているのかも。 いやたぶん、遺伝的プログラミングの結果として脳ができた、と考えるのが間違いなのだろう。

このエントリーは書きかけです。

 Twitter
follow me on Twitter
 Categories