Sie starten gerade ein neues Projekt und haben die Wahl zwischen den beiden Technologien Java und .NET. Das Projekt, an dem Sie arbeiten, beinhaltet keine Funktionen, die die Auswahl zwischen den beiden Technologien vereinfachen (z. B. .NET benötigt diese und Java nicht), und beide sollten für Sie (wenn auch nur für Sie) einwandfrei funktionieren brauche natürlich einen). Berücksichtigen:
- Performance
- Verfügbare Tools (auch Tools von Drittanbietern)
- Plattformübergreifende Kompatibilität
- Bibliotheken (insbesondere Bibliotheken von Drittanbietern)
- Kosten (Oracle scheint zu versuchen, Java zu monetarisieren)
- Entwicklungsprozess (am einfachsten / am schnellsten)
Denken Sie auch daran, dass Linux nicht Ihre Hauptplattform ist, aber Sie möchten Ihr Projekt auch auf Linux / MacOs portieren. Sie sollten auf jeden Fall die Probleme berücksichtigen, die sich um Oracle und die Java-Community gedreht haben, sowie die Einschränkungen von Mono und Java. Es wäre sehr dankbar, wenn Menschen mit Erfahrung in beiden Bereichen einen Überblick und ihre eigene subjektive Meinung darüber geben könnten, welche sie wählen würden und warum.
Antworten:
Die wichtigste (redaktionelle: technische) Entscheidung ist:
Wenn nein, sollten Sie sich für Java entscheiden.
Die Schlussfolgerung von Mono wird häufig als "Ja, .NET ist plattformübergreifend" bezeichnet. Wie berechtigt ist diese Behauptung? nur eine Option war , dass Mono ist IFF Sie dagegen entwickeln!
Sie können nicht erwarten, dass .NET-Anwendungen sofort funktionieren.
@ Basic sagte, dass dies eher ein Kommentar als eine Antwort sei. Um genau zu sein, halte ich es für eine Frage, ganz oben auf der Liste zu stehen, da dies möglicherweise die wichtigste technische Entscheidung ist, die Sie beim Umgang mit .NET treffen müssen. Wie Basic sagt, testet er gegen Mono, dann ist das nicht im Weg und ich würde Java und .NET als ziemlich gleich gut geeignet betrachten. Ich habe sehr wenig Erfahrung mit .NET, aber ziemlich viel in Java.
Leistung - Java läuft ziemlich gut, hat aber noch ziemlich viel Startzeit. Dies liegt daran, dass eine JVM bei der Initialisierung von vorne beginnt und der wahlfreie Zugriff auf die JAR-Datei der Laufzeitbibliothek eher langsam ist, wenn sie von der Festplatte eingelesen werden muss. Neuere Java 6-Versionen verfügen über einen Hintergrundprozess, mit dem versucht wird, die JAR-Dateien der Laufzeitbibliothek im Festplatten-Cache zu speichern, sodass bei Bedarf ein schneller Zugriff möglich ist.
Werkzeuge zur Verfügung. Es gibt eine Vielzahl von Tools und eine Vielzahl von Open Source-Produkten in hoher Qualität. IBM verfügt über einige sehr fortschrittliche Tools, die jedoch auch viel Geld kosten. Vielleicht möchten Sie einen Blick auf MyEclipse werfen, das von der Zusammenstellung der besten Teile der Java-Welt lebt und diese kostengünstig zur Verfügung stellt, um zu sehen, was verfügbar ist. Netbeans hat einen sehr schönen GUI-Editor. JDeveloper hat einen schönen Swing-Debugger. Das Sun 6 JDK verfügt über VisualVM, einen netten Einstiegsprofiler, mit dem bereits laufende Programme analysiert werden können (eine Killerfunktion).
Plattformübergreifende Kompatibilität. Sehr gut, eher ausgezeichnet. Die JVM ist sehr, sehr zuverlässig und vorhersehbar. Probleme werden nur angezeigt, wenn Unterschiede zwischen Betriebssystemen auftreten, wie z. B. Dateitrennzeichen, Groß- und Kleinschreibung von Dateinamen und Menüverhalten.
Bibliotheken. Es gibt viele davon, die frei verfügbar und verwendbar sind, aber hauptsächlich in Java geschrieben sind, da es ziemlich schwierig ist, in Nicht-JVM-Sprachen geschriebenen Code einzugeben.
Kosten. Java ist grundsätzlich frei verfügbar. Was Oracle angibt, ist, dass die Elektrowerkzeuge - höchstwahrscheinlich von JRocket - kostenpflichtig sind. Beachten Sie auch, dass der erweiterte Support ("Java for Business") ebenfalls kostenpflichtig ist. Nicht-x86-Plattformen sind eine aussterbende Rasse, aber IBM hat viele und IBM bietet eine hervorragende Java-Implementierung für sie. Dies wird als Teil des Betriebssystems bewertet - höchstwahrscheinlich für eine bessere Übernahme.
Entwicklungsprozess. Es wird viel Zeit mit Java verbracht, um die geeignete Technologie zu erforschen, auszuwählen und zu erlernen, aber wenn dies erledigt ist, gibt es meiner Meinung nach viele Technologien, mit denen man sich recht schnell entwickeln kann. Die neueste Version von Java EE ermöglicht das Schreiben sehr leistungsfähiger Webseiten mit Facelets, die mindestens so schnell wie PHP-Seiten neu geladen werden können.
Ich glaube , dass , wenn Sie nicht in keinem der beiden Java oder .NET qualifiziert sind, Sie werden Zeit und Geld durch die Wahl der Technologie sparen Sie und Ihre Organisation sind die am besten vertraut.
quelle
OK, lassen Sie uns versuchen, dies zu brechen:
Sowohl auf der Java- als auch auf der .NET-Plattform stehen viele gute Leistungstest-Tools zur Verfügung. Ich weiß, dass es im Java-Bereich viele kostenlose Open Source-Tools gibt, die für die meisten Szenarien geeignet sind. Ich kann nicht für die .NET Seite sprechen.
Java hat hier einen Vorteil - Projekt Mono (oder ähnliches) wird benötigt, um .NET auf einigen Plattformen zum Laufen zu bringen. Ich bin mir nicht sicher, ob Mono 100% kugelsicher und performant ist.
Beide haben hier starke Unterstützung. Anfänglich war das Java-Ökosystem führend (es gibt buchstäblich eine kostenlose Open-Source-Bibliothek für fast alles, was Sie sich vorstellen können), aber ich würde sagen, dass .NET auf jeden Fall aufgeholt hat, worauf es ankommt (NHiberante für Persistenz, NUnit für Komponententests) um zwei grundlegende zu nennen + ich bin sicher, dass es eine metrische LKW-Ladung mehr gibt).
Alle Unternehmen versuchen, bis zu einem gewissen Grad Geld zu verdienen, aber im Falle von Java halte ich Ihre Aussage für etwas irreführend. Java war ab Version 6 (dem OpenJDK-Projekt) Open-Sourcing-fähig, und Oracle hat keine Neigung gezeigt, Java über das hinaus zu monetarisieren, was Sun tat. Also verkaufen sie ja App-Server und Erweiterungen an die JVM (insbesondere Verwaltungserweiterungen), aber Kern-Java selbst? Nein, und das werden sie nie (das wurde schon oft öffentlich gesagt).
Ich denke, sowohl MS als auch Oracle profitieren massiv von indirekten Einnahmen mit ihren jeweiligen Plattformen.
Gesamtbetriebskosten (TCO)? Ich werde nicht einmal in diese Debatte einsteigen, da es keine Möglichkeit gibt, dies zu beweisen (Programmierung ist schließlich eine kreative menschliche Aktivität). Ich persönlich glaube, dass Java-basierte Systeme tendenziell niedrigere Anfangskosten verursachen, da Sie in den meisten Fällen einen kostenlosen Open-Source-Stack von oben nach unten nutzen können. Große Unternehmen bevorzugen jedoch Supportverträge, um diesen besonderen Nutzen zunichte zu machen.
Kommt darauf an, was du bauen willst! Ich persönlich würde behaupten, dass sie ziemlich ausgeglichen sind, obwohl C # im Moment einige zusätzliche Funktionen in der Hauptsprache über Java hat. Mit den (mehrfach mit Java kompatiblen) Sprachen der JVM (Groovy, Scala, Clojure usw.) können Sie jedoch alle gewünschten Sprachfunktionen nutzen.
.NET hatte einen entscheidenden Vorteil für das Erstellen von Web-Front-End-Inhalten für eine Weile (Rapid Application Development, wenn Sie so wollen), aber ich denke, JEE6 und / oder Spring und andere Web- / App-Frameworks haben diese Lücke so ziemlich geschlossen.
Wenn Sie auf Linux, UNIX und insbesondere Mac OS portieren möchten, hat Java, wie oben erwähnt, einen Vorteil.
Ich hoffe, das hilft!
quelle
Unter Berücksichtigung Ihrer Punkteliste würde ich aufgeteilt und es würde wirklich davon abhängen, was ich bauen muss.
.Net gewinnt für diese Aspekte:
Java gewinnt für diese Aspekte:
Es ist ein Unentschieden für diese Aspekte:
.Net ist in jeder Hinsicht ein einzelner Plattform-Technologie-Stack. Ja, es gibt Mono, aber solange Mono nicht zu 100% mit der Windows-Implementierung kompatibel ist, bietet es keine echte plattformübergreifende Erfahrung. Die einzige Untergruppe, auf die Sie für die plattformübergreifende Unterstützung zählen können, ist diejenige, die in Silverlight passt.
Das heißt, .Net hat eine bessere wahrgenommene Leistung (tatsächliche Messungen TBD). In den Augen des Benutzers kommt es nur auf die wahrgenommene Leistung an. Nachdem ich mich in den letzten 12 Jahren in Java weiterentwickelt habe und kürzlich .Net gemacht habe, kann ich die Leistungsfähigkeit der Plattform schätzen.
Auf der anderen Seite hat Java eine viel umfangreichere IDE zur Auswahl, und die Kosten für diese überlegenen IDEs sind viel geringer als die Kosten für die .Net-Variante. Andererseits stellen die Kosten für professionelle J2EE-Engines die Kosten für die Entwicklungsumgebung in den Schatten. In .Net habe ich das Gefühl, zu Tode vernickelt zu sein. In Java gibt es Problemumgehungen für die enormen Kosten, die leicht durch das Einrichten der Entwicklerzeit ausgeglichen werden können. Außerhalb der IDE sind die Kosten für die wichtigen Tools (Profiler, Abdeckung usw.) gleich.
Am Ende kommt es wirklich auf das Bedürfnis an . Wenn ich sowieso unter Windows bereitstellen werde, ist .Net ein Kinderspiel. Ich habe Kunden, die nur Windows-Shops sind. Wenn ich auf Unix bereitstellen möchte oder heterogene Systeme unterstützen muss, ist Java ein Kinderspiel. Ich kann sogar radikal sein und einen gemischten Technologie-Stack vorschlagen. Nur weil der Client Unix als Server benötigt, heißt das nicht, dass er dies auf seinen Desktops ausführt. Nicht jede Anwendung lässt sich am besten in eine Web-App umwandeln.
quelle
Leistung - Gleichmäßig
Beide Plattformen eignen sich hervorragend für nahezu alle Anwendungen.
Es ist nicht wirklich viel, um sie zu unterscheiden, obwohl meine subjektive Erfahrung ist, dass Java für lang laufende Anwendungen einen leichten Vorteil hat, während .Net für die Startzeit von Anwendungen schneller ist.
Verfügbare Tools (auch Tools von Drittanbietern) - fraglich
Hängt davon ab, welche Tools Sie benötigen und mit welchen Sie vertraut sind.
.Net hat sicherlich einige großartige Tools von Microsoft. Andererseits gibt es in der Java-Welt ebenso gute Tools, z. B. in Eclipse, Netbeans von IntelliJ-Umgebungen.
Plattformübergreifende Kompatibilität - Java Win
.Net ist grundsätzlich an Microsoft-Plattformen (Windows, Xbox usw.) gebunden. Für Plattformen, die nicht von Microsoft stammen, sind keine vollständigen Implementierungen verfügbar .
Mono ist nett, bietet Ihnen jedoch nicht die vollständige plattformübergreifende Funktionalität, da es nicht alle .Net-Bibliotheken unterstützt (Sie können beispielsweise nicht erwarten, dass alle Windows-GUI-Funktionen ordnungsgemäß funktionieren, sofern Sie nicht zu wechseln) Ein plattformübergreifendes Toolkit wie GTK # (Sie können Ihre App nicht auf verschiedenen Plattformen ausführen.)
Java ist wirklich portabel. Nicht nur die Sprache, sondern vor allem alle Java-Bibliotheken sind portierbar. Wenn Sie sich an reine Java-Bibliotheken halten (z. B. Swing for GUI), wird Ihr Code überall dort ausgeführt, wo Sie eine Java-Laufzeitumgebung haben.
Bibliotheken (insbesondere Bibliotheken von Drittanbietern) - Java Win
Die wahrscheinlich beste Stärke der Java-Plattform ist das riesige Bibliotheks-Ökosystem, insbesondere Open-Source-Bibliotheken. Einige Beispiele:
Kosten (Oracle scheint zu versuchen, Java zu monetarisieren) - Java gewinnt, wenn Sie Open Source gehen, andernfalls Even.
Sie können einen 100% Open Source Java-Stack haben, der kostenlos ist und Sie nicht an eine bestimmte proprietäre Plattform bindet. Dies ist 100% kostenlos.
Alternativ können Sie IntelliJ IDEA kaufen, Java unter Windows ausführen und eine proprietäre Datenbank verwenden. In diesem Fall entspricht dies in etwa den Kosten eines typischen Microsoft .NET-Stacks.
Entwicklungsprozess (am einfachsten / am schnellsten) - umstritten
Dies hängt wahrscheinlich eher von der Erfahrung Ihrer Entwickler mit den einzelnen Plattformen ab als von den jeweiligen Attributen der Plattform.
.Net hat sicherlich einige großartige Tools, die Sie für einfache GUI-Apps unter Windows sehr produktiv machen können. Kein Wunder, denn dies ist der "Sweet Spot" für die .Net-Entwicklung.
Andererseits bevorzuge ich den Java-Stack für die serverseitige Entwicklung. Mit Tools wie Maven und allen Funktionen für die kontinuierliche Bereitstellung / Integration können Sie einen sehr effektiven Entwicklungsprozess für robuste serverseitige Apps einrichten.
In Bezug auf die Sprache bietet C # einige Produktivitätsvorteile gegenüber Java. Wenn Sie jedoch heutzutage auf der Java-Plattform entwickeln, besteht der Trend nicht darin, Java selbst zu verwenden, sondern stattdessen eine der neuen JVM-Sprachen wie Scala, Groovy oder Clojure zu verwenden. Wenn Sie dies tun, sind Sie weitaus produktiver als entweder C # oder Java.
quelle
.Netz
Es ist schwer, diese Frage zu beantworten, ohne subjektiv oder flammend zu sein (ich habe das Gefühl, dass ich heruntergestuft werde), aber .Net ist eine Sprache im Aufschwung, und Java scheint durch rechtliche Probleme blockiert und weniger beliebt zu sein.
Auch .net ist heutzutage eine weitaus zusammenhängendere und modernere Sprache mit hervorragender Unterstützung für Multicore (Parallel.net) und asynchrone Programmierung (reaktive Erweiterungen), ganz zu schweigen von LINQ, ohne das ich nicht leben könnte. .Net hat auch eine Reihe von kostenlosen Tools, aber Visual Studio Express, SQL Server Express, Web Matrix usw.
Es ist wahr, dass Java einige Multiplattform-Vorteile bietet. Sie haben einige Optionen für .Net mit Mono usw., die für herkömmliche Anwendungen oder Back-End-Komponenten geeignet sind, aber bei manchen ist es problematisch, wenn Sie etwas sehr Spezielles tun (und lassen Sie uns nicht über WPF diskutieren).
Eine andere Option, wenn die plattformübergreifende Verwendung wirklich sehr wichtig ist, ist Go Silverlight. Ich persönlich bin nicht besonders an Silverlight-Anwendungen interessiert, aber zumindest funktioniert sie.
Plattformübergreifend ist der Schmerzpunkt, fragen Sie sich, ob es wirklich wirklich notwendig ist, zumindest an diesem Punkt.
quelle
Zu diesem Zeitpunkt würden wir in unserer Organisation Java wählen. Der Grund dafür ist einfach: Unser Java-Team ist größer, erfahrener und besser ausgestattet als unser .NET-Team (das auch in der Wartung bestehender Systeme so stark eingebunden ist, dass es nicht über die Ressourcen verfügt, um größere neue Projekte anzunehmen). .
Wenn es jedoch dringende Gründe für die Verwendung von .NET gibt (z. B. Clientanforderungen, einige Kunden haben möglicherweise eine große installierte Basis von .NET-Software und möchten, dass ihr neues System in diese Basis passt, die Wartung selbst übernimmt usw.), werden wir dies tun Tun Sie dies und beauftragen Sie Auftragnehmer mit der Arbeit, bei der wir unsere eigenen Leute nicht befreien können.
Ich würde einem Kunden keine der beiden Technologien zum Nachteil seiner Interessen aufzwingen, und einige Kunden profitieren einfach (aufgrund ihrer internen Organisation) mehr von der einen als von der anderen, da für die Bereitstellung des Systems Investitionen erforderlich sind (sagen wir erneut, wir haben bereits einen Kunden) Da eine Reihe von .NET-Anwendungen ausgeführt wird und die Mitarbeiter diese unterstützen, werden wir sie nicht zwingen, Mitarbeiter einzustellen und Hardware- und Softwarelizenzen zu erwerben, um eine Java-Anwendung nebenbei auszuführen, und natürlich auch umgekehrt Wir würden ihnen sogar raten, dies nicht zu tun, wenn sie dies als Bitte an uns weiterleiten würden.
quelle