とみざわさん(その4)

たぶん平行線なので、この辺でやめましょう。私はソフトウエア工学屋さんと
か設計屋さん、あるいは現場の人の声を自分なりに代弁しているつもりだった
のですが、私自身がこの辺に分類されるとも思っていないので。

僕はなるべく人を分類する、というようなことはしないようにしたいと思っている(つもり)なので、ご安心ください。(でも、代弁はしばしば危険ですよ)。

さらに言えば、適当(というのは言い過ぎであるが)に10人つれてきて10000行
数当たりのバグ数をどれくらいいかにできるか、とかを考えている人には、も
う「オブジェクト」が何であるかさえ、ほとんど関係なかったりするわけです。

 そりゃそうでしょうけど。ここ数日は、オブジェクト指向とは何か、というのがそもそものねただったのです。

 ちなみに、われわれのチームでも、また毛色の違う新しい言語を作っているところなので、決してSqueak至上主義ではないです。たまたま今一番便利だから使っているのだ、と思っておいてください。

あと、別に僕は現場(?)の人がみんなxxしなくちゃいけないとかそういう主張をしたつもりはありませんよ。ただ、例えば「継承」がオブジェクト指向では「本質的」(それがないとオブジェクト指向ではない)ということがあたかもすべての人が同意することであるかのように言ったり書いたりすることに対しては、それは真か偽かの命題として見るとそりゃ偽だろ、と言っているわけです。

ですから、「もうちょっとオブジェクト感の違いみたいなものがあるわけなの
ですが、「使って1000行くらいのプログラムでも書いてみてください。そうす
れば判ります」と言うのを避けてそれを伝えるのは難しいでしょうねえ。」な
どといわれても、「何だかんだで100万行を越えるコードがあって、プログラ
マも集めて、さらに50万行バラバラにつくって組み合わせてもなるべくひどい
ことが起きないようするにはどうすればよいか、というような仕事をしてみれ
ばわかります」というのを避けて何かを伝えるのは難しい気がしてくるだけだ
なぁ、と思います:-)

これは、僕宛ての言葉ですか?売り言葉チックになってしまっていたので(すみません)、いまさらこれを書いてもそれこそ無意味ですが、僕もつらい仕事のときはC++Javaでプログラム書きすることもありましたし、100万行くらいのコードベースをいじることもありました(ほぼひとりですけど)。とはいうものの、一緒に仕事をしない限り「わかってない」と言われてしまうかもしれませんが。もともとの主張は「違うと感じている」ということの補強は難しいので、(せめてとみざわさんには)試して見てほしいなということだったと理解してください。

そういうことではなくて、「データ抽象(情報隠蔽)/動的束縛/継承」のように
本質的に重要な機能か?ということが言いたかったので、そのように理解して
ください。

情報隠蔽の定義にはゆれはあると思いますが、例えばすべてのfieldが(C++とかの意味で)publicなオブジェクトはオブジェクトではないのか、というと決してないとは言い切れないし、継承はきっと本質的ではないですよね。

最後に私の好きなものの紹介:個人的には、関数型言語オブジェクト指向を
突っ込んだもの(Objective Caml)をつかっているのですが、このアプローチだ
とテクニカルな理由でどうもオブジェクトの部分が結構不思議なことになるよ
うなので、いっそのことこれを逆にして、オブジェクト指向(たとえばJavaく
らいのもの)をベースにして、関数型言語のうち高階関数と、組み込みデータ
型(タプル、リスト、Unionくらい)とパターンマッチングと、なんとか多相型
をうまくいれられれば多くの人に便利な言語になると思っていたのですが、ま
あ、これも上の立場から見れば「ふーん」と言われるようなものではあります。
あ、でも、call/ccはいらないかな:-P

高階関数重要ですよね。後は、メタ機能をどう入れるか、というところが腕の見せ所かも。パターンマッチングも良いです。
 
 最後に、MLで書いたときにも出る感想だと思いますが、100万行のシステムも最初からMLで書いておけば20万行で済んだのに、そうすればそもそもチームのサイズからして違っていてよかったのに、というような感想は持ちますよね、きっと。将来のソフトウェア開発は、より高レベル言語に高レベル言語に移行していくことによって、複雑さを制御下に置く、という方向が正しいと思われます。そういう意味で、今の現場や設計論の話だけではなく、新しい言語の話もさせてくださいね。