« SHA1その2 | トップページ | ライト、ついてますか »

2007年8月25日 (土)

Rubyその1

さて、ようやくRubyをはじめました。まだまだ、hello,Ruby!とかやってますが、ぼちぼちと勉強していきたいと思います。

で、まだそんなレベルなので、Rubyの中身については書くことができないのですが、今Rubyが流行っている理由について考えたことをちょっと書いてみます。

Rubyが流行っている理由で、今思いつくのは、

  • PCの性能が十分あがってきた(CPUの高速化、メモリの大容量低価格化)
  • オブジェクト指向が浸透してきた
  • インターネットにより、プログラマ間の情報流通が密になり、プログラマ自体の意識が高まってきた
  • 言語仕様のターゲットが、ハードウェア(最適化、高速化)ではなく、アプリケーションのユーザーでもなく、言語の設計者でもなく(!)、それを使うプログラマにフォーカスされている

といったところです。CPUが速くなってきたため、最早、CPUの論理にあわせて書く必要がなくなりました。昔はメモリの効率やら、レジスタの使い方やらを気にして、CPU様に合わせて書いていましたが、昨今の十分速いCPUと十分なサイズのメモリでは、そんなにご機嫌を伺う必要はなく、むしろ、「プログラマ」側への負荷を減らす事の方が、ソフト開発全体を考えたときに、コストメリットが出てきたのだと思います。CPUと人間との界面がプログラミング言語だとすれば、より人間側に近づけても実務上十分な性能がでて、生産性やメンテナンス性のコストを削減できるわけです。

そして、人間側に近いプログラミング言語とは具体的にどのようなものかというと、構造化プログラミングを経て生まれた、オブジェクト指向が現時点ではそれに該当すると思います。余談ですが、個人的にはBASICも十分人間よりだと思いますが、いかんせん大規模開発にはぜんぜん向きませんね。さて、Javaが流行りだした初期の頃は「オブジェクト指向のなんたるか」を良く分らないまま、C-likeなJavaのコードを書きつつ、なんだかなーと思ったりしてた人も、10年もやってるうちに「オブジェクト指向がもたらす理想郷」に対する幻想もすっかりなくなり、オブジェクト指向がどんな風にすれば役に立つのか、どんな風にしたらぐちゃぐちゃになるのか、そもそもオブジェクト指向っていうのは何なのか?が、うっすら分ってきてると思います。そこで現れたのがRubyです。オブジェクト指向を用いてより人間的に考えて記述したい。素直に表現したい。その辺が実現されているわけです。

また、Rubyはかなりプログラマ指向な言語です。Rubyを使う人は、なぜいままで、他の言語はこんなに便利にできていなかったのだろう?と思うのではないでしょうか。Cプログラマな僕はそう思いました。Cはシンプルな機能しか持っていないため、いろいろな「イディオム」を駆使して、仕様を実現しなければなりません。100回同じ事をやろうと思ったら

for ( i = 0; i < 100; i++) {

  /* ごにょごにょ */

]

と書けば良いです。しかしこれはひとつのイディオム、決まり文句であり、「あぁ、確かにこう書けば100回繰り返せるね」の1例にしか過ぎません。100回繰り返したいだけなのですが、iを使う必要は?0から始まる意味は?iは99までだよね?i++ってそんなことわざわざ書いてあげないといけないの?などなど、自由度が高い反面、書き方によってはプログラマの意図が正確に汲み取れない可能性があります。少なくとも、「おそらくこういう意味だと思うが、自分はプログラマの意図を正確に読み取っているのだろうか?」という不安は常に付きまといます。で、Rubyでは、

100.times {

  # ごにょごにょ

}

こう書けます。100回繰り返す。これ以上ないくらい明示的です。このプログラムを読むことになる保守担当者、もしくは一ヵ月後の自分自身はこのセンテンスの意図することは明らかでしょう。プログラムを書く側はついつい読者のことを考えずに、「こう書いた方が楽」、「どうだ、このコードの方が効率がいいだろう!」とかその場で考えて書いてしまいますが得てしてそういうプログラムは複雑で、読者はそのコードがそもそも何を言いたいのかを読み取るのに苦労します。Rubyは書く側の負荷を下げることで、より読みやすいコードを作成することに余力を使うことができます。しかし、「数値もオブジェクトである」って仕様は「へぇー」くらいですが、それにtimesっていうメソッドを用意して、繰り返しを簡単に記述できるようにするというのは、偉大な発明だなぁと思いました。

次回はもうちょっと勉強を進めて、Rubyの内容について書けるようにしたいと思います。

|

« SHA1その2 | トップページ | ライト、ついてますか »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/207693/16228550

この記事へのトラックバック一覧です: Rubyその1:

« SHA1その2 | トップページ | ライト、ついてますか »