it-swarm-eu.dev

Java vs. C # - Produktivitätsperspektive

Wenn Sie über mehrere Jahre Erfahrung in der Arbeit mit Java und über mehrere Jahre Erfahrung in der Arbeit mit C # und .NET verfügen), würde ich Ihre Meinung zu Produktivitätsunterschieden bei der Softwareentwicklung zwischen diesen beiden Umgebungen schätzen. Einer unserer Kunden erwägt, seine vorhandene Softwarelösung auszutauschen. Da für den Austausch ca. 10 bis 15 Mannjahre Arbeit erforderlich sind, können Sie zwischen Java oder .NET) wählen, basierend auf Produktivitätsunterschieden zwischen diesen kann die erforderliche Investition und die Markteinführungszeit erheblich beeinflussen.

Könnten Sie uns einen Hinweis auf Produktivitätsunterschiede bei der Softwareentwicklung zwischen Java und C # /. NET) geben? Ich würde es vorziehen, eine Antwort wie folgt zu erhalten:

Meine Erfahrung basiert auf X Jahren Erfahrung in der Arbeit mit Java und X Jahren Erfahrung in der Arbeit mit C # /. NET. Java ist X% produktiver als C # .NET oder C # /. NET ist X% produktiver als Java, wenn Sie Folgendes berücksichtigen.

34
Edin Dazdarevic

Meine Erfahrung basiert auf 10 Jahren Erfahrung in der Arbeit mit Java und 3 Jahren Erfahrung in der Arbeit mit C # /. NET. Java ist 0% produktiver als C # .NET Dies basiert auf dem Schreiben von Back-End-Service-basierten Anwendungen.
C # /. NET ist vielleicht 5% produktiver als Java zum Schreiben von Benutzeranwendungen. Aber dann habe ich dies seit fast 5 Jahren nicht mehr getan in Java und der neue Netbeans UI Editor hätten die Lücke schließen können.

Sie möchten die Produktivität steigern? CI (idealerweise kontinuierliche Lieferung) und automatisierte Tests. Die Produktivität, die durch die Wahl der Sprache/Plattform/IDE in einer wichtigen Sprache/Plattform/IDE erzielt wird, ist relativ gering.

17
mlk

Ich arbeite seit 5 Jahren an Projekten sowohl im College als auch in der Real World ™ mit Java und C #).

Zweifellos genieße ich C # mehr wegen seiner Prägnanz und Verwendung von Syntaxzucker. In C # finden Sie selten einen Factory.GetFactory(OfFactory.GetFactory(Factory)); Code. Es ist einfacher zu lesen und zu folgen, da die Syntax kleiner und prägnanter ist.

Mit welchem ​​werden Sie produktiver sein? Das hängt von der Art des Projekts ab.

Entwerfen Sie eine Desktop-Anwendung für Windows? Dann ist C # die beste Wahl, da es leistungsstark ist IDE Visual Studio und .NET Framework machen das Erstellen von GUIs sehr einfach.

Ehrlich gesagt bin ich froh, dass ich Java nicht mehr (es ist jetzt über ein Jahr her) nicht mehr verwende, weil ich mich daran erinnere, wie schrecklich ausführlich der Code sein musste. Ein schnelles Beispiel ist die Ausnahmebehandlung Ihr Code kann eine Ausnahme auslösen Sie müssen für jede einzelne mögliche Ausnahme verantwortlich sein. Dies verwandelt trivialen Code schnell in eine Monstrosität von 20 Zeilen +.

C # ist nicht so handfest, wenn Sie Ihren Code offen lassen, liegt es an Ihnen als Entwickler, zu entscheiden.

C # hat im Laufe des Jahres auch viele Ergänzungen vorgenommen, die die Verwendung zu einer Freude machen. Lambdas, Delegierte, anonyme Funktion (a la Ruby), viele gute kleine Dinge, die Sie auf Ihrem Weg finden werden.

43
Sergio

Ich habe sowohl mit Java (seit 1996) als auch mit .Net (seit 2002) ausgiebig gearbeitet und 2010 in meinem Unternehmen eine Entscheidung für Java getroffen wäre die produktivste Umgebung insgesamt.

Beachten Sie, dass ich die Produktivität der Softwareentwicklung in Bezug auf den Geschäftswert definiere, der pro Kosten-/Ressourceneinheit auf End-to-End-Basis geschaffen wird (dh Sie müssen die Produktivität des gesamten Software-Lebenszyklus einschließlich Bereitstellung und Wartung betrachten, nicht nur die Erstkodierung !!).

Hier sind die Schlüsselelemente meiner Argumentation:

  • Syntax ist ein kleiner Faktor für die Produktivität - Während Java sicherlich ausführlich ist und ich die Syntax von C # bevorzuge, spielt es einfach keine Rolle. Ob Ihre Entwickler object.getSomeProperty() vs. object.SomeProperty Eingeben oder eine anonyme innere Klasse vs. Lambda verwenden, wird den Wettbewerbsvorteil Ihres Unternehmens einfach nicht nennenswert beeinflussen.
  • Bibliotheks-Ökosystem ist entscheidend - bei der Entwicklung eines modernen Softwareprodukts möchten Sie nicht viele gängige Komponenten von Grund auf neu entwickeln. Das Java - Ökosystem hat einen klaren Vorteil in Bezug auf die Anzahl und Qualität der Open Source-Bibliotheken (insbesondere der von Apache, Google, der Eclipse Foundation und RedHat/JBoss entwickelten).
  • Portabilität/Bereitstellungsflexibilität - Ich weiß, dass ich eine JVM auf so ziemlich jeder Plattform bereitstellen kann, einschließlich großer billiger Linux-Cluster. Mit .Net sind Sie auf Windows-Umgebungen beschränkt. Angesichts der Fortschritte bei den Cloud-Hosting-Optionen hielt ich dies für einen ziemlich wichtigen Vorteil.
  • Scala und Clojure sind beide praktikable Optionen für die Entwicklung in der JVM, wenn Sie erweiterte Sprachfunktionen wünschen. Es ist eine realistische Option, in Java zu entwickeln, aber die Option, im Laufe der Zeit zu Scala oder Clojure zu wechseln, offen zu halten. Bis zu einem gewissen Grad sind dies Sprachen der "nächsten Generation", von denen ich denke, dass sie sowohl Java als auch C # voraus sind. Dies versicherte mir, dass die Java - Plattform eine gute Zukunft in Bezug auf Sprachinnovationen hat. (Java 7 und 8 sahen vielversprechend aus, aber ich hielt nicht gerade den Atem an ...)
  • Wartungskosten schien eigentlich ziemlich günstig für Java zu sein. Java hat eine einfachere Syntax als C #, was mehr Ausführlichkeit bedeutet, aber auf der anderen Seite bedeutet dies, dass die Leute dazu neigen, mehr wartbaren Code zu schreiben - es ist einfach schwieriger, "cleveren Code" zu schreiben. Darüber hinaus legt die Java - Welt großen Wert auf die Abwärtskompatibilität als die .Net - Welt, was sich über mehrere Jahre hinweg in Bezug auf die Wartungskosten von Vorteil sein wird.
  • Herstellerunabhängigkeit - Nachdem ich in der Vergangenheit gesehen hatte, wie Unternehmen durch Lieferantenbindung verbrannt wurden, hielt ich es für einen Vorteil, das relativ offenere Java Ökosystem anstelle des Microsoft- zu wählen. dominierte .Net Welt. Zum Beispiel hätte ich lieber die Wahl zwischen Datenbanken als die Verwendung von SQL Server (und der Push ist ziemlich stark, sowohl durch die Toolunterstützung als auch durch die typischen Fähigkeiten von .NET-Entwicklern). Die Unabhängigkeit Ihres Anbieters von Kernproduktinvestitionen ist meiner Ansicht nach ein kluger langfristiger Schritt. Ich habe (wie sich herausstellt) richtig beurteilt, dass das OpenJDK die Zukunft von Java sein würde, also würde ich effektiv auf einer Open-Source-Plattform aufbauen.
  • Talent - das ist natürlich subjektiv, aber ich war mehr beeindruckt von den technischen Fähigkeiten der Entwickler in der Java - Welt als in der .Net-Welt. Mein durchschnittlicher Eindruck war, dass .NET-Entwickler dazu neigten, alles zu tun, wofür Microsoft einfache Tools oder Vorlagen bereitstellte, während die Java - Entwickler sich eher darum kümmerten, die richtige Lösung aus Sicht der Softwareentwicklung zu finden. Dies ist völlig subjektiv und hängt zweifellos von der spezifischen Lokalität/dem spezifischen Markt ab, und es gab eindeutig viele Personen, die nicht zu diesem Muster passten, also YMMV natürlich.
  • Tools waren ungefähr eben. Microsoft verfügt über viele großartige, benutzerfreundliche Tools, die sich besonders für die Entwicklung unter Windows eignen. Ich arbeite jedoch hauptsächlich an der serverseitigen Entwicklung, bei der ich behaupten würde, dass die Java - Tools den Vorteil haben. Insbesondere hat sich Maven als äußerst leistungsfähiges Werkzeug im Java - Ökosystem erwiesen, von dem ich immer noch nicht glaube, dass es in der .Net-Welt ein anständiges Äquivalent hat.

Obwohl es viele komplexe Überlegungen gab, bin ich insgesamt ziemlich zufrieden mit der Entscheidung für Java und würde heute (ab Anfang 2012) die gleiche Entscheidung treffen.

Wahrscheinlich wäre der einzige Fall, in dem ich mich jetzt für .Net entscheiden würde, die Entwicklung einer Desktop-Anwendung nur für Windows (bei der der .Net-Vorteil eindeutig enorm ist).

24
mikera

Ich habe: Java 10 Jahre, C # 8 Jahre

Ich stimme Java für

  1. Keine Anbietersperre (Sie können App-/Webserver von Linux zu Windows zu Unix ändern)
  2. Interoperabilität/Austauschbarkeit von Paketen von Drittanbietern wie JasperReports JFreeChart, JSF oder Spring
  3. Die meisten Innovationen kommen von hier (Log4j, Ant, Spring, Hibernate und so weiter und so fort).
  4. Funktioniert auf mehreren Anwendungsservern (ähnlich wie A). Wie JBoss, Tomcat, WebSphere, GlassFish, WebLogic
9
pat

Ich habe mehr als 10 Jahre Erfahrung mit Java (seit Version 1.1, wirklich!) Und 7 Jahre Erfahrung mit .NET (meistens C #).

Sie müssen eine sehr gründliche Entscheidung treffen, aber meistens sollten Sie versuchen, in einige Szenarien zu zerlegen:

Desktop-Anwendung

Wenn Sie eine Desktop-Anwendung entwickeln, müssen Sie sich für die Hauptplattform entscheiden, mit der Sie arbeiten werden. Wenn es sich um eine Microsoft-Plattform handelt, die .NET verwendet, gibt es keine bessere Lösung als die vom Mutterschiff selbst entwickelte Plattform. Wenn es sich um ein Linux- oder Multi-Plattform-Szenario handelt, ziehen Sie Java) in Betracht oder wechseln Sie zu einer webbasierten Lösung.

Webbasierte Anwendung

Dies ist eine sehr schwierige Entscheidung, da jeder seine eigenen Stärken und Schwächen hat. Hier sind einige:

C #

Stärke: Derzeit gibt es mehr Dynamik, um neue Funktionen in die Sprache und die Plattform/das Framework zu integrieren. Alles kommt von einem Anbieter und das ist definitiv ein Vorteil. Sie können auch einige sehr leistungsstarke Komponenten wie beispielsweise DevExpress verwenden (Java kommt nicht annähernd an das heran, was das DX-Team im Laufe der Jahre zusammengestellt hat, und dies bedeutet einen enormen Produktivitätsschub).

Schwäche: Für Unternehmensanwendungen ist .NET nicht so ausgereift wie Java. Es gibt nicht so viele Anbieter, die Unternehmenssoftware in .NET erstellen wie für Java.

Java

Stärke: Reifer (bereits erklärt) und hat eine große Community mit mehreren großartigen Open Source-Projekten, die helfen können. Einige so genannte Open-Source-Projekte von .NET sind eigentlich nur eine Nachahmung von Projekten aus Java.

Schwäche: Oracle besitzt Java (ich weiß, nicht das JCP) und das ist definitiv ein zu berücksichtigendes Risiko. Ihre Absichten sind nicht sehr klar und ich persönlich mag es nicht, wohin die Sprache gerade geht (ich kenne viele Java Entwickler haben ähnliche Bedenken).

Serverseitige Anwendung

Es sind im Grunde die gleichen Argumente wie bei den webbasierten Anwendungen, aber weil Sie sich nicht zu viele Sorgen um die Benutzeroberfläche machen müssen Java wird in diesem Fall stärker. Aber auch hier, wenn die Plattform hauptsächlich Windows .NET ist könnte eine bessere Wahl sein.

Allgemeine Überlegungen

Insgesamt hat .NET meiner Meinung nach den Vorteil vor allem aufgrund der engen Integration von Visual Studio 2010 (zweifellos das Beste IDE da draußen), MS SQL, Entity Framework, IIS und so weiter. Dies alles stellt einen enormen Produktivitätsschub dar und ich habe jede Menge Erfahrung, um dies zu beweisen. Außerdem arbeite ich hauptsächlich mit Java-Entwicklern, die sich an .NET gewandt haben und diese gemeinsam nutzen im Grunde die gleiche Meinung.

Ich denke, es ist auch ein guter Punkt, dass Microsoft stärker als je zuvor ist, was bedeutet, dass .NET für eine Weile da sein wird. Wenn ich also 10-15 Jahre in die Zukunft schaue, fühle ich mich mit .NET sicherer als mit Java.

6
Alex

Java: 5 Jahre (nicht kontinuierlich)
C #: 7 Jahre

Ich glaube nicht, dass Sie die Produktivität auf diese Weise quantifizieren können. Das hängt stark vom einzelnen Entwickler und dem Projekt ab. Verwenden Sie, was Ihre Entwickler wissen.

Edit :
Definieren wir "typische Unternehmensanwendung" als:

  • mehrstufig
  • kundenserver
  • DB unterstützt

Sowohl Java als auch C # können das. Es geht nicht so sehr um die Sprache, sondern um das Framework/die Laufzeit. Verwenden Sie erneut das, was Ihre Entwickler wissen. Sie können eine neue Sprache lernen und a neues Framework, aber es braucht Zeit, um es zu verstehen. Das würde für eine Desktop-App gelten. Beide Sprachen können mit zahlreichen GUI-Toolkits/Bibliotheken verwendet werden, aber alle haben unterschiedliche Ansätze und Philosophien.

6
EricSchaefer

Ich bin ein kürzlich abgeschlossener Student von der Universität, habe aber kaufmännische Erfahrung mit beiden Sprachen, insgesamt ca. 3 Jahre Java und 4 Jahre C # .Net (Hinweis .net bedeutet, dass Sie verwenden können) C #, VB.net, C++ CLI und J # und F #).

Ich werde jetzt sagen, dass meine allgemeine Präferenz C # gegenüber Java ist, während beide eine ähnliche Syntax haben. Ich mag die Leistung des .Net-Frameworks gegenüber der betriebssystemübergreifenden Kompatibilität von Java. Sie müssen stark überlegen, was Sie bauen müssen? Ist das nur eine Desktop-Anwendung? Benötigen Sie Konnektivität zu anderen Clients, also anderen Desktops, Handys, Websites?

** Diskussion über IDE verloren, da die Frage bei Stackoverflow geschlossen wurde. Das Wesentliche war Java hat viele kostenlose IDEs, aber sie sind meiner Meinung nach nicht vergleichbar Beachten Sie jedoch, dass Visual Studio mehr pro Lizenz kostet.

Sie müssen sich ansehen, über welche Fähigkeiten Ihr Entwicklungsteam bereits verfügt, da dies erste Auswirkungen hat. Was schneller ist, gibt es hier und da nicht für einen erfahrenen Benutzer in einer Sprache/einem Framework. Was ich denke, bringt den Punkt, dass Sie nicht die Sprache berücksichtigen müssen, da die Sprache nur Syntax ist, sondern die Werkzeuge und das Framework, das die Sprache verwendet.

4
JonWillis

Ich habe zwischen Java und .NET, hin und her gewechselt, beginnend mit Java 1.2 bis 1.6 und .NET 1 bis 4.0, über ungefähr 10) hin und her gewechselt jahrelange Berufserfahrung (vorher C/C++ - Programmierer).

Zu einer Zeit, wie .NET 2.0, würde ich sagen, dass Java und C # ungefähr gleich wären, insbesondere für Back-End-Arbeiten. Die Sprachkonstrukte waren immer noch sehr ähnlich. .NET hätte Wahrscheinlich haben Sie den Edge in der Desktop-UI-Programmierung aufgrund des WinForms-Designers in Visual Studio erhalten, und Java hätte den Edge in Web/Server-Inhalten gehabt, hauptsächlich, weil Sie nicht mit IIS festgefahren waren.

Wenn ich jetzt zu .NET 3.5 und 4 übergehe, gebe ich .NET zweifellos den Produktivitätsvorteil. Dies liegt meiner Meinung nach in erster Linie daran, dass .NET eine sich viel schneller entwickelnde Sprache ist, da MS Sprachentscheidungen relativ schnell treffen kann, anstatt Änderungen durch die Politik der JCP voranzutreiben. Große Verbesserungen sind das Schlüsselwort var, die Gesamtheit von Linq, Extension Methods, der Null-Coalescing-Operator ??, dynamic und wahrscheinlich noch viel mehr großartiges Zeug, das die Produktivität wirklich steigert.

Nun, das heißt, die "produktivste" Sprache für ein Projekt ist fast immer diejenige, mit der die meisten Entwickler am vertrautesten und erfahrensten sind. Die Lernkurve ist immer der größte Produktivitätskiller.

3
rally25rs

Eine Sache, die mir aufgefallen ist, ist, dass viele C # /. NET-Shops die Einstellung "hier nicht erfunden" haben und alle Open-Source-Bibliotheken von Drittanbietern verbieten, während viele Java-Shops eher bereit sind, Open-Source-Bibliotheken zu verwenden. Außerdem scheinen mehr Bibliotheken für Java verfügbar zu sein. Selbst wenn Sie sich einige coole Bibliotheken von Drittanbietern in .NET ansehen, z. NHibernate, NPOI, Spring.NET usw. sind Ports der Java Bibliotheken und stehen daher hinter ihnen. Es scheint sicher, dass viele dieser Innovationen zuerst auf Java kamen und nach einiger Zeit ein .NET-Port erstellt wurde. Aus bibliothekarischer Sicht scheint Java in Bezug auf neue innovative Entdeckungen sicherlich zu gewinnen.

Dennoch stellt Microsoft einige offizielle Bibliotheken her, z. ASP MVC, LINQ usw. Aber oft wie bei ASP waren MVC-Bibliotheken von Drittanbietern wie Struts, Spring MVC usw. bereits für Java und Microsoft verfügbar war spät in das Model View Controller Web-Paradigma eingetreten.

Natürlich sparen viele dieser Bibliotheken eine Menge Zeit und machen Sie produktiver. Kernsprache zu Kernsprache C # und Java sind nicht so unterschiedlich und für mich ist es zu nah, um sie anzurufen. Werfen Sie die Armee von Bibliotheken von Drittanbietern ein und die Skala neigt sich sicherlich in Richtung Java. Immer noch mit einem offenen Laden gleicht sich ein Großteil dieser Neigung aus. Es ist nur so, dass viele .NET-Shops die hier nicht erfundene Einstellung haben, während viele Java Shops alles sind, was nötig ist, um die Arbeit zu erledigen ... Dies gilt sogar für das Unternehmen, in dem ich arbeite. Das NET-Team erhält (aufgrund des Managements) nicht viel, während das Java -Team über viele genehmigte Bibliotheken/Dienstprogramme von Drittanbietern verfügt. Auch mit .NET sind viel mehr der guten Dinge nicht kostenlos (z. B. vor NPOI, wenn Sie mit Microsoft Office-Dokumenten arbeiten wollten, waren die meisten Lösungen [ohne Office-Automatisierung] nicht kostenlos. Während Java hatte POI seit 2001 Ich glaube nicht, dass NPOI bis 2008 herauskam, es ist schwer zu sagen, basierend auf der npoi-Projektseite.

3
Cervo

Aufgrund der Ähnlichkeit in Syntax und Tools sind die Produktivitätsgewinne von C # oder Java nicht in der Größenordnung, um einen signifikanten Unterschied für Ihr 10 - 15 Mannjahre-Arbeitsprojekt zu bewirken. Ich würde schauen genauer bei Themen wie:

  1. Was sind die Anforderungen des Projekts und welche Sprachfunktionen erfüllen diese Anforderungen (z. B. plattformübergreifend im Vergleich zu einem reichen Windows-Client).
  2. Was kann ich als Projektansatz/-methode einführen, die es meinem Team ermöglicht, produktiv zu arbeiten?.
  3. Was kann ich in Bezug auf das Arbeitsumfeld tun, um sicherzustellen, dass ich das bestmögliche Team für ein bedeutendes Projekt beschäftige, halte und voll ausnütze?.

Ich würde vorschlagen, dass meiner Meinung nach die Prämisse hinter der Frage, dass "Produktivitätsunterschiede zwischen (C # und Java) die erforderlichen Investitionen und die Markteinführungszeit erheblich beeinflussen können", nicht wahr ist. Ich bezweifle nicht, dass es einen Unterschied geben würde, aber er wäre nicht signifikant.

3
AlexC

Ich habe mir diese Frage oft gestellt: Was ist besser? C # oder Java?

Ich werde Ihnen einen Rat geben, und dieser Rat ist das Ergebnis meiner Forschung: Keiner von ihnen ist besser, nur die Sprache, die Sie gut kennen und mit der Sie viele faszinierende Anwendungen durchführen können, ist die beste.

Lernen Sie, wie man mit einer Sprache programmiert und sich dann viel trainiert. Wenn Sie perfekt darin sind, Code damit zu schreiben, über andere Sprachen nachdenken und mir glauben, werden Sie die anderen Sprachen wie ein Kinderspiel lernen.

0
Salah