必要ななにかを教えてくれる言語

あー、そうだ。それは Ruby を触り始めた頃にすごく感じたことだった……

cut-sea
# そうなんだけどね。
# haskellのquick sortとかも最初出たときは短いと思ったけど
# 案外他の言語でも似たように書けるってことをどっかのblogで読んだ。
# 私にとっての問題は、Haskellで書いたときに
# 自然にそう書くようになるってことですが。
# つまり、あるロジックを実装する上で
# 必要最低限のものが何であるかを
# 自然とあぶりだしてくれる言語というか
# 本質的に必要なのはなにかを教えてくれる言語というか。
# それでhaskellとかrubyに興味はある。
# そういう思考を身につけることに課題があるのかも。
# それがhaskellを学ぼうとする動機になってるんだけど
# 決っして短かく書けることそのものに興味があるわけじゃない。

http://www.lingr.com/room/gauche/archives/2007/02/23

ところで、どっかのblog……。僕も読んだけど……woさんだったかな……?

blog (WEB日記かも?同じだけど。)の内容は、haskell の行数と、C の行数を比べるのは、フェアじゃないって話だった。だいたいこんな感じ。

haskell ではリストの繋ぎ替えでソートしてるけど、C ではその場でソートしてるんであって、やってることが違う。Cでも同じようなライブラリを用意して同じように実装すれば4行位になる(が、Cの人はそんなことをやらない。その場でソートしたいから。そうすると、コードが長くなるのは必至。もちろんそういうライブラリが最初から存在しないというのは、面倒なことが多い)。

閑話休題Ruby であるロジックを書いていくときは、こんな感じ。

  1. まず必要な処理をただ書く
  2. あるていどの長さになる
  3. この部分はメソッドであるべきだなあ、とか、これはクラスだな、と見えてくる
  4. メソッドやクラスに分離する
  5. より本質的で簡潔なコードに絞られる

ちょっと曖昧だけど、この5に向う3の部分が重要だって話だと思う。少なくとも、僕はこういう力を言語が持ってる(と感じられる)のは面白いと思う。

C と比べて S 式言語や Ruby は、部分をくくりだして別のメソッドにする、なんてことが簡単にできるので、良いプログラムのイメージを掴みかけてた頃にちょうど Ruby に巡り会ったおかげで、Ruby が 3 の力を持っていると感じてしまっただけかもしれない。

Ruby をさわり始めたころはまだ全然プログラミングの経験なかったので、そもそもマトモなプログラムが書けなかった時期だった。K&Rや、プログラミング作法、Ruby本、Cプログラミング診断室等を読んで、こんなプログラムがいいプログラムなのか〜なるほど〜とかいろいろ感銘を受けていた(GNUとかRMSの思想に感化されたりしたのもこの時期だなあ)。じゃあ今はどうなんっていわれてもたいしたものは書けないけどさ……。

で、何がいいたかったんだっけな?↓のエントリを突発的に書いているうちに忘れちゃった。やばいな老化だ。風呂入ろう。