自然文プログラミング

This entry was posted by on Thursday, 27 December, 2007

twitter の方にちょっと書いたけど、長くなりそうなのでこっちに書こう。

考えの発端となったのは ruby-list の 44398 のスレッド。でもこれ自体はきっかけというに過ぎなくて、この種の話は前々からずっと転がっていたし、前々から考えてはいた。

たとえば 3.hours.from_now みたいなやつだ。あるいは、たとえば RSpec もそうなのかも(よく知らない)。

簡単に言うと、今のところプログラムはプログラミング言語という特殊な言語で書かれるのがふつうだけど、プログラミング言語が自然言語として読めるとうれしい、という人がいるようである。

なぜ嬉しいのだろうか。察するに「わかりやすい」からだろうと思うのだが、英語を母語としていないのにそんなに良いものだろうか。いやまあ母語は人それぞれだしなでしこみたいなものもあるとはいえ、それにしても、本当に自然文として読めることがわかりやすさを促進するのだろうか。

で、いろいろ考えていて思ったのは、プログラムの理解の方法が少し違うのではないかという仮説である。 3.hours.from_now と書くとき、ぼくは 3.hours が何を返すかということが気になって仕方ない。 TimeDiff オブジェクトか、それともより直截に Hour オブジェクトか? というと実際には 10800 というFixnum だったりする(IIRC)。ともあれ、こういう書き方をする人は、そういうところがあまり気にならないのではないか、と思った。

で、これはLisp:S式の理由で Shiro さんが書いていたことに近い論法なんじゃないかという気がしてきた。

>

普通の言語では、処理系のフロントエンドにある構文解析器が、「人間に優しい」文法を「機械が理解しやすい」構文木に変換します。ということは、Lispは機械にやらせれば良い構文解析をわざわざ人間がやっているってことになります。なんで人間がわざわざ機械に歩み寄らないといけないんでしょう? >

Lisperから見ると、この議論は逆なんです。頭の中でアルゴリズムを考える時、あなたはどう考えますか? プログラムコードで考える? 私は少なくとも、頭の中にあるのはコードよりももっと抽象的な、木やグラフみたいなものです。普通の言語で書く時、私は頭の中のグラフを一度わざわざプログラムコードに変換して書き下します。

おお、「人間に優しい」というキーワードまで出てきてるね。

ただキッチリしておかないといけないのは、プログラムは機械が処理すると同時に人間が読むものである、というところは一致していること。だから人間に優しいのはそれでいいのだ。でもね、それと自然文としても読めるようにプログラムを書けるってのは別なことだと、ぼくは思うんだ。

プログラムはテキストなので、字面としてわかりやすいってのは確かに重要だ。でも、より重要なのはアルゴリズムやプログラムの構造や、それによる筆者の意図ではないかという気がする。 3.hours.from_now は、筆者の意図はわかりやすいし、字面もわかりやすいけど、プログラムの構造を隠す。ような気がする。それが嫌なんだろうな。

 

というのを書いてしばらくして見返してみたが、うーん、どうも欺瞞に満ちているな。プログラムの「構造」とか言いだすと、Lispのマクロであるとか、Prologのような言語だとどうなのといった話に行ってわけがわからなくなる。

やっぱ単に、もともと自然言語じゃないものを頑張って自然文に見せかけるのが感覚的に嫌なんだろうなー。 SQL の FROM とか INTO とかも嫌いだし。

Comments are closed.