あなたは新しいプロジェクトを始めたばかりであり、Javaと.NETの2つのテクノロジーから選択できます。作業中のプロジェクトには、選択しやすい機能が含まれていません。 2つのテクノロジー(例:.NETにはこれが必要であり、Javaはそうではありません)であり、どちらも正常に機能するはずです(もちろん1つしか必要ありません)。
また、Linuxはメインプラットフォームではありませんが、プロジェクトをLinux/MacOにも移植したいと考えています。 OracleとJavaコミュニティとMonoとJavaの制限も同様です。両方の経験を持つ人々が、概要と、自分が選択する理由とその理由についての主観的な見解を提供できれば幸いです。
最も重要な(編集:技術的)決定は次のとおりです。
いいえの場合、Javaを使用する必要があります。
Monoは「はい、.NETはクロスプラットフォームです」と言うのによく使用されます。この主張はどの程度有効ですか? Monoはオプションにすぎない[〜# 〜] iff [〜#〜]あなたはそれに対して開発します!
あなたはできません.NETアプリケーションがそのままで動作することを期待しています。
@Basicは、これは回答というよりコメントであると述べました。正確には、私はリストのtopに進むことが問題だと考えます。これは、おそらく.NETを扱うときに行う必要がある最も重要な技術的な決定だからです。 BasicがMonoに対してテストするつもりであると言っているように、それは不可能です。私はJavaと.NETが同等に適していると考えています。NETの経験はほとんどありませんが、しかしJavaではかなり。
パフォーマンス-Javaは十分に実行されますが、起動時間はかなり長くなります。これは、JVMが初期化されるときに最初から開始され、ランタイムライブラリのjarファイルへのランダムアクセスがかなり少ないためです最近のJava= 6には、ランタイムライブラリのjarファイルをディスクキャッシュに保持しようとするバックグラウンドプロセスがあり、必要なときにアクセスが高速になります。
利用可能なツール。たくさんのツールが存在し、高品質のオープンソースとして利用できるものはたくさんあります。 IBMには非常に高度なツールがいくつかありますが、かなりの費用がかかります。 Javaの世界で最良の部品を組み合わせて生計を立て、低コストでアクセスできるようにするMyEclipseを見て、何が利用可能かを確認することをお勧めします。Netbeansには非常に素晴らしいGUIエディターJDeveloperにはNice SwingデバッガーがありますSun 6 JDKにはVisualVMがあり、これはすでに実行中のプログラムを分析できる素晴らしいエントリーレベルのプロファイラーです(これはキラー機能です)。
プラットフォーム間の互換性。非常に良い、優れている傾向がある。 JVMは非常に信頼性が高く、予測可能です。ファイルセパレーター、ファイル名の大文字と小文字の区別、メニューの動作など、オペレーティングシステムの違いが浸透したときにのみ問題が発生します。
ライブラリ。 多くがあり、それらの多くは自由に利用でき、使用できますが、主にJavaで書かれています。非JVM言語。
費用。 Javaは基本的に自由に利用できます。Oracleが示していることは、JRocketから提供される可能性が最も高いパワーツールはコストがかかることです。また、拡張サポート( "Java for Business")にも注意してください。 x86以外のプラットフォームは絶滅の危機に瀕していますが、IBMには豊富な機能があり、IBMは優れたJava=実装を提供しています。これはオペレーティングシステムの一部として価格設定されています-ほとんどの採用が増える可能性があります。
開発プロセス。 Javaでの多くの時間は、適切なテクノロジーの調査と選択、およびそれの学習に費やされていますが、そうすることで、非常に高速で開発できるテクノロジーがたくさんあると思います。最新バージョンの= Java EEは、少なくともPHPページと同じくらい高速にリロードできるFaceletsを使用して非常に強力なWebページを書き込むことを提供します。
Javaまたは.NETのどちらにも熟練していない場合を除き、あなたはあなたとあなたの組織のテクノロジーを選択することで時間とお金を節約するでしょう最もよく知っています。
OK、これを分解してみましょう:
考慮する:
利用可能なパフォーマンスツール(サードパーティのツールも含む)
Javaと.NETプラットフォームには、十分なパフォーマンステストツールがたくさんあります。Javaスペースには、無料のオープンソースツールがたくさんあることを知っています。 .NET側については話せません。
プラットフォーム間の互換性
Javaにはここでの利点があります。一部のプラットフォームで.NETを実行するには、プロジェクトMono(または類似のプロジェクト)が必要です。 Monoが100%防弾で高性能であるかどうかはわかりませんが、他の誰かがうまくやってくれるといいですね。
ライブラリ(特にサードパーティのライブラリ)
ここではどちらも強力なサポートを得ています。最初はJavaエコシステムが先導します(文字通り、思いつく限りのあらゆるもののための無料のオープンソースライブラリがあります)。しかし、.NETは確かに重要な場所に追いついてきたと思います(永続化のためのNHiberante、2つの基本的なものを示すユニットテストのためのNUnit +メトリックトラックの負荷があると確信しています)。
コスト(OracleはJavaを試して収益化しているようです)
すべての企業はある程度の収益化を試みていますが、Javaの場合、あなたの発言は少し誤解を招くと思います。Javaはバージョン6の時点でオープンソースでした(OpenJDKプロジェクト)とOracleは、収益化する傾向を示していませんJava Sunがやっていたことを超えています。そのため、彼らはアプリサーバーと拡張機能(特に管理拡張機能)をJVMに販売していますが、コア= Java自体?いいえ、彼らはそうしません(これは何度も公に述べられています)。
MSとOracleの両方は、それらの応答性の高いプラットフォームによる間接的な収益により、多大な利益を得ていると思います。
総所有コスト(TCO)?それを証明する方法がないため、私はこの議論に入るつもりはありません(結局、プログラミングは創造的な人間の活動です)。私は個人的に、Java=ベースのシステムは、ほとんどの場合、上から下に無料のオープンソーススタックを利用できるため、初期コストが低い傾向があります。ただし、大企業はサポート契約を結ぶ傾向がありますその特定の利点を無効にすることができます。
開発プロセス(最も簡単/最速)
構築しようとしているものに依存します!個人的には、C#にはコア言語のJavaを超える追加機能がいくつかありますが、(Javaと複数の相互運用可能)言語ではJVM(Groovy、Scala、Clojureなど)では、必要なすべての言語機能を使用できます。
.NETは、しばらくの間(もしあれば迅速なアプリケーション開発)Webフロントエンド 'もの'を構築するための明確な利点がありましたが、JEE6やSpring、および/または他のWeb /アプリフレームワークがそのギャップをかなり閉じたと思います。
また、Linuxはメインのプラットフォームではありませんが、プロジェクトをLinux/MacOにも移植したいと考えています。 OracleとJavaコミュニティとMonoとJavaの制限も同様です。両方の経験を持つ人々が、概要と、選択する理由とその理由についての主観的な見解を提供できれば幸いです。
Linux、UNIX、特にMac OSに移植したい場合、上記のようにJavaにはエッジがあります。
お役に立てば幸いです。
パフォーマンス-均等
どちらのプラットフォームも、ほぼすべてのアプリケーションで非常に優れたパフォーマンスを発揮します。
それらを区別することはあまりありませんが、私の主観的な経験はJavaは長時間実行されるアプリケーションに対してわずかなエッジを持っていますが、.Netはアプリケーションの起動時間に対してより速いです。
利用可能なツール(サードパーティのツールでも)-議論の余地あり
必要なツールや使い慣れたツールによって異なります。
.Netには、Microsoftが提供する優れたツールがいくつかあります。一方、Javaの世界には、Eclipse、IntelliJ環境のNetbeansなど、同じように優れたツールがあります。
クロスプラットフォーム互換性-Java win
.Netは基本的にMicrosoftプラットフォーム(Windows、Xboxなど)に関連付けられています。 完全な実装は、Microsoft以外のプラットフォームでは使用できません。
Monoは素晴らしいですが、すべての.Netライブラリーをサポートしていないため、実際には完全なクロスプラットフォーム機能は提供されません(たとえば、すべてのWindows GUIが正しく機能することを期待できないため、 GTK#などのクロスプラットフォームツールキット。異なるプラットフォームでアプリを実行することはできません)
Javaは本当に移植可能です。言語だけでなく、より重要なこととして、すべてのJavaライブラリは移植可能です。純粋なJavaライブラリ(たとえば、Swing for GUI))に固執すると、コードがJavaランタイム環境があればどこでも実行できます。
ライブラリ(特にサードパーティのライブラリ)-Java win
おそらくJavaプラットフォームの最高の強みは、ライブラリ、特にオープンソースライブラリの広大なエコシステムです。いくつかの例:
コスト(OracleはJavaを試して収益化しているようです)-Javaオープンソースに行けば勝ち、そうでなければ。
100%オープンソースを使用できますJavaスタックは無料で、特定の専用プラットフォームに縛られることはありません。これは100%無料です。
または、IntelliJ IDEAを購入し、WindowsでJava=を実行し、独自のデータベースを使用することもできます。この場合、通常のMicrosoft .NETスタックとコスト面でほとんど同じです。
開発プロセス(最も簡単/最速)-議論の余地あり
これはおそらく、プラットフォームの特定の属性ではなく、各プラットフォームでの開発者の経験に依存します。
.Netには確かに、WindowsでシンプルなGUIアプリを非常に生産的にすることができるいくつかの優れたツールがあります。これは.Net開発の「スイートスポット」であるため、当然のことです。
一方、私はJavaスタックをサーバー側の開発に使用することを好みます。Mavenのようなツールとすべての継続的なデプロイ/統合機能を使用すると、堅牢なサーバー側の非常に効果的な開発プロセスを確立できますアプリ。
言語に関するC#には、Javaよりも生産性に優れた点がいくつかあります。ただし、一方でJavaプラットフォームで開発している場合、最近の傾向はJava自体を使用するのではなく、新しいJVM言語の1つを使用するなどです。 Scala、Groovy、Clojureとして-これを行うと、C#やJavaよりもはるかに生産性が高くなります。
あなたのポイントのリストを考慮に入れて、私は分割されます、そしてそれは本当に私が構築する必要があるものに依存するでしょう。
。Netはこれらの側面で勝利します:
Javaはこれらの側面で勝つ:
これらの側面の引き分けです:
.Netは、あらゆる目的と目的のために、単一のプラットフォームテクノロジースタックです。ええ、Monoはありますが、MonoがWindows実装と100%互換性を持つまでは、真のクロスプラットフォームエクスペリエンスは提供されません。クロスプラットフォームサポートで信頼できる唯一のサブセットは、Silverlightに適合するものです。
とはいえ、.Netはより良い知覚パフォーマンスを持っています(実際の測定は未定)ユーザーの目には、知覚されるパフォーマンスのみが重要です。 Javaで過去12年以上開発し、最近.Netを実行した後、プラットフォームの力を評価できます。
一方、Javaはより豊富なIDEから選択できるように設定されており、これらの優れたIDEのコストは.Netバリエーションのコストよりもはるかに少ないです。一方、コスト専門のJ2EEエンジンは開発環境のコストを簡単に削減します。Netでは、私は死ぬほど微妙に薄暗くなっていると感じています。Javaには、莫大なコストの回避策があります。 IDE以外では、重要なツール(プロファイラー、カバレッジなど)のコストは同等です。
最後に本当に必要性に依存します。とにかく私がWindowsに展開するつもりなら、.Netは簡単です。 Windowsのみのショップであるクライアントがいます。 Unixでの展開に精通している場合、または異種システムをサポートする必要がある場合、Javaは簡単です。過激でさえあり、混合テクノロジースタックを提案しているかもしれません。結局のところ、クライアントがサーバーをUnixにする必要があるからといって、デスクトップ上でサーバーを実行する必要があるわけではありません。
。Net
主観的または非難されることなくこの質問に答えるのは難しいです(私は反対票を投じられるつもりです).Netは上向きの言語であり、Java問題だけでなく、人気が低くなります。
また、今日の.netは、はるかにまとまりのある近代的な言語であり、マルチコア(Parallel.net)と非同期プログラミング(リアクティブ拡張)の優れたサポートを備えています。 .Netには無料のツールも多数ありますが、Visual Studio Express、Sql Server Express、Web Matrixなどです。
Javaにはマルチプラットフォームの利点がいくつかあります。従来のアプリケーションやバックエンドコンポーネントに役立つモノなどの.Netにはいくつかのオプションがありますが、非常に専門的なことをしている場合、いくつかは不明瞭になります(そしてWPFについては平等に議論しないでください)。
クロスプラットフォームが本当に重要な場合のもう1つのオプションは、Silverlightを使用することです。個人的には、Silverlightの「アプリケーション」にはそれほど熱心ではありませんが、少なくとも機能します。
クロスプラットフォームが問題点です。少なくともこの時点で、本当に本当に必要かどうかを自問してください。
私たちの組織では、現時点ではJavaを選択します。その理由は簡単です。私たちのJavaチームは、.NETチームよりも大きく、経験が豊富で、優れたツールです(既存のシステムの保守に十分に拘束されているため、主要な新しいプロジェクトに取り組むためのリソース)。
とはいえ、.NETを使用する差し迫った理由がある場合(クライアントの要件など、一部のお客様は.NETソフトウェアの大規模なインストールベースがあり、新しいシステムをそのベースに適合させ、メンテナンスを自分で引き継ぐことを望んでいる場合があります。など)私たちはそうし、私たち自身の人々を解放することができない仕事をするために請負業者を雇います。
私はどちらのテクノロジーも顧客に最善の利益をもたらすことを強制しません。また、システムを配備するために必要な投資のために、一部の顧客は(内部組織のために)互いにより多くの利益を得るだけです(ここでも、すでにいくつかの.NETアプリケーションを実行していて、それらをサポートするスタッフがいる顧客がいる場合、私たちはそれらを強制的に雇い、ハードウェアとソフトウェアのライセンスを購入してJavaアプリケーション、そしてもちろんその逆も当てはまります。実際、彼らがそれをリクエストとして持ってきた場合は、そうしないようにアドバイスします)。