Line 1: Error: Invalid Blog('by Esehara' )

または私は如何にして心配するのを止めてバグを愛するようになったか

>> Zanmemo

あと何かあれは 「esehara あっと じーめーる」 か @esehara まで

重要なのはオブジェクト指向じゃないと思うんだよ

 最近になって、オブジェクト指向がよくわからないという御仁とご一緒することになった。別段、それ自体が悪いことではない。確かに、その人の書いた、以前のコードというのはめちゃくちゃであった。当然のことながらif文は何十にも繰り返されているし、その中でネストが3つにも4つにも増えていくという恐るべきコードだ。そして、どうやら僕の前に、教えてくれた人がいるらしく、その人に「オブジェクト指向というのを教えてもらったから、もう少し上手く書けるようにになっている筈だ」ということを言っていた。

 僕はそのことに、特段ケチをつけたいとは思わない。誰だって無知から始まる。僕もオブジェクト指向にとんちんかんなことを言って恥をかくことがある(もしかしたらこれからもね!)。無知が恥なのではなく、学ばない姿勢が恥なわけだから、僕はそういうのはいいなあ、と素直に思える。しかし、どうも僕は引っ掛かっていることがある。それをメモしておく。

 僕自身は、Pythonと呼ばれているプログラミング言語でメシを食べている。Pythonという言語は、よく揶揄されるように、中途半端なオブジェクト指向を持つ。その中途半端さというのは、例えばlen()という関数で配列の長さを取るときに現れる。例えば、Rubyならlengthがあるのに……と言われる。それは確かに同意するし、あまりエレガントではない。しかし、だからといって「オブジェクト指向」が大切なのかというと、ちょっと違う。そこには目的と手段の転倒が起きていると感じる。

 コンピューターの歴史には詳しくないけれども、なんで「オブジェクト指向」というのが重要になってきたか、を考えると、自分としては、何かしらの事象をモデリングするさいに、「オブジェクト」という捉えかたが都合がよかったから、と考えている。同時に、関数型言語のパラタイムが徐々に(まあ一部だけど)受け入れられて来ているのは、既存のアプローチだけでは、上手い捉え方が出来ないからだと考えている。二つの問題で重要なのは、そこには「人間の都合」というものが介在しているということだと思う。たぶん、機械の都合としてはどっちでもいい筈だ。まあパフォーマンスの問題とか色々あるけれど、それも人間が頑張ればよい。

 そこで、「人間の都合」ということを考えた場合、そこに「オブジェクト指向だから」というのは変な話なのだ。オブジェクト指向が重要なのではなく、僕たちがコードを整理して書く上において、「オブジェクト指向」という考え方が「たまたま」読みやすかったり、モデルしやすかったりしたに過ぎない。

 例えば、デザインパターンという本は幾つか出ているが、僕が尊敬するべきハッカー達は、デザインパターンについて「読みやすさや保守しやすさを考えたら自然とそういうコードになる。それを再確認したり、頭のすみに置いておくものとして、デザインパターンというものを知るのは有効だと思う」と話す。また、テスト駆動開発についても、「テストを書くことが重要なんじゃなく、テストしやすいメソッドなり関数にしておくことが重要。逆にテストしやすいメソッドが書けるなら、極論テストはいらないんだよ」と話していた。そのことについてなるほど、と思ったりもした。

 もちろん、これは極端な意見ではあるものの、参考にするべき考え方だ。というのは、これらの意見はまず最初に「なんらかの良いコードがあって、それを補強するために他の考え方がある」ということを述べている。僕もテスト駆動開発に凝っていた時は、無駄にテストを書いてしまい、あとから保守できなくなってしまったという反省があるけれども、そういう風に、問題は読みやすかったり、理解しやすかったりすることなのだ。

 だから、別に下手にクラスベースにしなくたっていいわけで、関数の連続であったりしても、それが良く整理されているならば、そっちのほうがいいのだ。そういうのをエレガントではないと思うかもしれないけれど、下手にそういうことにこだわるよりも、現時点で自分の理解している範囲で、「わかりやすいコード」というものを書くためにはどうすればいいんだろう、と考えるほうが、たぶん重要だ。だって、きっとエレガントな方法なんて、僕より詳しい人が知っているからだ。

 いいコードとは何か、ということは難しい。ただし、人をびっくりさせたりするようなコードだけがいいコードではない。引っかかりのない、さらりと理解できるような、一見「平凡なコード」というのを書くのが一番難しいんじゃないんだろうか。僕はそういうのが書けなくて苦労しているし、早くそういう平凡なコードが自然に書けるといいなあ、と思っているんだ。本気でね!