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%生産性が高くなります。
私の経験は、Javaでの10年の経験と、C#/。NETでの3年の経験に基づいています。Javaは、C#.NETよりも生産性が0%高いです。 。これは、バックエンドサービスベースのアプリケーションの記述に基づいています。
C#/。NETはJavaユーザーアプリケーションの記述よりも5%生産性が高いです。しかし、Javaと新しいNetbeans UIエディターがギャップを埋めた可能性があります。
あなたは生産性を高めたいですか? [〜#〜] ci [〜#〜] (理想的には継続的デリバリー)および自動テスト。主要な言語/プラットフォーム/ IDEでの言語/プラットフォーム/ IDEの選択によって得られる生産性はかなり小さいです。
大学と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つ)など、たくさんの便利な機能があります。
私はJava(1996年以降)と.Net(2002年以降)の両方で広範囲に働き、2010年にJavaを採用することを決定全体的に最も生産的な環境になります。
ソフトウェア開発の生産性は、コスト/リソースの単位ごとに作成されるビジネスバリューの観点から、エンドツーエンドで定義することに注意してください(つまり、展開とメンテナンスだけでなく、ソフトウェアライフサイクル全体の生産性を検討する必要があります。初期コーディング!!)。
ここに私の推論の重要な要素があります:
object.getSomeProperty()
とobject.SomeProperty
のどちらを入力しても、ラムダではなく匿名の内部クラスを使用しても、会社の競争上の優位性に大きな違いはありません。したがって、多くの複雑な考慮事項がありましたが、全体として、Javaを選択することにかなり満足しており、今日も同じ選択をします(2012年の初め現在)。
おそらく私が.Netを使う唯一のケースは、Windows専用のデスクトップアプリケーションを開発している場合でしょう(.Netの利点は明らかに巨大です)。
私は持っています:Java 10年、C#8年
私はJavaのために投票します
私は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よりも安全だと感じます。
Java:5年(非連続)
C#:7年
その方法で生産性を定量化できるとは思いません。それは、個々の開発者とプロジェクトに大きく依存します。開発者が知っていることを使用します。
編集:
「一般的なエンタープライズアプリケーション」を次のように定義してみましょう。
JavaとC#の両方がそれを行うことができます。それは言語の問題ではなく、フレームワーク/ランタイムの問題です。繰り返しますが、開発者が知っていることを使用してください。開発者は新しい言語と新しいフレームワークですが、それを理解するには時間がかかります。デスクトップアプリの場合も同様です。どちらの言語も、多数のGUIツールキット/ライブラリで使用できますが、アプローチと哲学はすべて異なります。
私は最近大学を卒業しましたが、両方の言語で商業的な経験があり、合計で約3年Javaおよび4年C#.Net(注.netは、 C#、VB.net、C++ CLI、J#およびF#)。
私の全体的な好みはJavaよりもC#ですが、どちらも同様の構文を持っていますが、JavaのOS間の互換性よりも.Netフレームワークの力が好きです。何を構築する必要があるかを強く検討する必要がありますか?これは単なるデスクトップアプリケーションですか?他のクライアント、つまり他のデスクトップ、モバイル、ウェブサイトへの接続が必要ですか?
** IDE Stackoverflowでの質問がクローズされたため、IDE $ ===の議論は終了しました。終了の要点はJavaには多くの無料IDEがありますが、私の意見では比較されませんビジュアルスタジオのパワーとアドオンですが、ビジュアルスタジオはライセンスあたりのコストよりも高いことに注意してください。
開発チームが既に持っているスキルを確認する必要があります。これは、初期の影響があるためです。どちらがより速いかは、ここでも、言語/フレームワークの経験豊富なユーザーにも与えられていません。言語は単なる構文であり、言語が使用しているツールとフレームワークであるため、言語を考慮してはならないということを私は思います。
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
、そしておそらく生産性を大幅に向上させるはるかに優れた機能です。
つまり、プロジェクトの「最も生産的な」言語は、ほとんどの開発者が最も快適で経験豊富な言語です。学習曲線は、常に最大の生産性キラーです。
私が気付いたのは、多くの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プロジェクトサイトから判断するのは困難です。
構文とツールが類似しているため、C#またはJavaのいずれかによる生産性の向上は、10〜15人年の作業プロジェクトに大きな違いをもたらすものではありません。次のような問題についてより詳しく説明します。
私の意見では、質問の背後にある前提として、「(C#とJava)の生産性の違いが必要な投資と市場投入までの時間に大きく影響する可能性がある」というのは真実ではないことをお勧めします。多少の違いはあると思いますが、重要ではありません。
私はこの質問を何度も自問しました:どちらが良いですか? C#またはJava?
私はあなたにアドバイスをします、そしてこのアドバイスは私の研究の結論です:それらのどれもより良くなくて、あなたがよく知っている言語とあなたが多くの魅力的なアプリケーションを行うことができることが最善です。
プログラムの方法を学び、1つの言語を使用して多くのことを自分でトレーニングします。それを使ってコードを書くのが完璧になったら、他の言語について考え、私を信じて、あなたは簡単に他の言語を学びます。