個人的にはC言語よりもスラスラ書けるようになるまでの時間が 長かったように思う。
そういえば TMTOWTDIと関係がありそうだ。調べるてみると やっぱり関係ありそうだということになった。
(少なくとも僕は、調べるまで本質を知らなかった。)
違うと思った方は、つっこみお願いします。
皆さん、TMTOWTDIがThere's more than one way to do itの略だということは御存知だと思います。「やり方はひとつではない」というスローガンです。
Perlの世界ではcoolとされている哲学をスローガンとして掲げたものです。
「我々がよく知っていることだが、現実とは乱雑な状態を指す。 実際、人類の言語が複雑なのは、それが現実を扱わざるを得ないためである。」 (略)
「そしてPerlは、それを可能にさせてくれる新しいツールなのである。 私が英語を使って現実を単純化できるのは、英語が乱雑な言語だからである。 英語は乱雑だからこそ、我われが現実と呼ぶ、これまた複雑な世界をうまく描写することができる。 同じように、Perlも(できるだけ精密なやり方で)乱雑になるように設計されている。」
なるほど、スローガンTMTOWTDIの本質はここにあったんですね。
「さっきの例え話はわかったけど、もうちょっと説明してよ。」という方のために次のようなグラフを作ってみました。
まず、それぞれの言語が得意とする分野の問題を記述した場合。これは、言語の設計者が意図した使い方の範囲に収まった問題とも言えるね?
この場合、どの言語もたいして複雑にならないということは分かるよね?だって、それぞれの言語は最初は、ある特定の問題を記述するために設計したはずだから。
それぞれの言語が得意かどうかにかかわらず、その言語でいろんな問題を記述しなければならない場合。つまり現実に対処しなければならない場合ね。
これは、言語の設計者が意図した範囲を大きく超える問題を扱った場合とも言えるね? 例えば、tclやBASICで文字列のパターンマッチングやリスト処理やデータフォーマット変換なんかをやろうと思ったらキツいのは想像できるよね?でもそれをやらないといけない状況が発生したと仮定すると?
なんとなく理解していただけましたでしょうか?
Perlのコードを日々書いている方は、Perlがどんな問題を扱うにしてもそこそこ許せる範囲のコードで解決できることは体験的に知っているはずです。それって cool ですよね?
また、母国語(日本語) ならもっと、扱える範囲が広いことも知っているはずです。身近な例で言うとマイクロソフトなんかは強力な「それは仕様です」というコードを持っていますからね。これは Perlでは書けないですが、母国語ならシンプルに書けて扱う範囲の大きさもかなり広いです。(極端な例かもしれませんが...)
母国語は真の言語だけれどもPerlもなかなか良い線いっているんじゃないでしょうか?
TMOTOWTDIのスローガンはなんとなくカッコいいと思っていたけど、これでカッコよさの意味がわかってきました。
Rubyにもこの哲学は引きつがれているので、Rubyも同じ考えかたが通用するのはうれしいですね。
TMOTOWTDIはカッコいいんです。自信を持ってカッコ良さを自慢しましょう。
書籍名: Perlプログラミング第3刷
著者:Larry Wall and Randal L. Schwartz
訳者:近藤嘉雪
「そして、ある操作を行なう方法がただ1つだけ存在すべきだと信じるミニマリストにとっては、Perlはまるで悪夢のように冗長で派生的であると感じられるかもしれない。 ともかく、UNIXのミニマリズム的なツールボックス哲学の枠から大きく踏み出すことによって、Perlは小規模から中規模の仕事に最適なツールとなり、再びツールボックスにしっくると収まるようになった。Perlは、新しいツールを作り出す工具職人の作業台であるということができるだろう。」
(略)
多くの面で単純である反面、Perlが奥の深い言語であるのもまた事実であり、学ぶべきことは山ほどある。Perlの全能力を自分のものにするためにはかなりの時間がかかる。」
「いずれにせよ、あなたの好きなように書けばよい。もしあなたがC言語に通じていて、その上でPerlを学ぼうというのなら、あなたの書き方はシェルスクリプトやBASICやRPG IIから入った人とは違っていることだろう。それでいいのだ --- 他人があなたと同じ書き方をすると期待してはいけない。Perlには*正しい*書き方というものは存在しない。Perlは、多様性に関してきわめて寛容な言語である。(Perlのスローガンを思い出そう) --- Perlの世界では、まあまあ読めて、ボスにクビにされないうちに仕事を片づけられるものが*正しい*プログラムなのである。」
我々がよく知っていることだが、現実とは乱雑な状態を指す。 実際、人類の言語が複雑なのは、それが現実を扱わざるを得ないためである。 我々はみな、なんとかして現実に対処しなければならない。そこで、物事を単純化して考えるのだが、 単純化しすぎることがよくある。 コピュータ言語の設計者の多くは、言語を単純化しすぎて、この世の複雑なところの面倒をすべて プログラマに押し付けている。 実は、あなたの脳はPerlをプログラミングするようにできているのである。私はたったいま英語を使って現実を単純化しようとしているが、人は誰でも複雑なことを単純にしたいという強い要求を持っている。 そしてPerlは、それを可能にさせてくれる新しいツールなのである。私が英語を使って現実を単純化できるのは、 英語が乱雑な言語だからである。 英語は乱雑だからこそ、我われが現実と呼ぶ、これまた複雑な世界をうまく描写することができる。 同じように、Perlも(できるだけ精密なやり方で)乱雑になるように設計されている。 Perlのカルチャーでは、ほとんど何も禁止されていない。この世はすでに禁止事項であるれている。
Perlの作者、ラリー・ウォール氏は、レボルを、役に立つことを実行する「また他のやり方」だとみている。「私は、選択肢が多いことはいいことだと言っている。Perlのスローガンは、それをやるには他のやり方もある、というものだ。レボルが役立つものにはレボルで、Perlが役立つものにはPerl でという具合に使われると素晴らしい。どうすれば両者が連係できるか、調べてみたい」と言う。