t_yanoさんのコメントへのコメント

t_yanoさんの日記でのコメントへのコメントです。こちらの質問に対して正面から答えてくださっているのと、長くなったこともあって、自分の日記で書かせていただきました。

えーと、例に挙がってるような改変が、大規模開発に役立つかどうか、という意味と理解しました。
そうですね、役にも立たない、まではいうつもりはなくて、少なくともプラス方向に影響を与えるだろうなと思いますよ。
一行で書くとしたら、「不利にもならないし、実際役に立つ。でもそんなに大きく役立つわけでもない」というところです。
悪影響もないし、簡単になるんだったらやったらいいんじゃない?というのが私の意見ですね。私のような趣味でもJava触る人間にとってはプロパティ構文とかはものすごく欲しいですけどね...
上記で明記は終わり。

http://d.hatena.ne.jp/t_yano/20080503/1209847383#c1210012995

立場を明確にしていただき、ありがとうございました。『実際役に立つ』というのをもっと詳しくしりたいですが、それはあとに書かれてあると思って読ませていただきます。

現在のJava開発は1.4ベースの開発もまだ非常に多く、結局なんだかんだでそれで開発できているんです。そこにたとえば文法が大きく変わったJ2SE 5.0を適用したところで、なにかが劇的に改善することってあんまりないんですよね。

http://d.hatena.ne.jp/t_yano/20080503/1209847383#c1210012995

うーん、現場によるような気がします。たとえばJRubyプロジェクトチームは、最初は1.4で開発してたんですが、途中からめんどくさくなってJava5に移行しました。移行したからといって、劇的な改善はないと思いますが、着実な改善はあると思います (じゃないと移行しない)。それも現場次第といってしまえばそうなんでしょうけど。
あと『現在のJava開発は1.4ベースの開発もまだ非常に多』いとのことですが、その原因ってなんなんでしょうね。個人的には商用製品のサポートの問題だと思ってましたが、単に開発者のスキルが追いついていないだけという理由も多いんでしょうか。もしそうなら、Javaが改善されても無駄ということであり、なんというか、Javaにとっても業界にとってもありがたくない話です。

たとえばプロパティ構文が導入された結果、とてもすっきりしてコード量も減って「ああ、これはいいね」という感想は当然聞かれるものと想像されますが、なければないで、たぶんIDEでgetter/setter生成して終わりなんですね。

http://d.hatena.ne.jp/t_yano/20080503/1209847383#c1210012995

「ああ、これはいいね」という感覚があればいいほうじゃないでしょうか。問題は、プロパティ構文なんか必要ないとか、大規模開発ではこれか役に立つのだと言い張って、何がいいのかを考えようとしないJava信者がたくさんいるということです (そういう人に限って、プロパティが導入されたとたん「これは素晴らしい進化だ」とか言い出すんですけどね)。プロパティ構文はあればいいけど、今はないからIDEのサポートでよしとする、というのは非常に現実的な考えだと思います。

例えばFileReaderのAPIを変えてもとからBuffered扱いにする、というのは喜ばれるかもしれません。BufferedReaderを使わない、というミスを軽減できますし、この部分はIDEでは補完できないですからね。ただそういうクラスを自分で作るのがそんなに手間がかかるわけでもないので、別にすごく役立った!と思われるわけでもないでしょう。

http://d.hatena.ne.jp/t_yano/20080503/1209847383#c1210012995

こういうのが積み重なって無駄に大規模になるんでしょうね。

大規模開発の現場が求めている改変はたぶん「書きやすくなること」ではなくて「ミスをさせないこと」だと思います。ミスをさせないようになるなら、冗長だろうが本質的でなかろうがそんなの関係ない、というくらい。

http://d.hatena.ne.jp/t_yano/20080503/1209847383#c1210012995

「書きやすさ (あるいは読みやすさ)」と「ミスをさせないこと」は両立する概念です。対立する話ではありません。

いままでの文法改変の中では、私から見るとgenericsは一番大規模開発に役立つと思ってます。genericsは記述をより煩雑にするものですが、使いこなせれば型の強固性をアップしますので、結果的に、多くの開発者にミスのないコードを書いてもらう必要のある大規模アプリケーションの安定性を上げることになるでしょうから。実際、Mapに想定していないオブジェクトが入っていた、というバグは結構あるのです。genericsは文法が煩雑すぎて拒否反応があるのが難点ですが。

http://d.hatena.ne.jp/t_yano/20080503/1209847383#c1210012995

以前のエントリに書いてますが、Genericsを含めて静的な型というのはコードにとって本質的に必要な情報なので、これをとやかくいっているわけではないです。あくまで、アクセッサ定義やFileReaderのような、本来簡潔な記述ができるはずのものを対象としています。もしt_yanoさんが「役に立つ」と書いたのがこのGenericsを含めて考えておっしゃっているなら、残念ですがこちらの意図が伝わっていなかったことになります (わかりづらくてすみません)。
Javaは記述量の多い言語ですが、その中でも必要な記述ともっと簡潔にできるはずの記述が混じっています。Genericsを含めて型に関することは主に前者ですが、アクセッサ定義などは後者でしょう。そして、その後者がどう役立つかという話です。まあ毒にも薬にもならないという結論は変わらないように思いますが。

「書きやすくなる」んじゃなくて、「ミスを減らす」「チーム間の強調をやりやすくする」といった改善と言えばいいでしょうか。本来書きやすくなるとミスは減るのですが、IDEがあるために効率が変わらないように見えるという部分は、実際にあると思う。だからこの手の議論には「IDEがあるからいいじゃん」という話がいつものように出てきます。

http://d.hatena.ne.jp/t_yano/20080503/1209847383#c1210012995

書きやすさだけでなく読みやすさも考慮していただけるとうれしいです。コードは、書かれることよりも読まれることのほうがずっと多いため、IDE使えば書きやすさが変わらないからいいや、というのは片手落ちのように思います。延々と続くアクセッサ定義がなくなるだけで、個人的にはかなり読みやすくなるとは思ってますし、分かりやすさと簡潔さは大規模開発にこそ必要だと思いますが、まあこれは個人の感覚の差が大きいので万人にそうかといわれるとわかりません。
『本来書きやすくなるとミスは減る』というのはその通りだと思います。Genericsはこれに反しているように考えておられるかもしれませんが、あれは本来必要であった情報を記述してなかったのを、まじめに記述するように変更したものであり、アクセッサ定義などと同列に考えるものではないでしょう。

generics以外の文法改変は現場では基本的に些末なものです。あったらもちろん嬉しいですし使いまくってますが、それによって大規模開発がなにか凄く効率がよくなったわけではないですから。

http://d.hatena.ne.jp/t_yano/20080503/1209847383#c1210012995

まあこんなもんでしょうね。
個人的には、Genericsを含めて型情報が役立つことはわかっているので、それ以外の冗長な記述がどう大規模開発に役立つかについてもっと突っ込んだ意見を伺ってみたかったですが、まずはこれだけ真面目に回答いただいたこと、また議論を有益な方向に展開していただいたことにお礼申し上げたいと思います。t_yanoさん、ありがとうございました。