無題

Lipsのひとは言う、「あの言語のあれやこれは、ずっと前からLispにはあるし、
Lispならもっと簡単にできるし、もっと凄いこともできる」
Lispのことをあまり知らないんだけど、たぶん本当のなんだと思う。
だけど、その力を使いこなす能力を身につけるのは、とても難しいんじゃないかと思う。


自由であることは、多くの可能性を与えてくれる。
だけれども、その自由の中でそれを実現することはとっても難しい。
制約があることは、可能性を減らす。
だけれども、その減った可能性の中でできることをやりやすくしてくれると思う


最近よくJavaScriptを書いている。
JavaScriptは、たいていブラウザの上で動き、
そのなかでできることというのは、とても限られている。
だけれども、その分、的を絞れるから考えやすい。
もちろん、なんでこれができないだ、って思うこともよくあるんだけど。


それから最近少しHaskellの勉強をしている。Haskellのひとは言う、
「考えることが少なくて済むから、楽をしたかったらHaskellだよ」
「きちんを型を書いておけば、まずバグなんてできないよ」。
たしかOCamlのひとも同じようなことを言っていた。
僕からすれば、そういう人はもう仙人とか悟りをひらいちゃった人みたいな感じがしていて、
そこまで到達するのは無理だろうと思う。
なんでHaskellを勉強するかとうと、いろいろ理由はあるけれど、
一番は型システムが面白そうだから。
型っていうのはやっぱり制約なのだと思うけれど、
Haskellの型は、全てに書く必要はないし、
書いておくことで得られる安心感もとても大きい気がする。


なんか制約大好きみたいに書いているけれども、そういうわけでもなくて、
僕はCやJavaをやったあとに、Rubyに出会って、その自由さに感動して好きになった。
あるときtdiaryのソース見ていたときに、クラスにクラスを代入しているところがあって、
頭がぶっとびそうになった。そのときのショックは本当に大きかった。
実際Rubyを書いていてそういうのを使うかというと、そうじゃないんだけれど、
そのときは、この自由さがあれば本当になんでもできる気がした。
でもそのあと、僕はRubyのプログラムをいくつか書いてきて、
その自由さを使いこなすのはすごく難しいんだということを実感した。


結局のところ、自由にはあこがれるけれど、その自由さを使いこなすことができないから、
制約のなかでなんとかやっているという感じだと思う。
ただ制約と言っても、やりたいことが削がれるようなうざい制約もあるだろうし、
やりたいことをもっとやりやすくしてくれるうれしい制約もあると思う。
JavaScriptHaskellの型だったりは、
後者のような制約なんじゃないかなと思ったりしている。


だからどうだってことは全然なくて、とりとめもないことなんだけれど、
なんとなくこんなことを考えていたりしています。