web-dev-qa-db-ja.com

Java対C#-生産性の観点

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

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

私の経験は、JavaでのX年の経験と、C#/。NETでのX年の経験に基づいています。Javaは、C#.NETよりもX%生産性が高いまたはC#/。NETは、次の点を考慮に入れると、JavaよりもX%生産性が高くなります。

34
Edin Dazdarevic

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

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

17
mlk

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

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

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

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

率直に言って、Java(もう1年以上になります)を使用しなくなったのはうれしいです。コードが非常に冗長である必要があったことを覚えているからです。簡単な例は例外処理です。あなたのコードcan例外を投げますあなたmust可能なすべての例外を考慮に入れますこれは、ささいなコードをすぐに20行以上の怪物に変えます。

C#は、コードを開いたままにすることを選択した場合、開発者として決定する必要があります。

また、C#は1年間で多くの追加を行っており、使用するのが楽しいものになっています。ラムダ、デリゲート、匿名関数(Rubyの1つ)など、たくさんの便利な機能があります。

43
Sergio

私は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よりも比較的オープンなJavaエコシステムを採用することが有利だと感じました支配された。ネットの世界。たとえば、SQL Serverを使用するのではなく、データベースを選択したいと思います(そして、ツールのサポートと.Net開発者の典型的なスキルセットの両方により、Pushは非常に強力です)。コア製品の投資ベンダーを独立させることは、私の見解では長期的に賢明なことです。私はOpenJDKがJavaの未来であると(正確に言えば正しく)判断したので、私は事実上、オープンソースプラットフォームを構築することになります。
  • Talent-これはもちろん主観的ですが、.Netの世界よりもJavaの世界の開発者の技術力に感銘を受けました。私の平均的な印象は、.Net開発者は、Microsoftが提供する簡単なツールやテンプレートを何でもする傾向があったのに対し、Java開発者は、ソフトウェアエンジニアリングの観点から適切なソリューションを見つけることにもっと注意を払う傾向があったということです。これは完全に主観的なものであり、特定の地域や市場に依存していることは間違いありません。明らかにこのパターンに適合しない個人が多かったので、もちろんYMMVです。
  • ツールはほぼレベルでした。マイクロソフトには、Windowsでの開発に特に魅力的な、便利で使いやすいツールがたくさんあります。ただし、私は主にサーバー側の開発に取り組んでおり、Javaツールにはエッジがあると主張します。特に、MavenはJavaエコシステムにおいて非常に強力なツールであることが証明されており、.Netの世界ではまだ相当の機能があるとは思いません。

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

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

24
mikera

私は持っています: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など
9
pat

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

あなたは決定を下すという非常に徹底的な決断を下していますが、ほとんどの場合、いくつかのシナリオに分解するようにしてください。

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

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

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

それぞれに長所と短所があるため、これは非常に難しい決断です。ここにいくつかあります:

C#

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

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

Java

Strength:より成熟しており(すでに説明済み)、大きなコミュニティがあり、役立ついくつかの優れたオープンソースプロジェクトがあります。いくつかの.NETと呼ばれるオープンソースプロジェクトは、実際にはJavaからのプロジェクトの単なる複製です。

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

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

これは基本的にWebベースのアプリケーションと同じ引数ですが、UIについてあまり心配する必要がないため、この場合はJavaが強くなります。しかし、繰り返しになりますが、プラットフォームが主にWindowsである場合は、.NETの方が適しています。

全体的な考慮事項

全体として、私の意見では、.NETはVisual Studio 2010(そこから最高のIDEを引き継ぐ)、MS SQL、Entity Framework、IISの緊密な統合が主な理由です。等々。これはすべて生産性が大幅に向上することを表しており、私はそれを証明する多くの経験を持っています。また、.NETに目を向けたほとんどのJava開発者とも協力しており、基本的に同じ意見を共有しています。

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

6
Alex

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

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

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

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

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

6
EricSchaefer

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

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

** IDE Stackoverflowでの質問がクローズされたため、IDE $ ===の議論は終了しました。終了の要点はJavaには多くの無料IDEがありますが、私の意見では比較されませんビジュアルスタジオのパワーとアドオンですが、ビジュアルスタジオはライセンスあたりのコストよりも高いことに注意してください。

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

4
JonWillis

Javaと.NETの間で、Java 1.2から1.6まで、.NET 1から4.0まで、約10を超えて、長年のプロとしての実務経験(それ以前はC/C++プログラマーであった)。

かつて、.NET 2.0のように、JavaとC#は、特にバックエンドの作業ではほぼ同じでした。言語の構成は依然として非常に似ていました。NETはVisual StudioのWinFormsデザイナーのために、おそらくデスクトップUIプログラミングでEdgeを獲得し、Javaは、主にIISに悩まされていなかったため、Web /サーバーのEdgeを備えていたでしょう。

今度は.NET 3.5と4に移行し、生産性をEdgeから.NETに直接提供します。これは主に私の意見です。NETは、JCPの政治を通じて変更をプッシュするのではなく、MSが比較的迅速に言語の決定を行うことができるため、はるかに迅速に進化する言語です。大きな改善点は、varキーワード、Linq全体、拡張メソッド、Null融合演算子??dynamic、そしておそらく生産性を大幅に向上させるはるかに優れた機能です。

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

3
rally25rs

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

それでもマイクロソフトはいくつかの公式ライブラリを作成しています。 ASP MVC、LINQなど。ただし、ASPとよく似ているStruts、Spring MVCなどのMVCサードパーティライブラリは、すでにJavaおよびMicrosoftで使用されています。モデルビューコントローラーのWebパラダイムに遅れて入った。

もちろん、これらのライブラリの多くは時間を大幅に節約し、生産性を高めます。コア言語からコア言語へのC#とJavaはそれほど変わらないので、私にとっては、あまりにも近すぎます。サードパーティのライブラリの軍隊に投入すると、規模は確かにJavaに傾く。それでもオープンショップでは、その傾向の多くがバランスします。多くの。[NETショップ]はここで発明されていない態度をとっていますが、多くのJavaショップは仕事を成し遂げるために必要なものです...これは私が働いている会社でさえも当てはまります。 NETチームは(管理のため)それほど多くはありませんが、Javaチームは承認されたサードパーティのライブラリ/ユーティリティを多数持っています。また、.NETでは多くの優れたものが無料ではありません(たとえば、Microsoft Officeドキュメントで作業したい場合、NPOIの前に、ほとんどのソリューション[Office Automationを含まない]は無料ではありませんでした。一方、Java 2001年以来POIがあった2008年までNPOIが出たとは思いません。npoiプロジェクトサイトから判断するのは困難です。

3
Cervo

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

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

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

3
AlexC

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

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

プログラムの方法を学び、1つの言語を使用して多くのことを自分でトレーニングします。それを使ってコードを書くのが完璧になったら、他の言語について考え、私を信じて、あなたは簡単に他の言語を学びます。

0
Salah