Java vs. C#-生産性の観点[終了]


34

Javaでの長年の経験とC#および.NETでの長年の経験がある場合、これら2つの環境間のソフトウェア開発の生産性の違いについての意見を評価します。顧客の1人が、既存のソフトウェアソリューションの置き換えを検討しています。交換には約が必要です。10〜15人年の作業、Javaまたは.NETの選択は、それらの間の生産性の違いに基づいて、必要な投資と市場投入までの時間に大きく影響する可能性があります。

JavaとC#/。NETのソフトウェア開発の生産性の違いを示す情報を提供していただけますか?次のように回答を受け取りたいと思います。

私の経験は、JavaでのX年の経験とC#/。NETでのX年の経験に基づいています。次のことを考慮すると、JavaはC#.NETまたはC#/。NETよりもX%生産的です。


24
ここで重要なことはあなたが作っていることでもある思います。.NETは、ある種のプロジェクトではより良いかもしれませんし、他のプロジェクトではJavaが良いかもしれません。
ØyvindKnobloch-Bråthen

4
どんなプロジェクトですか?多くは、あなたがやろうとしていることのために利用可能なライブラリに依存します。言語的にはC#を強く好みますが、あらゆる種類のプロジェクトで.netがjavaよりも優れていると主張しているわけではありません。
CodesInChaos

7
IMOには非常に重要な戦略的決定があり、プログラマの生産性に基づいてはいけません。完全に優れた最新のWindows GUIが必要な場合は、統計で生産性が7%高いと主張されていても、Javaを選択することはできません。Monoに付属している制限のない真のクロスプラットフォーム製品が必要な場合は、C#の構文が優れていてもJavaが最適です。
user281377

2
@Edin:「エンタープライズアプリケーション」は、アプリケーションの種類をあまり説明していません...デスクトップのみ、クライアント/サーバー構成、Webサービス、Webサイト、モバイルデバイス上の可能なサテライトアプリケーションなどですか?
we敬の念

3
これは、「Javaの」ない「JAVA」だ
マフムード・ホッサム

回答:


17

私の経験は、Javaでの10年の経験とC#/。NETでの3年の経験に基づいています。JavaはC#.NETよりも生産性が0%高い。これは、バックエンドサービスベースのアプリケーションの記述に基づいています。
C#/。NETは、Javaよりもユーザーアプリケーションを記述するための生産性が5%高い可能性があります。しかし、その後、私はJavaでほぼ5年間これをやったことがなく、新しいNetbeans UIエディターがギャップを埋めていたかもしれません。

生産性を高めたいですか?CI(理想的には継続的デリバリー)および自動テスト。主要な言語/プラットフォーム/ IDEで言語/プラットフォーム/ IDEを選択することで得られる生産性はかなり小さいです。


Javaについて0%と言うつもりでしたか?バックエンドサービスベースのアプリケーションの生産性が0%向上しますか、それともJava全体の生産性が0%向上しますか?チェックしてるだけ。
ジョンオンストット

バックエンドアプリケーション(いくつかのルール、dbアクセス、および何が必要か)を作成するように依頼した場合、C#とJavaの両方で推定は同じになります。あなたがWindowsエンドユーザーアプリケーションを求めた場合、私はC#よりもJavaの見積もりを少し大きくするだろう5年前))。
mlk

「主要な言語/プラットフォーム/ IDEで言語/プラットフォーム/ IDEを選択することで得られる生産性はかなり小さい」ための+1
アダムヤスキエビッチ

3
最後の文の場合は-1。(現実世界の)問題クラスごとに、2つの汎用高水準言語を選択できます。1つから他への生産性の向上は100%を超えます。C#とJavaを選択した場合、違いはほとんどありません(ただし、C#は関数型プログラミングに適した分野で生産性が大幅に向上すると証明します)。選択がCとOCamlの間である場合、違いはあなたに違いがあります。
back2dos

42

私は大学とReal World™の両方でJavaとC#を使用して5年間プロジェクトに取り組んできました。

簡単に言うと、簡潔さと構文シュガーの使用により、C#の使用をより楽しんでいます。Factory.GetFactory(OfFactory.GetFactory(Factory));C#でコードを見つけることはほとんどありません。構文が小さく簡潔になっているため、読みやすく理解しやすいです。

どちらで生産性を高めますか?それはプロジェクトの種類によって異なります。

Windows用のデスクトップアプリケーションを設計していますか?C#は、強力なIDE Visual Studioであり、.NET FrameworkによってGUIを非常に簡単に作成できるため、最良の選択です。

率直に言って、コードがどれほどひどく冗長にならなければならなかったかを覚えているので、私はもうJavaを使用しないことをうれしく思います(もう1年が経ちました)。簡単な例は、例外処理です。コードで例外をスローできる場合は、可能なすべての例外を考慮する必要あります。これにより、些細なコードがすぐに20行以上の怪物に変わります。

コードを開いたままにすることを選択した場合、C#は手に持ったものではなく、開発者として決定します。

C#はまた、年間を通じて多くの追加を行っており、C#を使用するのが楽しくなっています。ラムダ、デリゲート、匿名関数(Rubyのような)、あなたが進むにつれて見つかるたくさんの良い小さなもの。


3
uniからのJavaでは、忘れられない点を覚えています。強制的な例外処理。はい、目的はありましたが、コードのドキュメントには、メソッドが例外をスローするかどうかが示されており、何をするかを選択できます。
-JonWillis

5
ハハ、私はJavaプログラマーですが、あなたのサンプルコードが好きでした。
チャックステファン

6
If your code can throw an exception you must account for every single exception possible.私はこれのマイナス面を見ていない、少なくともこれは問題の認識を高める...しかし、私だけかもしれません。
ボビー

4
チェック例外は、エラー処理コードをメイン実装の一部として作成することを意味します。代わりに、後付けとして追加します。これは保守的にかなり多くのことを意味します。

私はそれが例外が意味することに関する不一致だと思う-それらは予想される状況(ファイルが存在しない)または予期しないエラー(0で割る)であり得る。Javaは、例外が両方を表す必要があると判断したため、チェック済みと未チェックの両方の例外を作成しました。これは驚くほど物議を醸す機能です。
ティコンジャービス

23

私はJava(1996年以降)と.Net(2002年以降)の両方で広範囲に取り組み、2010年には、それが全体として最も生産的な環境であることに基づいて、私の会社でJavaを採用することを決定しました。

ソフトウェア開発の生産性は、エンドツーエンドベースで、コスト/リソースの単位ごとに作成されるビジネスバリューの観点から定義することに注意してください(つまり、ソフトウェアのライフサイクル全体の生産性を検討する必要があります。初期コーディング!!)。

私の推論の重要な要素は次のとおりです。

  • 構文は生産性の小さな要因です-Javaは確かに冗長であり、私はC#の構文を好みますが、それほど重要ではありません。あなたの開発者が入力するかどうobject.getSomeProperty()対をobject.SomePropertyまたはラムダは、単にあなたの会社の競争上の優位性へのかなりの違いを確認するつもりはない対匿名の内部クラスを使用します....
  • ライブラリエコシステムは非常に重要です。最新のソフトウェア製品を開発する場合、多くの一般的なコンポーネントをゼロから開発したくないでしょう。Javaエコシステムには、オープンソースライブラリ(特に、Apache、Google、Eclipse Foundation、RedHat / JBossによって開発されたライブラリ)の数と品質の点で明確な利点があります。
  • 移植性/展開の柔軟性 -安価なLinuxクラスターを含む、ほぼすべてのプラットフォームにJVMを展開できることを知っています。.Netを使用すると、Windows環境に制限されます。クラウドホスティングオプションの進歩により、これは非常に重要な利点であると判断しました。
  • 高度な言語機能が必要な場合、ScalaとClojureはどちらもJVMでの開発に適したオプションです。Javaで開発するのは現実的なオプションですが、時間をかけてScalaまたはClojureに移行するオプションを開いたままにしてください。ある程度、これらは「次世代」言語であり、JavaとC#の両方を先取りしていると思うので、Javaプラットフォームは言語革新の面で良い未来があると安心しました。(Java 7および8は有望に見えましたが、息を止めていませんでした。...)
  • 実際、メンテナンスコストはJavaに対してかなり有利に思えました。Javaの構文はC#より単純です。これは冗長性が高いことを意味しますが、逆に言えば、人々は保守性の高いコードを書く傾向があります。「賢いコード」を書くのは簡単です。さらに、Javaの世界は.Netの世界よりも後方互換性に大きな重みを置いており、これは複数年にわたる保守コストの面で有利になるでしょう。
  • ベンダーの独立性 -過去にベンダーロックインによって企業が焼かれているのを見たことがありますが、Microsoftが支配する.Netの世界ではなく、比較的オープンなJavaエコシステムを採用する方が有利だと感じました。たとえば、SQL Serverを使用してプッシュするのではなく、データベースを選択したいと考えています(ツールサポートと.Net開発者の一般的なスキルセットの両方を通じて、プッシュは非常に強力です)。コア製品投資ベンダーを独立させることは、私の考えでは、賢明な長期的な動きです。OpenJDKがJavaの未来になると判断したので(最終的には正しく)、私は効果的にオープンソースプラットフォームを構築することになりました。
  • 才能 -これは当然主観的ですが、.Netの世界よりもJavaの世界の開発者の技術的能力に感銘を受けました。私の平均的な印象は、.Net開発者はMicrosoftが簡単なツールやテンプレートを提供するものは何でもする傾向があったのに対し、Java開発者はソフトウェアエンジニアリングの観点から適切なソリューションを見つけることを重視する傾向があったということでした。これは完全に主観的であり、特定の地域/市場に依存することは間違いありません。明らかに、このパターンに当てはまらない多くの個人がいたので、もちろんYMMVです。
  • ツールはレベルについてでした。Microsoftには、Windowsでの開発に特に魅力的な、使いやすい優れたツールがたくさんあります。ただし、私は主にサーバー側の開発に取り組んでおり、Javaツールには優位性があると主張しています。特に、MavenはJavaエコシステムで非常に強力なツールであることが証明されていますが、.Netの世界ではこれに相当するものはまだないと思います。

そのため、複雑な考慮事項が数多くありましたが、全体として、Javaを選択することにはかなり満足しており、今日も同じ選択をします(2012年初頭時点)。

おそらく今、.Netを使用するのは、Windows専用のデスクトップアプリケーションを開発している場合だけです(.Netの利点は明らかに大きい)。


9
+1:すばらしい答えです!全体として生産性を評価する際に考慮すべき多くの問題を要約しています。一部の構文糖は、言語をクールでより「モダン」に見せるかもしれませんが、生産性に影響を与える他の重要な要素もあります。
ジョルジオ

3
+1を使用すると、以前よりも包括的な回答が得られます。
NlightNFotis

1
あなたはスカラとClojureのを述べたので、あなたにも...あまりにもF#に言及かもしれない
マウリシオ・シェファー

2
すばらしいです!徹底的な分析。まさに私が探していたもの。:)
xebo

9

私が持っている:Java 10年、C#8年

Javaに投票します

  1. ベンダーロックインなし(アプリ/ WebサーバーをLinuxからWindows、Unixに変更できます)
  2. JasperReports JFreeChart、JSF、Springなどのサードパーティパッケージの相互運用性/互換性
  3. ほとんどの革新はここから来ます(Log4j、Ant、Spring、Hibernateなど)
  4. 複数のアプリケーションサーバー(Aのようなもの)で動作します。JBoss、Tomcat、WebSphere、GlassFish、WebLogicなど

23
ラムダのない言語では、どのような「革新」が可能ですか?
SKロジック

6
ASP MVC(例:MonoRail)の前に他のMVCフレームワークがありました
...-EricSchaefer

2
ああ、ところで:ラムダ/クロージャーは言語機能です。フレームワークについて話しているのです。
EricSchaefer

5
@ SK-logicでは、ラムダがO / Rレイヤーを記述する必要はありません。

2
@Giorgio、ラムダはGCのあらゆる言語に完全に適合します。もちろん、C ++とCにはそれらの場所はありません。
SKロジック

6

Java:5年(非連続)
C#:7年

生産性をそのように定量化できるとは思わない。それは個々の開発者とプロジェクトに大きく依存します。開発者が知っていることを使用してください。

編集:
「典型的なエンタープライズアプリケーション」を次のように定義しましょう。

  • 多層
  • クライアントサーバー
  • DBバックアップ

JavaとC#の両方がそれを実行できます。言語の問題ではなく、フレームワーク/ランタイムの問題です。繰り返しますが、開発者が知っていることを使用してください。彼らは新しい言語と新しいフレームワークを学ぶことができますが、それを理解するには時間がかかります。これはデスクトップアプリにも当てはまります。どちらの言語も多数のGUIツールキット/ライブラリで使用できますが、それらはすべて異なるアプローチと哲学を持っています。


3
「それは個々の開発者に大きく依存します」...それがまさに彼が両方の世界での経験を持つ人々からの意見を望んでいた理由です...そして「プロジェクト」。...さまざまなテクノロジーからどのようなプロジェクトが恩恵を受けるかを指摘する回答が必要です。

4
この開発者(別名私)には依存しませんが、プロジェクトをビルドすることになっている開発者に依存します。また、彼がどのようなプロジェクトを構築しようとしているのかを述べていれば、もっと簡単になります
...-EricSchaefer

@ericそれは典型的なエンタープライズアプリケーションです
エディンDazdarevic

@ Edin、Javaにはエンタープライズ機能が組み込まれたJavaEEエディションがあります。このフレームワークを使用して、アプリケーションをすばやく開発できます。ただし、Magicによって多くの処理が行われますが、そのルールに従う必要があります。スタックトレースが巨大であるため、問題が発生しても例外メッセージが役立つとは期待しないでください。間違った名前でDBにアクセスするか、DBがオフになっていると、スタックトレースが非常に大きくなるため、最初の問題の原因がわかりません。
ジョンウィリス

5
「典型的なエンタープライズアプリケーション」が存在することを確認し、このデータをポイントaから取得し、ユーザーがそれを台無しにしてからポイントbに配置できるようにします。;)
mezmo

6

私はJavaで10年以上の経験があり(バージョン1.1以降)、. NETで7年の経験があります(主にC#)。

非常に決定を下しますが、ほとんどの場合、いくつかのシナリオに分解する必要があります。

デスクトップアプリケーション

デスクトップアプリケーションを開発している場合は、使用する主要なプラットフォームを使用する必要があります。.NETを使用するMicrosoftプラットフォームの場合、母船自体が開発したプラットフォームほど優れたソリューションはありません。Linuxまたはマルチプラットフォームのシナリオの場合は、JavaまたはWebベースのソリューションへの移行を検討してください。

Webベースのアプリケーション

それぞれが独自の長所と短所を持っているため、これは非常に難しい決定です。ここにいくつかあります:

C#

強さ:現在、言語とプラットフォーム/フレームワークに新しい機能を組み込む勢いがあります。すべてが1つのベンダーから提供されており、これは間違いなく利点です。たとえば、DevExpressなどの非常に強力なコンポーネントを使用することもできます(Javaは、DXチームが長年にわたって構築してきたものに近づくことさえできず、これは生産性を大幅に向上させます)。

弱点:エンタープライズアプリケーションの場合、.NETはJavaほど成熟していません。Javaのように.NETでエンタープライズソフトウェアを構築しているベンダーはそれほど多くありません。

Java

強み:より成熟し(既に説明済み)、役立つことができるいくつかの素晴らしいオープンソースプロジェクトがある大きなコミュニティを持っています。いわゆるオープンソースプロジェクトと呼ばれるいくつかの.NETは、実際にはJavaのプロジェクトの単なるコピー猫です。

弱点: OracleはJava(JCPではなく知っている)を所有しており、それは間違いなく考慮すべきリスクです。彼らの意図はあまり明確ではなく、私は個人的に言語が今どこに向かっているのが好きではありません(多くのJava開発者が同様の懸念を持っていることを知っています)。

サーバー側のアプリケーション

基本的にはWebベースのアプリケーションと同じ引数ですが、この場合UI UIが強くなることをあまり心配する必要がないためです。ただし、プラットフォームの大部分がWindows .NETである場合は、より良い選択かもしれません。

全体的な考慮事項

全体として、私の意見では、.NETには、Visual Studio 2010(最高のIDEを継承)、MS SQL、Entity Framework、IISなどが緊密に統合されているため、主に利点があります。これはすべて、生産性の大幅な向上を意味し、私はそれを証明する豊富な経験を持っています。また、ほとんどが.NETに移行したJava開発者と仕事をしており、基本的に同じ意見を共有しています。

また、Microsoftがこれまで以上に強力であることも良い点だと思います。したがって、10〜15年先を見ると、Javaよりも.NETの方が安全だと感じています。


4

私は最近大学を卒業しましたが、両方の言語で商業経験があり、合計で約3年のJavaと4年のC#.Netを提供しています(注.netは、C#、VB.net、C ++ CLI、およびJ#およびF#)。

ここで、全体的な好みはJavaよりもC#ですが、どちらもJavaのクロスOS互換性よりも.Netフレームワークのパワーが好きな類似の構文を持っていると述べます。あなたは何を構築する必要があるかを強く検討する必要がありますか?これは単なるデスクトップアプリケーションですか?他のクライアント、つまり他のデスクトップ、モバイル、Webサイトへの接続が必要ですか?

** Stackoverflowでの質問が終了したため、IDEでの議論は失われました。Javaには多くの無料のIDEがありますが、私の意見では、Visual Studioのパワーやアドオンと比較することはできませんでした。ただし、Visual Studioはライセンスごとに費用がかかります。

開発チームがすでに持っているスキルを確認する必要があります。これは初期の影響があるためです。どちらが速いかは、ここでも言語/フレームワークの経験豊富なユーザーにとってもありません。言語は単なる構文であり、言語が使用しているツールとフレームワークであるため、言語を考慮してはならないという点を私は推測します。


11
VSのライセンスあたり£1000?MSDNサブスクリプションを取得している場合は、はるかに多くのソフトウェアとツールをコストに応じて入手できます。VS2010の小売価格を誰も払っていないのは本当に疑わしい。
ジェームス愛

6
@ Michael、VS拡張機能を作成しようとしたことはありません。ただし、Visual Studioのさまざまなプラグインを使用するか、試しました。これらには、Resharper、CodeRush、Gallio、VisualSVN、AnkhSVN、testDriven.Netなどが含まれます。
-JonWillis

2
@JonWillisは同意しました、そこには多くの拡張機能があります。そのリストの上に、(日常的に)Productivity Power Tools、CKS:Dev for SharePoint、およびWSPBuilderも使用します。ギャラリー(visualstudiogallery.msdn.microsoft.com)には数千のギャラリーがありますので、VSの拡張機能を書くのはそれほど難しくありません(実際には、そうするための完全なフレームワークが提供されており、十分なコミュニティサポートがあります) 。
ジェームズラブ

1
10〜15人年の作業を計画しているプロジェクトの場合、VSライセンスの初期費用はピーナッツです。

1
MSDNを使用しないVisual Studio 2010 Professionalは550ドルです。
ボリスヤンコフ

3

構文とツールの類似性により、C#またはjavaからの生産性の向上は、10〜15人年の作業プロジェクトに大きな違いをもたらすほど大きなものではありません。私は次のような問題をより詳しく見ていきます。

  1. プロジェクトの要件とその要件を満たす言語機能(クロスプラットフォームとリッチWindowsクライアントなど)。
  2. チームが生産的に作業できるようにするためのプロジェクトアプローチ/方法論として何を導入できますか。
  3. 重要なプロジェクトに可能な限り最高のチームを採用し、維持し、完全に活用するために、作業環境について何ができますか。

私の意見では、「(C#とJava)の生産性の違いが、必要な投資と市場投入までの時間に大きく影響する可能性がある」という質問の背後にある前提は真実ではないことをお勧めします。何らかの違いがあるとは思いませんが、重要ではありません。


3

Java 1.2から1.6まで、.NET 1から4.0まで、Javaと.NETを行き来し、約10年以上のプロの仕事経験があります(その前はC / C ++プログラマーでした)。

かつて、.NET 2.0のように、JavaとC#は、特にバックエンドの作業についてはほぼ同じだと思います。言語構成はまだ非常に似ていました。.NETは、おそらくVisual StudioのWinFormsデザイナーのためにデスクトップUIプログラミングで優位に立つでしょう。また、主にIISにこだわっていなかったため、JavaはWeb /サーバー関連で優位に立つでしょう。

.NET 3.5と4に移り、.NETに生産性のエッジを与えます。私の意見では、これは主に、MSがJCPの政治を通じて変化を押し進めるのとは対照的に、MSが比較的迅速に言語決定を行うことができるため、.NETがはるかに高速に進化する言語であるためです。大きな改善点は、varキーワード、Linqの全体、拡張メソッド、ヌル結合演算子??dynamicおよびおそらく多くの素晴らしいもの本当にブーストの生産性。

そうは言っても、プロジェクトの「最も生産的な」言語はほとんどの場合、ほとんどの開発者が最も快適で経験豊富な言語です。学習曲線は常に最大の生産性キラーです。


3

私が気づいたことの1つは、多くのC#/。NETショップが「ここで発明されていない」態度を持ち、すべてのサードパーティ/オープンソースライブラリを禁止する一方で、多くのJavaショップがオープンソースライブラリを使用することを望んでいることです。また、Javaで使用できるライブラリが増えているようです。NHibernate、NPOI、Spring.NETなどの.NETのクールなサードパーティライブラリを見ても、それらはJavaライブラリのポートであるため、それらの背後にあります。確かに、これらの革新の多くはJavaに最初に登場し、その後.NETポートが作成されたようです。ライブラリの観点から見ると、Javaは新しい革新的な発見の点で確かに勝っているようです。

それでも、MicrosoftはASP MVC、LINQなどの公式ライブラリを作成しています。しかし、ASP MVCのように、Struts、Spring MVCなどのサードパーティライブラリがすでにJava向けに出ていて、MicrosoftはモデルビューコントローラーWebパラダイムに遅れをとっていました。

もちろん、これらのライブラリの多くは膨大な時間を節約し、生産性を向上させます。コア言語とコア言語C#とJavaはそれほど違いはなく、私にとってはあまりにも近すぎます。サードパーティライブラリの軍隊を投入すると、規模は確かにJavaに傾いています。それでもオープンショップでは、その傾斜の多くがバランスを取ります。多くの.NETショップはここで発明されていない態度を持っていますが、多くのJavaショップは仕事を成し遂げるために必要なものです...これは私が働いている会社でも当てはまります。 (管理のため)Javaチームには、多くの承認済みのサードパーティライブラリ/ユーティリティがあります。また、.NETでは、多くの優れた機能が無料ではありません(たとえば、Microsoft Officeドキュメントで作業する場合、NPOI以前は、[オフィスオートメーションを考慮しない]ほとんどのソリューションは無料ではありませんでした。


「ここでは発明されていません」。根拠に基づいて?私はC#とJavaを組み合わせて仕事をしていますが、Javaの人々からは、IConverterを作成したり、文字列をdoubleに、またはその逆に変換するロジックを実装するなど、より多くの悪用をしているようです。
ジョージシルバ

いくつかの理由で、私はJavaよりもC#を好みますが、ネイティブC#よりも「移行された」Java To C#ライブラリを好みます。通常は、実世界でよりよく設計、テスト、および適用されます。
umlcat 14年

0

私はこの質問を何度も自問しました。どちらが良いですか?C#またはJava?

私はあなたにアドバイスをします、そしてこのアドバイスは私の研究の結論です:それらのどれもより良くありません、あなたがよく知っていてあなたが多くの魅力的なアプリケーションをすることができる言語だけが最高です。

プログラミングの方法を学び、1つの言語を使用して多くのことを訓練します。それを使用してコードを書くことに完全になり、他の言語について考え、私を信じて、ケーキのような他の言語を学びます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.