- PR -

特集「私がJavaからC#に乗り換えた10の理由」について

投稿者投稿内容
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-07-12 07:12
おはようございます。
引用:

meiさんの書き込み (2003-07-11 23:01) より:

Jittaさんは、ずっと「仕事」を強調います。
私は一応プログラマを職業としていますが、
プログラミング自体面白くなってて、
家でプログラミングをしたりもするようになってしまっています。
(以下略)


好きでなければやってられない、確かにそうです。
が、「好きでなければやってられないが、
好きだけでもやってられない」・・・んです、私の場合。
私の場合、プログラミングとの出会いは中1で、
趣味で仕事を選んだのですが(それも中1の夏)。

 プログラミング・・・趣味のひとつですよ。でなければ
アセンブラROM買って、MS-DOS買って、VC++買って、
Delphi買って、Win2kDev.買って、Borald C++ Builder買って…
いくらつぎ込んでいるのだか。
PC-6001の時代から、飽きっぽい私が
#う!これが特定の言語によらない、最大の理由か
今まで続けている趣味は、これとカメラだけです。

 しかし、私の場合、「プログラミング」が趣味なのではなく、
正しくは「作ること」なんです。
作れれば、自転車組み立てるのだって、DIYも、料理も、
ペーパークラフトも、プラモデルも、みんな趣味です。
今の興味は、一人乗り自動車の組み立てキットです。
「作ること」が目的なので、その手段は問いません。
「問いません」というのは正しくないかな。
C#だろうがJavaだろうが、Pascalだろうが、
C++だろうが、Perlだろうが、
目的を達成(この「目的」は、アプリケーション)するためなら、
私は、何だって使います。
もちろん、どれがその目的に向いているか、は考えると思います。
また、その時に「今一番使いやすい言語」が、
大きなウェイトを占めるとも思います。
ただ、「好きな言語」ではない、と思います。

C++でWebページの制御はしませんよね?
まぁ、CGIにするという手はありますが。
JavaでOSグリグリ使うコードは書けませんよね?
(JVMの上で動く、と理解しています)
入力をちょっと手直しするのに、わざわざC#を使いますか?
構文解析するなら、やっぱりLEXの出番だと思うし、
データベース中のデータを扱うならやっぱりVC++で書くよりも
ストアドプロシージャにしたほうが効率がいい。

要は「適材適所」ではないでしょうか。
それは、仕事だろうが、趣味だろうが、変わらないと思います。
#まぁ、趣味でいろんな言語環境を一時期に購入できる人はいないかも…
#いや、やっぱり、趣味だからこそ、やるかも。


 それで、悲しいことですが、ここしばらく、
私は趣味のプログラミングができていないんですね。
家に帰ると、3歳の「なぜなに」お化けが暴れ回り、
そいつが寝たと思ったら今度は妻がじゃまをする・・・
趣味の時間をくれ〜〜〜〜〜
ってところが、「仕事」中心の書き方になってしまったかも。
#ち!もう起きた


 言語を大切にしないのではなく、言語によって表現/作られるものを
大切にしたい。結局、趣味で作るプログラムにしても、
自分だけが使うならともかく、
使ってくださる人が使いやすいように作っていなければ、
それは失敗ではないでしょうか。
自己満足に終わっては、そこには発展がない、そう思います。

 「ただのツール」と言いましたが、
ツールがなければ作れないのもわかっています。
だから、ツールはすべて平等に大切なのです。
ただし、ひとつにこだわる必要はない、と思います。


#すみません、子供が起きてしまったので推敲せずにポストします。
未記入
大ベテラン
会議室デビュー日: 2003/06/28
投稿数: 219
投稿日時: 2003-07-12 09:33
おはようございます。

現在の環境では
サーバーサイド => Java
クライアントサイド => C#
という使われ方が続くと思います。むろん、両者の仕様が今後どう変わっていくのかによってこの関係が変化するでしょう。
今回の特集記事の目的は「C#の市場をもっと広げたい」ところにあるのは間違いない
と思いますが、さて、この記事は一体誰に読んでもらいたかったのでしょう?
少なくともプログラマです。しかし、C#を業務として使っていただくことを狙ったとすれば
片手落ちと言わざるを得ません。これは、Jitta様の書き込みにあります

> 上司に「今度のプロジェクト、JavaでやるかC#でやるか、君の意見を聞かせてくれ」
> と聞かれて、「C#の方が好きだからC#でいきましょう」と答えますか?
> 上司との関係次第で、そういうのもアリかもしれませんが、普通、怒られるでしょう?

これに代表されてしまうでしょう。この記事は経営者ならびに管理職(マネージャ、リーダー含)クラスの方に対しては殆どアピールできていないと考えます。(恐らく4ページ目の実装効率、実行効率の説明がそうなのかもしれませんが、やはり苦しいです)。言語選択の多くは顧客仕様も含めたTop downが多いですし、また、仮にこの記事を読んでBottom upしようにも、ここに掲げている10の理由をそのまま上申したとすれば蹴られるのは容易に想像できます。
それ故、尾島様のセクションでC#を導入した経緯には11番目の大きな理由があった、という考えを禁じ得ません。

# JavaからC#への乗り換え記事を企画すること自体ナンセンスだったかと?
# もし、続編を書くチャンスがありましたらマクロ的な視点で捉えた内容が欲しいです。

とはいうものの、趣味として、またクライアントサイドプログラミングではC#を導入していきたいです。

[ メッセージ編集済み 編集者: Ken-Lab 編集日時 2003-07-12 11:13 ]
お犬様
ベテラン
会議室デビュー日: 2003/01/26
投稿数: 67
投稿日時: 2003-07-12 10:45
引用:
さらださんの書き込み (2003-07-12 04:00) より:

理想の言語が「どんな達人だろうが三歳児だろうが、誰が書いても良質な同じコードになる言語」というくだりがありましたが、ここで言う「良質」という言葉を誰が読んでも容易に理解できるという意味に解釈しましたが、私が思うに、そのような言語は本質的に作りえないと思います。

についてですが
引用:
英-Ranさんの書き込み (2003-07-11 23:01) より:

私がJavaを好きなのは、私にとって理想の言語が「どんな達人だろうが三歳児だろうが、誰が書いても良質な同じコードになる言語」であり、さらに突き詰めれば「『あ』以外の構文が存在しない言語」だからです。この観点で見た場合、現状ではJavaがbetterであり、

英-Ran氏のし好に対して現在は Java が better であるというだけの話だと思いますけど。

引用:
さらださんの書き込み (2003-07-12 04:00) より:

し好の問題である以上、正しいとか間違っているとかいう観点で議論しても、
(中略)
そのし好が(あえていやみな書き方をさせていただければ)Java教の教義であるオブジェクト指向を乱すものであったとしても、異端審問のごとくそれを非難する

具体的にどなたの発言に関して仰っておられるのでしょうか?少なくとも 英-Ran氏はそのような発言はしていないと思いますが。

そういえば C# には goto があって Java には goto ありませんね。
kekyo
会議室デビュー日: 2002/12/12
投稿数: 13
投稿日時: 2003-07-12 11:50
#文脈がどこの文を指しているかという指摘は別として

私はさらださんのとJittaさんの意見にかなり近い意識を持っています。

現在のプログラミング言語はかなり「幼稚」な存在だと思っています。
コンピュータを人間の道具として使用する前提であれば(そうですよね?違う例が思いつきません)、いかに人間が思う「タスク」をコンピューターで実行できるかが焦点になるはずです。そのために、プログラミング言語は人間の意志を具現化するのに適した形へと進化してきたと思います。

しかし、人間同士のコミュニケートのための言語(日本語やら英語)すら、人間の「思考」を満足には表現できていない状況で、それより劣るプログラミング言語で何かしらの工夫(〜指向のようなものを考えてみたり)をしたところで、改善できることなど知れていると思います。

#オブジェクト指向の研究に携わっている人たちの成果を
#軽視しているわけではありません。
#根底にあるものを探求することは、尊い作業です。
#その成果によって、更に上にあるもの存在を明らかにするわけですから。

問題は「〜指向」というものが意図的に今まで存在した選択肢を狭めていくとするなら、とても大きな理由付けが必要だと思うことです。
Javaで言うなら、「多数の人がある記述を一通りの手法でしか書けないようにする」ということが理由付けかもしれません。
(違うかもしれません。今までの書き込みを見ても、まだ確証が得られないので)

でも、さらださんが書かれたように、そもそもそのコードは誰が見ても安全で良質で理解しやすいのか?と言うと、そうとは言い切れないと思います。
逆に、〜思考を導入することで選択肢が狭まっていくことは、「本当にそれが人間の思考面に近づいているのか」ということから逆行する可能性があるのではないか?という気がして仕方がないのです。

何か困難な実装を考える場合、いつも〜指向の範疇でしか考えない癖がついてしまい、あるとき「ああ、なんだ、こうしたほうがシンプルじゃないか」と気が付くことがあるのではないかと。私は良くあります。

単にプログラミングを「仕事」として捉えた場合、生産性を向上するためにこれらの手段を用いてプロジェクト内での意識を合わせて行くのは、とても意味のある事でしょう。それによって、プロジェクト全体の生産性は確実に向上すると思います。

ただ、そのために「よりよい選択を考える余地」がどんどん狭まっていくことは正しい姿とは思えません。
もちろん、ここで言うところのよりよい選択がC#などとは思っていません。C#はJavaよりも、そういうことを考える余地を残していることが良いなと思っているだけです。

だから、Jittaさんの書かれているように

> C#だろうがJavaだろうが、Pascalだろうが、
> C++だろうが、Perlだろうが、
> 目的を達成(この「目的」は、アプリケーション)するためなら、
> 私は、何だって使います。
> もちろん、どれがその目的に向いているか、は考えると思います。
> また、その時に「今一番使いやすい言語」が、
> 大きなウェイトを占めるとも思います。

人間が考える「目標」に最も近い言語を使うだけのことです。

#例えば、プライベートなサイトではServletを使っています。
#これはWindows Serverが買えないという理由だけです。
#買っていたらC#で書いたかもしれませんが、とにかく「現状」の私の
#タスクを満たすのに最適なのはJavaだったから、というだけです。

より良い選択に相当する新たな言語が、MSから出ようがSunから出ようがOSコミュニティから出ようが、私は喜んでそれを受け入れると思うし、

> 「ただのツール」と言いましたが、
> ツールがなければ作れないのもわかっています。
> だから、ツールはすべて平等に大切なのです。
> ただし、ひとつにこだわる必要はない、と思います。

全くその通りだと思います。

#Javaに根を下ろす「何か」を説明するにはまだ言葉が不足している気がするな...
#疲れるので気が向いたら書きます。

#Jittaさんの経歴?は私とそっくりですね
object
ぬし
会議室デビュー日: 2002/03/20
投稿数: 338
お住まい・勤務地: 香川県高松市
投稿日時: 2003-07-12 13:07
objectです。

最初に、英-Ranさんのautumnさんに対する発言に関して。

これは私が>ALLで、皆さんに意見を求めた際に、答えて頂いた事が切っ掛けになってると思います。
autumnさんは、最初からこの議論には加わらないと発言されていたので、英-Ranさん、止めましょう。
これは、こういう場でのルールだと思います。
宜しくお願いします。

>Jittaさん
>英-Ranさん
こんなに返答する内容が増えるとは思っていませんでした。
一部纏めレスで済みません。
引用:

objectさんは、「「イベント」を実装していない、Javaに対しては全くクレームを付けないのはどうしてでしょう? 」と言いますが、上記の通り「delegateの存在にはトレードオフがあって一方的に優れているということにはならない」と言いたいだけですから、当然そんなクレームをつける必要がありません。
そもそも、私がいつイベントを実装すべきでないなんて言ったのでしょう(まあ、私の文章が悪いのかもしれないですが)。

これに関しては、まだ私が補足説明をしていませんから、かみ合って無くても仕方無いと思います。
済みません!

サンの「delegate」と「無名Inner Class」のレポートが、どの様な背景で書かれているか良くは分かりません。
しかし、私は「無名Inner Class」が入っている事から、サンがボーランドの力を借りて検討したのは、「イベント」の処理をどう実装するかだと判断しました。
そして、サンとしては「delegate」と「無名Inner Class」を比較判断し、「無名Inner Class」の方がサンとしては最良であると判断した様です。
私は、これはサンとしての判断だから、それで良いと思っています。
でも、私が不思議に思う、つまり聞いているのは、
C#(J++)の「delegate」が良くないという理由で、何故Javaの「イベント」の実装を止めてしまうの?
私は、「無名Inner Class」が「delegate」以上であるのなら、当然の流れとして、「無名Inner Class」で「イベント」を実装する事は出来るし、容易だと思ったという事です。

引用:

どうもobjectさんは、「AはBより優れている」を否定することが「BはAより優れている」だと思い込んでいるのではないかと想像します。私は、(おじまさんが指摘する)C#がJavaより優れている主張に根拠がないといっているわけだから、「C#とJavaはどちらが優れているとも言い難い」と言っているだけのことなのですが……

英-Ranさん、これは全くの誤解です。
私の前のレスで、次の様に書いています。
「これが直ちに、双方の優劣に繋がる程単純でも無いと私は思います。」
言語仕様の違いが、即両者の優劣に繋がる程、単純である筈がありませんし、私はここのスレでJavaを非難した事は一度もありません。
ただ、言語仕様として、Javaに最低限「プロパティ」、出来れば「イベント」をユーザーの為にサポートして欲しいとは本当に思っています。
※勿論、「プロパティ」、「イベント」と言っても、C#と同じものを押し付けるのでは無く、Javaのカテゴリ内で合ったもの実装すべきと思っています。

>Jittaさん
------------------------------------------------------------------------------------
「プロパティ」、「イベント」に関する話は、少しずれていると思います。
引用:

「オブジェクト指向」は、「自分でできることは自分でする」が基本であると、理解しています。

これも「オブジェクト指向」の説明にしては、少し曖昧過ぎるのではないでしょうか?
最低限、ベースである抽象データ型の事を忘れてはいけないと思います。
これ以上は書きません。
引用:

イベントやプロパティは「オブジェクト指向」の範囲では収まらないもの、ではないでしょうか。

プロパティの導入によって、初めてフィールドのカプセル化が完全になると私は思っています。

言語とツールの関係に関しては、「meiさん」が少し書いてくれてますが、私が込めた表現の意味を書きます。
「言語は、単なるツールでは無い」の意味は、
ペンチ、鋸、金槌等の今迄の道具とパソコンは、道具ではありますが、違いますよね?
それ以上に、所謂「ツール」・「ユーティリティの類」と「ソフト開発言語」は、異なると言っているのです。
言語は環境その他で選択するから、単なる道具だというのは、極端だと思います。
言語ユーザーは、自分が自覚している以上に、言語に影響されているいう意味です。
------------------------------------------------------------------------------------

>英-Ranさん
------------------------------------------------------------------------------------
引用:

これは、私の意図とは違うので補足させてください。まず、C#のプロパティやイベントは単なるシンタックスシュガーです(というとobjectさんには、また怒られそうですが、機能的にはそうです)。これは「ひとつのことに二つの方法を設ける」ためJavaの思想には馴染みませんが、別にオブジェクト指向と関係のある話ではないと思います。

※誤っている部分があったので、一部削除し、編集し直しました。
私はプロパティは違うと思っています。
ゲッター、セッターは確かに隠蔽はしましたが、データをメソッドに変えています。
つまり、ゲッター、セッターはデータをメソッドに変質させてしまっているのです。
プロパティの導入によって、初めてフィールドのカプセル化が完全になるのです。

引用:

delegateがオブジェクトではないことによって、delegateを含んだC#のコードは、他のC#のコードとは異質な感じがしませんか。

「delegate」自体は、キーワードですけど、デリゲートインスタンスは、オブジェクトだと思います。
事際、この単純な宣言の裏で、コンパイラとCLRがJavaの「無名Inner Class」とは比較にならない位の作業をやってくれていると思います。

引用:

個人的にはC#のdelegateに関してはもっとマシな選択があったのではないかと思っていますが、これ以上は言語論争になるのでやめましょう。

分かりました、delegateに関してはここで終わりにします。
------------------------------------------------------------------------------------
サンの文章を読んでいると、サン自体がJavaが「Class指向」である事を自認している様です。
でも、「Class」はあくまでオブジェクト指向を実現するための、重要ですが型の一つに過ぎないと思います。
「Class」に拘ると、大切なものを見失うと私は危惧しています。


[ メッセージ編集済み 編集者: object 編集日時 2003-07-12 13:49 ]

[ メッセージ編集済み 編集者: object 編集日時 2003-07-12 17:27 ]
英-Ran
ベテラン
会議室デビュー日: 2002/06/12
投稿数: 55
投稿日時: 2003-07-12 13:10
引用:

さらださんの書き込み (2003-07-12 04:00) より:
英-Ranさんの最近の書き込みで、
理想の言語が「どんな達人だろうが三歳児だろうが、誰が書いても良質な同じ
コードになる言語」
というくだりがありましたが、ここで言う「良質」という言葉を誰が読んでも
容易に理解できるという意味に解釈しましたが、私が思うに、そのような言語
は本質的に作りえないと思います。

これこそ尾島氏が文章の冒頭と最後で述べておられる「し好」(好みであり、
感じ方であります)の問題であり、C#は後者の立場を選んだ言語であるため、
なにかとJava愛好家の非難を受けているようですが、しょせん言語を使うのは
人間ですから、使わざるをえない場合を除いて、より自分のし好にあった言語
を使いたいものですよね?し好の問題である以上、正しいとか間違っているとか
いう観点で議論しても、結論が出る問題でなく、そのし好が(あえていやみな
書き方をさせていただければ)Java教の教義であるオブジェクト指向を乱すもの
であったとしても、異端審問のごとくそれを非難するようなことはJava愛好者
の印象を悪くするだけではないかと思いますが、いかがでしょう?



うーむ、書き込むたびに誤解を招いてる(やっぱり悪文なんですかねぇ)

あの部分は、「私がC#を好きだという人にJavaを薦めない理由」について個人的趣向を語ったつもりだったんですが……

# お犬様フォローありがとうございます

# 以下は個人的趣向なので無視してください

まあ、「そのような言語は本質的に作りえない」というのは、その通りなんですが、プログラムというのは大多数(←利用者含む)にとっては単なる道具です。だから、本質的な問題としてプログラミングというもの自体が目的になってはいけないのです。
だから、「誰が書いても同じになるコード」(良質には、速度、機能、保守性も含む)が重要となるのです。昔は専門家がいなければコンピュータを使うことができなかったし、電話には交換手が必須でしたが、いまでは誰でも同じ方法で使うことができます。
確かにれは理想論かもしれませんし、過去の研究者達はこの難問にことごとく失敗してしまいました(人工知能分野とか)。ですが、このような考え方を常にもっておくことは、「コードの共通利用・カプセル化」などを行う際にプログラマにとって「役に立つ」と思っています。
お犬様
ベテラン
会議室デビュー日: 2003/01/26
投稿数: 67
投稿日時: 2003-07-12 14:11
引用:
objectさんの書き込み (2003-07-12 13:07) より:

私も
・ゲッター: getXxx();
・セッター: setXxx();
は「シンタックスシュガー」だと思っています。

syntax sugarというのは、他の syntax でも表現できるけど、あれば便利な syntax の事を言うのではないでしょうか?

引用:
objectさんの書き込み (2003-07-12 13:07) より:

つまり、ゲッター、セッターはデータをメソッドに変質させてしまっているのです。

に関しては基本的に同意します。
・setter、getter は、その(広義の)オブジェクトが持つ情報にアクセスするメソッドを記述する。
・プロパティは、その(広義の)オブジェクトが持つ情報について記述し、アクセスする手段を提供する。
プロパティと setter、getter は機能的には近いけれども、思想的にはかなり違う、というように受け取っているのですが、こんな感じで宜しいでしょうか?

[ メッセージ編集済み 編集者: お犬様 編集日時 2003-07-12 14:12 ]
さらだ
会議室デビュー日: 2003/07/11
投稿数: 17
投稿日時: 2003-07-12 14:50
引用:

お犬様さんの書き込み (2003-07-12 10:45) より:

具体的にどなたの発言に関して仰っておられるのでしょうか?少なくとも
英-Ran氏はそのような発言はしていないと思いますが。


直接的な回答でありませんが、私はJava派の人にMacユーザと同じような
印象を持っています。Macといえば、8ビットパソコン時代からパソコンを
使っていた私にとっては、まさに高嶺(高値)の花の存在でした。しかし、
その後価格も下がって私も社会人になって、その気になれば、Macを購入
できるようになりましたが、結局一度もMacを購入していません。
その理由の一つはMacそのものが持つ過度の理想主義と、一部のMacユーザ
の持つ雰囲気(極端な言葉を使えば排他的・狂信的)によるものです。
Macの過度の理想主義というのは例えば、いまだにMacのマウスが1ボタン
である事が挙げられます。Windowsであれば、2ボタンが当然ですが、Macは
ボタンが複数あるのはユーザインターフェース上直感的でないとかいう理由で、
1ボタンをいまだに標準とし、Macの一部狂信者の人も「キーボードと併用
すれば、Windowsの右ボタンと同じ事ができるのだから、マウスのボタンは
1つであるほうが優れている」と主張し、Macの優位を説きます。

ここでの一連の議論も、私の先入観も入っているのかもしれませんが、
Java擁護派の方の主張は「C#のこのような機能はJavaでもこうやれば実現
可能であり、C#の作法はオブジェクト指向から反しているから間違っている」
と、理想主義を元にC#を批判し、その態度はC#擁護派の人よりもより攻撃的
であるように感じられます。

Macは現在ではマイノリティになってしまったので、その一部狂信的な愛好者
の態度がより攻撃的に偏っていくことは仕方ないと思いますが、Javaは既に
業界において確固たる地位を確立しているのですから、Java愛好家が時として
宗教的ですらあるという世間での評価も考慮し、自分の主張が攻撃的・排他的
に偏っていないかと、他の言語愛好者よりも気を配らざるを得ないと思うの
ですが、いかがでしょう?

スキルアップ/キャリアアップ(JOB@IT)