- - PR -
特集「私がJavaからC#に乗り換えた10の理由」について
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-07-11 12:45
objectです。
C#側からの意見を書いていたので、宜しければ、その回答の空虚?的を射ていない?「ちぐはぐ」な所を具体的に教えて欲しいと思います。 私が、このスレの中で言いたかったのは、Javaが言語として持っている本質的な問題です。 ※性能に関する問題は、書く事は出来ても、完全に実証する事は不可能ですから、書いたが最後非難合戦になるのは目に見えています。 ※また、どちらも実行時環境の影響を大幅に受けますから、どんどん改善する事が出来る為、今の議論をしても意味が無いと思います。 私が言いたかった事を纏めます。 第一に、Javaの「インターフェースとしてのデータ」に関する部分です。 つまり「プロパティ」の問題です。 私は、これはJavaの言語としての欠陥とも言えるものであると思っています。 ※これは人間の思考自体がオートマトンである事に関係していると思います。 ※機能は、ある状態に作用し、別の状態を生み出す要素です。 ※状態が、機能の結果得られたとしても、それは状態なのです! 従って、少しでも早くユーザーに迷惑が掛からない形で、Javaに対応して貰いたいと思っています。 そうで無いと、社会的に見ても大きな負債になると思いますし、一番被害を受けるのは、Javaユーザーです。 第二は、「イベント」の問題です。 「イベント」の有無は、欠陥では無いですが、「イベントドリブンの世界」では、ユーザーに、その記述性に於いて、かなり大きい影響を与えると思います。 何故なら、「イベント」は、仕組みは見えない、つまり隠蔽し、何が起きるかを透過的に表した徴表「キーワード」であるからです。 >Jittaさん 私は、ハッキリ言うと、最初、Jittaさんのレスに少し怒りを感じました。 でも、途中でその部分を編集されたので、その事に付いては触れません。 所で、Jittaさんは、何派なのですか? ※C#派でもJava派でもないと書いておられるので、少し気になりました。 確かに、好き嫌いだけが前面に出て来ると、問題であるとは思います。 でも、人間が何かを積極的に表現する場合、その根底を何らかの感情(喜怒哀楽等)が支えているのは、間違いの無い事実です。 それに、JavaもC#も言語ですから、好みはとても影響すると思います。 「C」には、「C」の精神・心があります。 その心を受け継いで「C」によるプログラムを書いていると言っても良いと思います。 また「C++」には「C++」の精神が、「C」の精神の上に発展させられています。 もちろん、「Java」も「Delphi」も「C#」もそうです。 本来、あらゆる言語がそうだと思います。 だから、もし語る事に意味があるとすると、全体を貫く精神だと思います。 言語は、単なるツールでは無いのですから!
もちろん、提供する側がその為の努力をするのは、当然だし、実際、努力されていると思います。 尾島さんも、あのレスを書いてる態度をみると、言葉はともかく誠実に書かれていると私は思います。 今回の記事も、その「ニュース」として掲載されてると私は思います。 Jittaさんが仰る「ニュース」を誰が保障するのでしょうか? それは、最終的には受け取る側の責任です。 こんな事を言っていると、無味乾燥で内容の無い記事ばかりになると思います。 『嗜好』と『思考』も同じです。大切なのは、そこに普遍性or一般性があるかどうかではないでしょうか? 私は、自分も含めて、今のソフト開発言語のユーザーが考え直す時期に来ているんだと思います。 結局、ソフト開発言語と言えども、自然言語と全く同じ問題を孕んでいるという事だと思います。 これを機会に、あらゆる言語ユーザが少しでも、素直に語り合える様になる事を祈ります。 | ||||||||||||||||
|
投稿日時: 2003-07-11 14:15
>第一に、Javaの「インターフェースとしてのデータ」に関する部分です。
>つまり「プロパティ」の問題です。 >私は、これはJavaの言語としての欠陥とも言えるものであると思っています。 なんのことやら. 「インターフェースとしてのデータ」が何を指しているか全く不明です. #データはデータ.インターフェースはインターフェース. ひょっとして,これはC#用語ですか? >※これは人間の思考自体がオートマトンである事に関係していると思います。 ....うーむ.何を言いたいのやら. そもそも人間の脳の構造や思考回路についてはまだ解明されていないはず. | ||||||||||||||||
|
投稿日時: 2003-07-11 14:59
これは、英-Ranさんの、
の部分です。かみ合ってないでしょ? >私が、このスレの中で言いたかったのは、Javaが言語として持っている本質的な問題です。 つまり、Java言語を問題にしていらっしゃいますよね? 対して英-Ranさんは一つ一つの特性?特徴?機能?を問題にしていらっしゃるようです。 かみ合っていないと思うのですが、いかがですか? すみません、言葉が下手です。言い直します。 元の記事では、ここへの投稿からの推測ですが、JavaまたはC#の機能一つ一つをあげて、 C#の優位性を“説明”されているようです。そのため、一つ一つについて、 「そうではない」と言われているようです。 それであるのに、全体的な問題を持ち出されても、 かみ合わないと思いますが、いかがでしょうか。 >つまり「プロパティ」の問題です。 >第二は、「イベント」の問題です。 どうなんでしょう?どなたかの投稿にありましたが、 Javaの基本が「開発者のやることを信じるな」であれば、 安易な設定でprivateをpublicにしてしまう「プロパティ」は、 **Javaでは受け入れられない思想**ではないでしょうか。 ・・・ということを、英-Ranさんの投稿から感じているのですが。 Javaは、昔勉強をし始めたとき、 「オブジェクト指向」と聞きました。「オブジェクト指向」は、 「自分でできることは自分でする」が基本であると、理解しています。 「オブジェクト指向」でかつ、「オブジェクト指向」以外も取り入れたC#にとって、 イベントやプロパティを言語として取り入れたことに意義はありますが、 それは「オブジェクト指向」以外も取り入れたからであって、 イベントやプロパティは「オブジェクト指向」の範囲では収まらないもの、 ではないでしょうか。 英-Ranさんの、『オブジェクト指向とは馴染まない新たな概念』とは、 そういうことではないでしょうか。 #通じるかなぁ?不安だなぁ。。。 #そもそも漠然と「なんか、違うなぁ?」と思っていたことを「説明しろ」といわれても、 #それは難しいかも。。。 #こういう言葉でいいのかなぁ?と、?で言葉をつないだんですけどね・・・ 〜〜〜 >所で、Jittaさんは、何派なのですか? >※C#派でもJava派でもないと書いておられるので、少し気になりました。 う〜〜〜〜ん?「使えたら何でもいい」派?...何でも使います。 BASICやってた頃は「Cなんて使えねぇ〜(使いこなせない、の意)」 と思っていましたが、やらなければならなくなったら使いました。 C++やるようになってからは「もうVBなんて、時代遅れだろう」と思っていましたが、 やっぱり人の手伝いをしなければならなくなり、必要から使いました。 Javaは勉強し始めた頃もありましたが、「こんな遅いもん、使えるか」と思いましたが、 今は速くなっているということなので機会があれば使います。 Delphiは、元々Cだったので:=やbeginが面倒に感じてあきらめたのですが、 PL/SQLの書き方が似ているため、今ならやればできるでしょう。 今のメインはVB.NETですが、そのうちC#も使うでしょう。 というか、自宅ではC++アプリをC#で書き直し中です。←何ヶ月かかってるんだ!! VC++だけは、避けて通っています。いや、一応学習用に買ったのですが、 3日で挫折し、それ以来避けて通っています。 #う!こうやってあげると、いったいどれくらいつぎこんだんだろう?? 昔、帰国子女同士が話をしているところに同席していました。 二人は日本語と英語をチャンポンで使っていました。 隣でhearしていた私は、listenしていたわけではないのに頭が混乱し、 「英語か日本語か、どっちか一つにしてくれ!」と叫びました。 彼らは、話す内容がどちらの方がよく伝わるかで、使い分けていたようです。 プログラミング言語も同じじゃないですか? 作るものにあったものを使えばいい、そう思います。 それを選べるのも、SEの資質の一つじゃないでしょうか。 まぁ、私は選ばせてもらえませんでしたが。 ということで、 >言語は、単なるツールでは無いのですから! すみません、私にとっては単なるツールです(だからどれも中途半端なのかも)。 仕事は好き嫌いでは、選ばせてもらえませんから。 それだけ感情を込められることをうらやましく思いますが、同時に怖いとも思います。 だって、私は、そんなに一生懸命ケンケンガクガクやる必要性を感じませんもの。 私、除名願いだしていますが、宗教団体に入っていて、宗教論争をやっていました。 本当に、通じるものを感じます。 〜〜〜 >これは、言い過ぎだと思います。 そうでしょうか。私は仕事の必要からここの記事を漁っています。 先に書いたとおり、仕事は好き嫌いでは選ばせてもらえません。 (少なくとも、私はそうでした) おじまさんが誠実である/ないと、記事に信憑性がある/ないは別の問題ではないでしょうか。 「嫌いになったから別の言語に変わった」のでは、 記事に「感情」が混ざったのでは『「良いところ/悪いところ」は隠れてしま』う、 と思います。良いところ悪いところが隠れれば、当然記事の信憑性も下がります。 まぁ、それを取捨選択するのは、おっしゃるとおり、読み手の責任なのですが・・・ 例えば、上司に「今度のプロジェクト、JavaでやるかC#でやるか、君の意見を聞かせてくれ」 と聞かれて、「C#の方が好きだからC#でいきましょう」と答えますか? 上司との関係次第で、そういうのもアリかもしれませんが、普通、怒られるでしょう? タイトル、「私がJavaからC#に乗り換えた10の理由」から私が期待したのは、 そういうものなんです。この記事がこっち、会議室の方にあったのなら、 それもアリと思います。しかし、言うなれば専門誌の記事なんです。 写真週刊誌の記事なら、好き嫌いでかまわないでしょう。 この、「どんな性質を持った場所に掲載されるか」が問題なのです。 したがって、「嗜好」と「思考」は違うのです。 「嗜好」は好みです。好みは受け入れられません。 しかし、「思考」は、少なくとも学ぶことができると思います。 「私は、こういうケースではこういう風に考える。 Javaではこの考えるパターンを変えなければコーディングできないが、 C#では私のこの思考パターンそのままにコーディングできる」 であれば、その人の思考パターンを知り、あるいは取り入れることができます。 「私はC#のこういうところが好きだ」では、「あ、そ」で終わりではないでしょうか。 #いや、同じく好きなら、「そうそう」と続くのでしょうが... 〜〜〜 なんか、不安・・・ | ||||||||||||||||
|
投稿日時: 2003-07-11 15:47
3ヶ月前の記事ですが、タイトルが似てたので。
Visual C# .NET 2003 にアップグレードする 10 の理由 http://www.microsoft.com/japan/msdn/vcsharp/productinfo/topten/upgrade.asp 下記の右下に、他にもいろいろあります。 http://www.microsoft.com/japan/msdn/vcsharp/ | ||||||||||||||||
|
投稿日時: 2003-07-11 21:20
最初の投稿だけならそう思いましたが、二通目の投稿は著者の立場の発言とは思えませんでしたので。ただ、autumnさんが「Java信者の聖戦」と書いたから卑怯だと思ったわけではないことは理解してくださいね。 @ITの記事に関する話なのだから、@ITの掲示板でこそ書き込むの筋なのに、議論に参加することなく裏でこそこそ文句を言っているように見えたから言ったまでです。自身で「説得力がある指摘なら、こちらも「ああ、そうか」と納得して、訂正を入れる場合もあるでしょう」と思うならば、例えば「小さいオブジェクトを多量に生成する状況ではstructでなければ話にならない」とでも言えばいいのです。別に著者の立場でだって、C#の連載をしているのだから、それくらいは問題ないでしょ? 個人的にはJavaと.Netの主戦場であるWebアプリでそのような状況が一般的に起こるとは思わないけれど、実際にそういう案件に関わっている人ならばそれだけで十分C#に移るべき理由になるはずです。 でも、おじまさんの記事にそんなことが書いてありますか。おじまさんの記事を読むと「ポリモフィズム」を使う状況以外はいつでもstructを使うべきだという解釈だってされかねない。 objectさんも、「イベントを「単一のメソッド」にバインド出来る安全な実体としての「イベント」です」と熱く語っておられますが、おじまさんの記事にそんなことが書いてあるのでしょうか。 andyさんは、「私は、「.NET固有のコンポーネントから派生した独自コンポーネントを ちょこちょこっと作って、即効でデバッグテストする。そして、作った独自コンポーネントをIDEに登録すると、ドラッグだけで自分のいろいろなソリューションで使えるようになる(もちろん)プロパティウィンドウも使える」という一連の流れがスーっと澱みなく進むことに快感を感じています。 」と書いていますが、おじまさんの記事には.Netはセットアップが楽ちんとしか書いていません。 やはり、センスが悪いと思いませんか? # なんというか、私にはマラソン選手にいい体してますねえと誉めているようにしか # 思えないのです。誉めてはいるけど、何かずれてる。 # あんな誉め方されて、本当にC#な人は嬉しいのかなあ?
私がJavaを好きなのは、私にとって理想の言語が「どんな達人だろうが三歳児だろうが、誰が書いても良質な同じコードになる言語」であり、さらに突き詰めれば「『あ』以外の構文が存在しない言語」だからです。この観点で見た場合、現状ではJavaがbetterであり、C#の追加機能は先祖帰りもいいところです。 しかし、このような言語が実現したとして困るのは当のプログラマ自身であり、autumnさんのような熟練したプログラマが抵抗勢力として古き良き時代への回帰を望むであろうことは想像に難くなく、意見の一致を見なくともそれは仕方なきことと思いますので、端からautumnさんのような方にJavaをお薦めするつもりはありませんゆえご了解ください。 [ メッセージ編集済み 編集者: 英-Ran 編集日時 2003-07-11 21:22 ] | ||||||||||||||||
|
投稿日時: 2003-07-11 23:01
どうもobjectさんは、「AはBより優れている」を否定することが「BはAより優れている」だと思い込んでいるのではないかと想像します。私は、(おじまさんが指摘する)C#がJavaより優れている主張に根拠がないといっているわけだから、「C#とJavaはどちらが優れているとも言い難い」と言っているだけのことなのですが……
これは、私の意図とは違うので補足させてください。まず、C#のプロパティやイベントは単なるシンタックスシュガーです(というとobjectさんには、また怒られそうですが、機能的にはそうです)。これは「ひとつのことに二つの方法を設ける」ためJavaの思想には馴染みませんが、別にオブジェクト指向と関係のある話ではないと思います。 # しかし、Javaも次のバージョンから様変わりしてしまうので「Javaの思想に馴染ま # ない」とは断言できなくなってしまうかもしれません。 私がC#のdelegateに「オブジェクト指向とは馴染まない新たな概念を持ち込むことにもなります」と書いたのは、delegateが「例外(もちろん、Exceptionクラスという意味ではなく)」を作ってしまうからで、別にオブジェクト指向でないからダメという意図ではありません(ただ、誤解を受ける書き方はしたかもしれません)。プログラマならば、たったひとつの例外のために、やたらと無駄なコードを書かなければいけないという経験があると思いますが、言語仕様でも同様です。 ↓【書き加え】delegateはオブジェクトなのでこれは勘違いでした。すみません 問題なのは、delegateへのメソッドの渡し方ですね。 delegateがオブジェクトではないことによって、delegateを含んだC#のコードは、他のC#のコードとは異質な感じがしませんか。少なくともC#の中心的な概念であるオブジェクト指向の理屈で読んだら、理解できないコードです。これは、言語の習得を遅らせるし、コードの流れを分かりにくくすることにも繋がります(実際、C#のdelegateって私にはわかりにくい)。 testml4では、まつもと(ゆきひろ)さんの発言から「メソッドポインタ的な機構は非オブジェクト指向的という批判に対して反論」と書かれていましたが、参照先を読むとまつもとさんが意図しているのはメソッドオブジェクトのことでC#のdelegateとは違うものように思います。個人的にはC#のdelegateに関してはもっとマシな選択があったのではないかと思っていますが、これ以上は言語論争になるのでやめましょう。 あと、私が「たったイベントひとつのために」といったことに対してobjectさんは不満があるようなのでこれにも一応弁解しておきます。まず、世の中にはイベントの必要のないプログラムも多いということがあります。確かにGUIのプログラムを書くには、イベントは便利ですが、例えばSAX(Simple API for XML)のイベントドリブンをevent&delegateで書けて嬉しいのでしょうか。この場合は複数のメソッドを持つ無名インナークラスや継承&委譲を使って書いた方がよほど自然なコードが書けます。 以前の書き込みでH2さんが8:2の法則を挙げていましたが、ここでも同じことがいえるかもしれません。JavaはSunが開発していることもありデスクトップは非常に弱い。だから8割の人は言語仕様としてのeventにあまり必要性を感じていないのです。逆に、GUI付きプログラムの開発事例が豊富なWindows環境では、8割の人がeventを簡単に書けることに重要性を感じるかもしれません。とはいえ、それでもイベントがプログラマの書くコードの1割すら占めることはないでしょう。delegateという異質な概念を持ち込むことがそれに見合うのかどうかは、本当に明確なのか。「たったイベントひとつのために」というのはそういう意図であって、イベントの存在自体を軽視しているわけではありません。 # 人命は大切だけどその命を救うのに一兆円の医療費がかかるとしたら # どちらがより重要か考えてあげる必要があるでしょ。それと同じ話です [ メッセージ編集済み 編集者: 英-Ran 編集日時 2003-07-12 13:24 ] | ||||||||||||||||
|
投稿日時: 2003-07-11 23:01
こんにちは、meiです。
ずっと違和感を感じていたのですが、なんだか分かったような気がします。 Jittaさんは、ずっと「仕事」を強調います。 私は一応プログラマを職業としていますが、 プログラミング自体面白くなってて、 家でプログラミングをしたりもするようになってしまっています。 なので、@ITを仕事として参考にするとともに、 興味を満たすために記事を読んだりもしています。 特に会議室を読んだり、(自宅で)書き込んだりするときは、 ほとんど趣味プログラマモードだったりするので、 「仕事なので好き嫌いでは選べない」とか、 「プログラミング言語は道具」とか言うのを、 仕事を離れてプログラミング好きの一個人としての感想を言ってくれれば良いのに、 とか思っていたんです。 ですが、先の書き込みをみて、 ほとんど仕事としてだけプログラミングをしているんだなぁとか思いました。 確かに仕事で好き嫌い出すのは良くありませんが、 趣味プログラマモードでの私は、 プログラミング言語を単なる道具と言われるとちょっとがっかりしますね。 #あと、私はプログラマという職業を好き嫌いで選んでいます。 #というか、正直、好きでなければやってられねー(笑) | ||||||||||||||||
|
投稿日時: 2003-07-12 04:00
はじめまして。
議論を興味深く拝読させていただいてます。 私は8ビットパソコン時代から多少なりともプログラミングに手を染めており、 その意味でのキャリアはみなさんと同等(あるいはそれ以上)かと思いますが、 最近やっといまどきのプログラミング言語(具体的にはC#)を勉強し始めたばか りで、残念ながら書き込みの多くの部分が理解できておりません(笑)。 ですが、ちょっとばかり意見を言わせてください。 英-Ranさんの最近の書き込みで、 理想の言語が「どんな達人だろうが三歳児だろうが、誰が書いても良質な同じ コードになる言語」 というくだりがありましたが、ここで言う「良質」という言葉を誰が読んでも 容易に理解できるという意味に解釈しましたが、私が思うに、そのような言語 は本質的に作りえないと思います。 それは人によって、何が理解しやすいかは微妙に異なるからです。もちろん 「理解しやすさ」について8割〜9割の部分は意見の一致を見るでしょうが、 すべての部分で認識が共通することはまずありえない。 極めて幼稚な例で恐縮ですが、GOTOという恐らくプログラミング言語の中で 太古の命令の1つがあります。ある人はこの命令について、 「このような命令はなくともコードは書けるし、可読性を著しく落とす。 そもそもオブジェクト指向の思想に反するから絶対使うべきでない」と 主張するでしょうが、ある人は 「ケースによっては、GOTOを使ったほうがよりシンプルでわかりやすいコード を書けるから場合によっては使ってもよい」 と主張することでしょう。 両者の比率がどれくらいになるかはわかりませんが、仮に7:3として、 前者が多数派だからといって、GOTO命令を持つ言語は圧殺されるべきなの でしょうか?後者の意見に与する人間は間違っていると非難されるべき なのでしょうか? これこそ尾島氏が文章の冒頭と最後で述べておられる「し好」(好みであり、 感じ方であります)の問題であり、C#は後者の立場を選んだ言語であるため、 なにかとJava愛好家の非難を受けているようですが、しょせん言語を使うのは 人間ですから、使わざるをえない場合を除いて、より自分のし好にあった言語 を使いたいものですよね?し好の問題である以上、正しいとか間違っているとか いう観点で議論しても、結論が出る問題でなく、そのし好が(あえていやみな 書き方をさせていただければ)Java教の教義であるオブジェクト指向を乱すもの であったとしても、異端審問のごとくそれを非難するようなことはJava愛好者 の印象を悪くするだけではないかと思いますが、いかがでしょう? (初書き込みのため、発言ルールに反した部分があればご容赦ください) |