この時点で、.NETとJavaの間のプロジェクトに何を選択しますか?[閉まっている]


13

新しいプロジェクトを開始したばかりで、Javaと.NETの2つのテクノロジーから選択できます。作業中のプロジェクトには、2つのテクノロジー(たとえば.NETには必要なものがありますが、Javaにはありません)を簡単に選択できる機能は含まれていません。もちろん必要です)。考慮する:

  • 性能
  • 利用可能なツール(サードパーティのツールも含む)
  • クロスプラットフォームの互換性
  • 図書館(特にサードパーティの図書館)
  • コスト(OracleはJavaを収益化しようとしているようです)
  • 開発プロセス(最も簡単/最も速い)

また、Linuxはメインプラットフォームではありませんが、プロジェクトをLinux / MacOにも移植したいことを忘れないでください。OracleとJavaコミュニティを取り巻く問題と、MonoとJavaの制限も忘れないでください。両方に経験のある人が概要と、自分が選択する理由とその理由についての主観的な見解を提供できれば幸いです。

java  .net  mono 

この質問に効果的に答えるには、要件に関する十分な情報がありません。
赤い汚れ

3
モノは苦痛です(タイムシンクなど)。基本的なWinFormデザイナーでさえありません。
仕事

@Jobは実際、MonoDevelopにはGTK#用のGUIデザイナーがいます。WinForms はまだオープンソースではないからです。
マフムードホッサム

はい、しかし、Monoはサードパーティのライブラリとどのように連携していますか?彼らは「うまくいく」のでしょうか?そして(おそらく最も重要なことですが)Monoで使用する場合、ベンダーはサポートを提供しますか?
TMN

回答:


26

最も重要な(編集:技術的な)決定は次のとおりです。

  • この時点で、将来の展開プラットフォームとしてWindowsを使用することを100%コミットしますか?

いいえの場合、Javaを使用する必要があります。


Monoの結論は、「はい、.NETはクロスプラットフォームです」と言うのによく使用されます。その主張はどの程度有効ですか?モノは、あなたがそれに対して開発する唯一のオプションIFFであるということでした!

.NETアプリケーションがすぐに動作することを期待することはできません


@Basicは、これは答えというよりもコメントだと言いました。正確に言えば、これはおそらく.NETを扱うときに行う必要がある最も重要な技術的決定であるため、リストの一番上に行くことは質問だと考えています。BasicがMonoに対してテストすると言っているように、それは邪魔にならないので、Javaと.NETはかなり同等に適していると思います。.NETの経験はほとんどありませんが、Javaについてはかなりの経験があります。

  • パフォーマンス-Javaはかなり良好に動作しますが、それでもかなりの起動時間があります。これは、JVMが初期化されるときにゼロから開始し、ディスクから読み込む必要がある場合、ランタイムライブラリjarファイルのランダムアクセスがかなり遅いためです。最近のJava 6には、ランタイムライブラリjarファイルをディスクキャッシュに保持しようとするバックグラウンドプロセスがあるため、必要なときにアクセスが高速になります。

  • 利用可能なツール。たくさんのツールが存在し、高品質のオープンソースとして利用できるものがたくさんあります。IBMにはいくつかの非常に高度なツールが用意されていますが、かなりの費用がかかります。Javaの世界で最高のパーツを集めて生計を立て、低価格でアクセスできるMyEclipseを見て、入手可能なものを確認することができます。Netbeansには非常に優れたGUIエディターがあります。JDeveloperには、優れたSwingデバッガがあります。Sun 6 JDKには、すでに実行中のプログラム(キラー機能)を分析できる優れたエントリーレベルのプロファイラーであるVisualVMがあります。

  • クロスプラットフォームの互換性。非常に良い、優れた傾向がある。JVMは、非常に信頼性が高く、予測可能です。ファイルセパレーター、ファイル名の大文字と小文字の区別、メニューの動作など、オペレーティングシステムの違いが浸透する場合にのみ問題が表示されます。

  • ライブラリ。あり、多くの、自由に利用可能と利用可能であるが、非JVM言語で書かれたコードで引っ張ってかなり困難であるとして、主にJavaで書かれたそれらの多くは。

  • 費用。Javaは基本的に無料で利用できます。オラクルが示唆しているのは、JRocketから提供される可能性が高い電動工具にはコストがかかるということです。また、拡張サポート(「Java for Business」)も有償で提供されることに注意してください。非x86プラットフォームは絶滅の危機にareしていますが、IBMには豊富な機能があり、IBMは優れたJava実装を提供しています。これは、オペレーティングシステムの一部として価格設定されています。これは、採用の可能性が高いためです。

  • 開発プロセス。Javaでの多くの時間は、適切なテクノロジーの調査と選択、および学習に費やされますが、それが完了すると、非常に高速に開発できるテクノロジーがたくさんあると思います。Java EEの最新バージョンでは、Faceletsを使用して非常に強力なWebページを作成できます。これは、少なくともPHPページと同じ速度でリロードできます。

Javaと.NETのどちらにも精通していない限り、あなたとあなたの組織が最も精通しているテクノロジーを選択することで時間とお金節約できると思います。


14
Windowsで作成したJavaプログラムがどこでも実行されることを誰が保証しますか?単一のJNI呼び出しだけでその保証を破ります。同じ問題がCLIにもあります。非クロスプラットフォームAPIを使用すると、移植性が失われます。したがって、移植性を保証できるのは、使用しているフレームワークに関係なく、プログラマーだけです。
マークH

3
@Thorbjørn、現在の気候でOracleを信頼しますか?
radekg

12
+1するThorbjörnはあなたがいないのであれば、100%はあなたがいることをWindowsにコミットしていること言ったので、すべきであるあなたがいることを、Javaを使用しないで行かなければならないのJavaで行きます。そして、私は同意します-はい、Monoはフォールバックとして存在しますが、現在の計画がWindowsにコミットされていない場合、苦痛を軽減し、他のプラットフォームで実行することを目的としたテクノロジーを使用してください。そして、私はこれを.NET開発者および.NET愛好家と言います。
Carson63000

4
実際にしている「モノが存在する・オン・その他」-downvotersのいずれかがある場合、私は思っていた試みたそれをやっては...

4
「Javaは基本的に自由に利用可能である(...)電動工具はコストになります(...)exendedサポートも価格のために来て」。.NETでもまったく同じですよね?
コナミマン

19

OK、これを分解してみましょう:

考慮する:

利用可能なパフォーマンスツール(サードパーティツールも含む)

Javaプラットフォームと.NETプラットフォームの両方には、多数の優れたパフォーマンステストツールが用意されています。Javaの分野では、ほとんどのシナリオに適した無料のオープンソースツールが十分にあることがわかります。.NET側について話すことはできません。

クロスプラットフォームの互換性

ここでJavaには利点があります。一部のプラットフォームで.NETを実行するには、プロジェクトMono(または同様のもの)が必要です。Monoが100%防弾性能を備えているかどうかはわかりませんが、うまくいけば、他の誰かが口にすることができます。

図書館(特にサードパーティの図書館)

ここでは両方とも強力なサポートがあります。最初はJavaエコシステムが先頭を走っています(文字通り、考えられる限りのあらゆるものに対応する無料のオープンソースライブラリがあります)。 2つの基本的なものに名前を付けます+メトリックトラックロードがもっとあると確信しています)。

コスト(OracleはJavaを収益化しようとしているようです)

すべての企業はある程度収益化を試みますが、Javaの場合、あなたの声明は少し誤解を招くと思います。Javaはバージョン6(OpenJDKプロジェクト)の時点でオープンソースであり、OracleはSunが行っていること以上にJavaを収益化する傾向はありませんでした。はい、彼らはアプリサーバーとJVMの拡張機能(特に管理拡張機能)を販売していますが、Java自体はコアですか?いいえ、彼らは決してしません(これは何度も公表されています)。

MSとOracleの両方は、その代表的なプラットフォームでの間接的な収益により大きな利益を得ると思います。

総所有コスト(TCO)?それを証明する方法がないので、私はこの議論に参加するつもりはありません(結局、プログラミングは創造的な人間の活動です)。個人的には、ほとんどの場合、無料のオープンソーススタックを上から下に利用できるため、Javaベースのシステムは初期コストが低くなる傾向があると思います。ただし、大企業は、その特定の利点を無効にすることができるように、サポート契約を好む傾向があります。

開発プロセス(最も簡単/最も速い)

構築しようとしているものに依存します!私は個人的には、それらはほぼ均一であると主張しますが、C#には現時点でJavaよりもコア言語にいくつかの追加機能があります。ただし、JVMの(Javaと複数の相互運用が可能な)言語(Groovy、Scala、Clojureなど)では、必要なすべての言語機能を使用できます。

.NETには、しばらくの間Webフロントエンドの「もの」を構築するという明確な利点がありました(必要に応じて、Rapid Application Development)。

また、Linuxはメインプラットフォームではありませんが、プロジェクトをLinux / MacOにも移植したいことを忘れないでください。OracleとJavaコミュニティを取り巻く問題と、MonoとJavaの制限も忘れないでください。両方に経験のある人が概要と、自分が選択する理由とその理由についての主観的な見解を提供できれば幸いです。

Linux、UNIX、特にMac OSに移植する場合、前述のようにJavaには優位性があります。

お役に立てば幸いです!


4

あなたのポイントのリストを考慮して、私は分割され、それは本当に私が構築する必要があるものに依存します。

.Netはこれらの側面で勝ちます:

  • 性能
  • 開発プロセス(最も簡単/最も速い)

Javaはこれらの側面で勝ちます。

  • クロスプラットフォームの互換性
  • 図書館(特にサードパーティの図書館)

これらの側面の引き分けです。

  • コスト(OracleはJavaを収益化しようとしているようです)
  • 利用可能なツール(サードパーティのツールも含む)

.Netは、すべての意図と目的において、単一のプラットフォームテクノロジースタックです。はい、Monoがありますが、MonoがWindows実装と100%互換になるまで、真のクロスプラットフォームエクスペリエンスは提供されません。クロスプラットフォームサポートに期待できる唯一のサブセットは、Silverlightに適合するものです。

そうは言っても、.Netの方がパフォーマンスがよく認識されています(実際の測定値は未定)。ユーザーの目には、知覚されるパフォーマンスだけが重要です。過去12年以上Javaで開発し、最近.Netを開発した後、プラットフォームの力に感謝することができます。

一方、Javaには豊富なIDEセットがあり、これらの優れたIDEのコストは.Netバリエーションのコストよりはるかに低くなっています。一方、プロ仕様のJ2EEエンジンのコストは、開発環境のコストを簡単に削減します。.Netでは、私は死に刻まれているという認識を持っています。Javaには、莫大なコストに対する回避策があります。これは、開発者がそれらをセットアップする時間で簡単に補うことができます。IDEの外部では、重要なツール(プロファイラー、カバレッジなど)のコストは等しくなります。

最終的にそれは本当に必要に依存します。とにかくWindowsに展開する場合、.Netは簡単です。Windowsのみのショップであるクライアントがいます。私がUnixにデプロイすることに精通している場合、または異種システムをサポートする必要がある場合、Javaは簡単です。私も急進的であり、混合技術スタックを提案するかもしれません。結局のところ、クライアントがサーバーがUnixであることを要求しているからといって、デスクトップ上でそれを実行するわけではありません。すべてのアプリケーションがWebアプリに最適なわけではありません。


4

パフォーマンス -偶数

両方のプラットフォームは、ほぼすべてのアプリケーションで非常に優れたパフォーマンスを発揮します。

私の主観的な経験では、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プラットフォームの最大の強みは、ライブラリ、特にオープンソースライブラリの広大なエコシステムです。いくつかの例:

  • すべてのApacheライブラリとツール
  • 広大なEclipseエコシステムのすべてのライブラリ
  • Googleが寄稿/保守しているすべてのライブラリ
  • JBossおよびRed Hatが管理するすべての関連エンタープライズツール

コスト(オラクルはJavaを収益化しようとしているようです -オープンソースにすればJavaが勝ち、そうでなければ偶数になります。

100%オープンソースのJavaスタックを使用できます。これは無料であり、特定の専用プラットフォームに縛られることはありません。これは100%無料です。

または、IntelliJ IDEAを購入し、WindowsでJavaを実行し、独自のデータベースを使用することもできます。この場合、通常のMicrosoft .NETスタックとほぼ同じコストです。

開発プロセス(最も簡単/最も速い) -議論の余地あり

これはおそらく、プラットフォームの特定の属性ではなく、各プラットフォームでの開発者の経験に依存します。

.Netには確かに、Windows上のシンプルなGUIアプリの生産性を高めることができる優れたツールがいくつかあります。これは.Net開発の「スイートスポット」であるため、驚くことではありません。

その一方で、サーバー側の開発にはJavaスタックを好みます。Mavenなどのツールとすべての継続的な展開/統合機能を使用すると、堅牢なサーバー側アプリの非常に効果的な開発プロセスを確立できます。

言語に関するC#には、Javaよりも生産性の面でいくつかの利点があります。しかし一方で、現在Javaプラットフォームで開発している場合は、Java自体を使用するのではなく、Scala、Groovy、Clojureなどの新しいJVM言語の1つを使用する傾向があります。 C#またはJavaよりも。


3

。ネット

主観的でもフレームベイト的でもないままこの質問に答えることは難しいですが、.Netは上昇傾向にある言語であり、Javaは法的な問題や人気の低さで動きが取れなくなっているようです。

また、今日の.netは、マルチコア(Parallel.net)と非同期プログラミング(リアクティブエクステンション)の優れたサポートを備えた、はるかにまとまりのある最新の言語です。.Netには多数の無料ツールもありますが、Visual Studio Express、Sql Server Express、Web Matrixなどがあります。

Javaがマルチプラットフォームの利点をいくつか持っているのは事実です。従来のアプリケーションやバックエンドコンポーネントに役立つ可能性のあるモノなどの.Netのオプションがいくつかありますが、非常に特殊なことをしている場合は不確かになります(そしてWPFについては議論しません)。

クロスプラットフォームが本当に重要な場合のもう1つのオプションは、Silverlightを使用することです。

クロスプラットフォームは苦痛のポイントであり、少なくともこの時点で本当に必要かどうかを自問してください。


.Netを優先することは悪いことではありません。私は実際にそれがとても好きです。現時点でJavaがアイデンティティの危機に直面していることは間違いありません。これは残念なことです。私もそのプラットフォームが好きです。Javaのクロスプラットフォーム(+1)の改善された実績を認めてくれてうれしいです。一部のクライアントはUnix展開を必要とし、他のクライアントはWindows展開を必要とします。Javaユーザーは両方のプラットフォームに対応できますが、.Netは実際にはWindowsに制限されています。とは言っても、Windows専用のクライアントはたくさんあります。
ベリンロリチュ

1

私たちの組織では、この時点でJavaを選択します。その理由は簡単です:Javaチームは、.NETチームよりも大きく、経験が豊富で、優れたツールを備えています(既存のシステムのメンテナンスにも十分に拘束されているため、主要な新しいプロジェクトに対応するリソースが不足しています) 。
ただし、.NETを使用する差し迫った理由がある場合(たとえば、クライアントの要件、一部のお客様は.NETソフトウェアの大規模なインストールベースを持ち、新しいシステムをそのベースに適合させ、メンテナンス自体を引き継ぐなど)そうして、請負業者を雇って、私たちが自分の人々を解放できない仕事をするようにします。
お客様の利益のためにどちらのテクノロジーもお客様に強制することはありません。一部のお客様は、システムを展開するために必要な投資のために(社内組織のおかげで)互いに利益を得るだけです(もう一度言います。多くの.NETアプリケーションを実行しており、それらをサポートするスタッフがいます。Javaアプリケーションをサイドで実行するために人を雇い、ハードウェアとソフトウェアのライセンスを購入するように強制するつもりはありません。私たちは実際に、彼らがリクエストとして私たちのところに来た場合、そうしないようにアドバイスします)。

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