Java vs. C # - Produktivitätsperspektive [geschlossen]

34

Wenn Sie mehrere Jahre Erfahrung in der Arbeit mit Java und einige Jahre Erfahrung in der Arbeit mit C # und .NET haben, 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 zu ersetzen. Da der Austausch ca. 10 bis 15 Mannjahre Arbeit, eine Wahl für Java oder .NET, basierend auf den Produktivitätsunterschieden zwischen den beiden, kann den Investitionsbedarf und die Markteinführungszeit erheblich beeinflussen.

Können 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.

Edin Dazdarevic
quelle
24
Ich denke, eine wichtige Sache ist auch hier, was Sie machen. .NET ist möglicherweise besser für bestimmte Projekte und Java für andere.
Øyvind Knobloch-Bråthen
4
Um was für ein Projekt handelt es sich? Viel hängt von den Bibliotheken ab, die für das, was Sie versuchen, verfügbar sind. In Bezug auf die Sprache bevorzuge ich C #, aber ich behaupte nicht, dass .net für alle Arten von Projekten besser ist als Java.
CodesInChaos
7
IMO gibt es eine sehr wichtige strategische Entscheidung und sollte überhaupt nicht auf Programmiererproduktivität basieren. Wenn Sie ein perfektes Windows-GUI auf dem neuesten Stand der Technik wollen, können Sie Java nicht wählen, selbst wenn Statistiken behaupten, es sei 7% produktiver. Wenn Sie ein echtes plattformübergreifendes Produkt ohne die Einschränkungen von Mono benötigen, ist Java Ihr Baby, auch wenn C # die schönere Syntax hat.
user281377
2
@Edin: "Unternehmensanwendung" beschreibt nicht sehr genau, um welche Art von Anwendung es sich handelt ... Ist es nur Desktop, Client / Server-Konfiguration, Webdienste, Websites, mögliche Satellitenanwendungen auf Mobilgeräten usw.?
Ehrfurcht
3
Es ist "Java" nicht "JAVA"
Mahmoud Hossam

Antworten:

17

Meine Erfahrung basiert auf 10 Jahren Erfahrung mit Java und 3 Jahren Erfahrung mit C # /. NET. Java ist 0% produktiver als C # .NET. Dies basiert auf dem Schreiben von auf Back-End-Diensten basierenden Anwendungen.
C # /. NET ist beim Schreiben von Benutzeranwendungen möglicherweise 5% produktiver als Java. Aber dann habe ich das seit fast 5 Jahren nicht mehr in Java gemacht und der neue Netbeans-UI-Editor hätte die Lücke schließen können.

Sie möchten die Produktivität steigern? CI (idealerweise Continuous Delivery) und automatisierte Tests. Die Produktivität, die durch die Auswahl von Sprache / Plattform / IDE auf jeder wichtigen Sprache / Plattform / IDE erzielt wird, ist relativ gering.

mlk
quelle
Meinten Sie 0% für Java sagen? Meinen Sie 0% produktiver für Back-End-Anwendungen auf Service-Basis oder Java insgesamt? Ich überprüfe nur.
Jon Onstott
Wenn Sie mich bitten würden, eine Back-End-Anwendung zu schreiben (einige Regeln, Datenbankzugriff und was haben Sie), wäre die Schätzung für C # und Java identisch. Wenn Sie nach einer Windows-Endbenutzeranwendung gefragt würden, würde ich meine Schätzung für Java etwas größer als für C # machen (WPF / XAML und die Unterstützung von MVVM per Bindung halte ich für etwas produktiver als die manuellere Bindung und Benutzeroberflächenerstellung in Java (als deaktiviert) vor 5 Jahren)).
mlk
+1 für "Die Produktivität, die durch die Auswahl von Sprache / Plattform / IDE auf jeder wichtigen Sprache / Plattform / IDE erzielt wird, ist relativ gering."
Adam Jaskiewicz
3
-1 für den letzten Satz. Für jede (reale) Problemklasse können Sie zwei allgemeine Hochsprachen auswählen, bei denen die Produktivitätssteigerung von einer zur anderen 100% übertrifft. Wenn Sie zwischen C # und Java wählen, werden Sie kaum einen Unterschied feststellen (obwohl ich behaupten würde, dass sich C # in Bereichen, die für die funktionale Programmierung geeignet sind, als wesentlich produktiver erweisen wird). Wenn Sie zwischen C und OCaml wählen, ist der Unterschied offensichtlich.
back2dos
42

Ich arbeite seit 5 Jahren an Projekten sowohl im College als auch in der realen Welt mit Java und C #.

Zweifellos mag ich C # mehr, weil es prägnant ist und Syntaxzucker verwendet. Sie werden selten einen Factory.GetFactory(OfFactory.GetFactory(Factory));Code in C # finden. Das Lesen und Verfolgen ist einfacher, 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 Desktopanwendung für Windows? Dann ist C # aufgrund seiner leistungsstarken IDE Visual Studio die beste Wahl und das .NET Framework macht das Erstellen von GUIs sehr einfach.

Ehrlich gesagt bin ich froh, dass ich kein Java mehr verwende (es ist jetzt über ein Jahr her), weil ich mich erinnere, wie schrecklich ausführlich der Code sein musste. Ein kurzes Beispiel ist die Ausnahmebehandlung. Wenn Ihr Code eine Ausnahme auslösen kann , müssen Sie jede einzelne mögliche Ausnahme berücksichtigen. Dadurch wird aus einfachem Code schnell eine Monstrosität von 20 Zeilen und mehr.

Wenn Sie Ihren Code offen lassen, liegt die Entscheidung bei Ihnen als Entwickler.

C # hat im Laufe des Jahres auch eine Reihe von Ergänzungen vorgenommen, die die Verwendung zu einer Freude machen. Lambdas, Delegierte, anonyme Funktion (a la Ruby), viele gute kleine Dinge, die Sie finden, während Sie gehen.


quelle
3
Ich erinnere mich, dass ich in Java von Uni einen Punkt vergesse, den ich gerne vergesse. Erzwungene Ausnahmebehandlung. Ja, es hatte einen Zweck, aber die Codedokumentation kann Ihnen sagen, ob Methoden Ausnahmen auslösen, und gibt Ihnen die Wahl, was zu tun ist.
JonWillis
5
haha, ich bin ein Java-Programmierer, aber ich mochte Ihren Beispielcode.
Chuck Stephanski
6
If your code can throw an exception you must account for every single exception possible.Ich verstehe den Nachteil nicht, zumindest wird das Bewusstsein für Probleme geschärft. Vielleicht bin ich es aber auch.
Bobby
4
Die geprüften Ausnahmen bedeuten, dass Sie Fehlerbehandlungscode als Teil der Hauptimplementierung schreiben, anstatt ihn nachträglich einzuschrauben. Dies bedeutet eine Menge Wartungsaufwand.
Ich denke, es ist nur eine Meinungsverschiedenheit darüber, was Ausnahmen bedeuten - es kann sich um erwartete Umstände (Datei existiert nicht) oder unerwartete Fehler (Division durch 0) handeln. Java entschied, dass Ausnahmen beides darstellen sollten und hat daher sowohl aktivierte als auch deaktivierte Ausnahmen. Dies ist ein überraschend kontroverses Merkmal.
Tikhon Jelvis
23

Ich habe intensiv sowohl mit Java (seit 1996) als auch mit .NET (seit 2002) gearbeitet und mich 2010 für Java in meinem Unternehmen entschieden, da dies die produktivste Umgebung insgesamt darstellen würde .

Beachten Sie, dass ich die Produktivität der Softwareentwicklung als End-to-End-Wert pro Kosten- / Ressourceneinheit definiere (dh, Sie müssen die Produktivität des gesamten Software-Lebenszyklus einschließlich Bereitstellung und Wartung, nicht nur die Produktivität des gesamten Software-Lebenszyklus betrachten) Erstkodierung !!).

Hier sind die wichtigsten Elemente meiner Überlegungen:

  • Die Syntax ist ein untergeordneter Faktor für die Produktivität - während Java zweifellos ausführlich ist und ich die Syntax von C # bevorzuge, spielt es einfach keine Rolle. Ob Ihre Entwickler object.getSomeProperty()gegen object.SomePropertyeine anonyme innere Klasse gegen einen Lambda tippen oder diese verwenden, wird für den Wettbewerbsvorteil Ihres Unternehmens einfach keinen nennenswerten Unterschied machen.
  • Das Bibliotheksökosystem ist von entscheidender Bedeutung - Sie möchten ein modernes Softwareprodukt entwickeln und 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 Bibliotheken).
  • Portabilität / Bereitstellungsflexibilität - Ich weiß, dass ich eine JVM auf nahezu 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 war dies für mich ein ziemlich wichtiger Vorteil.
  • Scala und Clojure sind beide praktikable Optionen für die Entwicklung auf 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, sollte offen bleiben. In gewissem Maße handelt es sich dabei um "Next Generation" -Sprachen, die meiner Meinung nach sowohl Java als auch C # voraus sind. Dies hat mich beruhigt, dass die Java-Plattform in Bezug auf Sprachinnovationen eine gute Zukunft hat. (Java 7 und 8 sahen vielversprechend aus, aber ich hielt nicht gerade den Atem an ....)
  • Tatsächlich schienen die Wartungskosten für Java recht günstig 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 viel mehr Wert auf Abwärtskompatibilität als die .Net-Welt, was über mehrere Jahre hinweg einen Vorteil in Bezug auf die Wartungskosten darstellt.
  • Herstellerunabhängigkeit - Nachdem in der Vergangenheit Unternehmen durch Lieferantenbindung in Mitleidenschaft gezogen wurden, hielt ich es für einen Vorteil, sich für das relativ offenere Java-Ökosystem und nicht für die von Microsoft dominierte .Net-Welt zu entscheiden. Zum Beispiel hätte ich lieber die Wahl zwischen Datenbanken als die Verwendung von SQL Server (und der Push ist ziemlich stark, sowohl aufgrund der Toolunterstützung als auch der typischen Kenntnisse der .NET-Entwickler). Die Unabhängigkeit Ihres Hauptproduktinvestitionsanbieters ist aus meiner Sicht ein kluger langfristiger Schritt. Ich habe (wie sich herausstellte) richtig beurteilt, dass 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 von den technischen Fähigkeiten der Entwickler in der Java-Welt beeindruckt als in der .Net-Welt. Im Durchschnitt hatte ich den Eindruck, dass .NET-Entwickler dazu tendierten, alles zu tun, wofür Microsoft einfache Tools oder Vorlagen zur Verfügung stellte, während sich Java-Entwickler eher darum kümmerten, die richtige Lösung aus der Perspektive des Software-Engineerings zu finden. Dies ist völlig subjektiv und hängt zweifellos von der spezifischen Örtlichkeit / dem Markt ab, und es gab eindeutig viele Personen, die nicht zu diesem Muster passten, also natürlich YMMV.
  • Die Werkzeuge waren ungefähr auf gleicher Höhe. Microsoft hat viele großartige, benutzerfreundliche Tools, die besonders für die Entwicklung unter Windows geeignet sind. Ich arbeite jedoch hauptsächlich an der serverseitigen Entwicklung, wo ich behaupte, dass die Java-Tools die Nase vorn haben. Insbesondere Maven hat sich als äußerst leistungsfähiges Tool im Java-Ökosystem erwiesen, von dem ich glaube, dass es in der .NET-Welt noch kein annehmbares Äquivalent gibt.

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

Wahrscheinlich wäre der einzige Fall, in dem ich jetzt mit .Net arbeiten würde, der, wenn ich eine reine Windows-Desktop-Anwendung entwickeln würde (bei der der .Net-Vorteil eindeutig riesig ist).

mikera
quelle
9
+1: Tolle Antwort! Es fasst viele der Punkte zusammen, die bei der Bewertung der Produktivität insgesamt berücksichtigt werden sollten. Einige syntaktische Zucker machen eine Sprache vielleicht cooler und "moderner", aber es gibt auch andere wichtige Faktoren, die die Produktivität beeinflussen.
Giorgio
3
+1 für eine viel umfassendere Antwort als die vorherigen.
NlightNFotis
1
Da Sie Scala und Clojure erwähnt haben, können Sie auch F # erwähnen ...
Mauricio Scheffer
2
Groß! Umfassende Analyse. Genau das, wonach ich gesucht habe. :)
Xebo
9

Ich habe: Java 10 Jahre, C # 8 Jahre

Ich stimme für Java

  1. Keine Vendor-Sperre (Sie können App / Web-Server von Linux auf Windows auf Unix umstellen)
  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)
  4. Funktioniert auf mehreren Anwendungsservern (Art wie A). Wie JBoss, Tomcat, WebSphere, GlassFish, WebLogic
klopfen
quelle
23
Welche Art von "Innovationen" kann eine Sprache ohne Lambdas sein?
SK-logic
6
Es gab andere MVC-Frameworks vor ASP MVC (z. B. MonoRail) ...
EricSchaefer
2
Übrigens: Lambdas / Closures sind ein Sprachfeature, Sie sprechen von Frameworks.
EricSchaefer
5
Bei SK-logic benötigen Sie keine Lambdas, um eine O / R-Schicht zu schreiben.
2
@Giorgio, Lambdas passen perfekt zu jeder Sprache mit GC. In C ++ und C ist für sie natürlich kein Platz.
SK-logic
6

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.

Bearbeiten:
Definieren wir "typische Unternehmensanwendung" als:

  • mehrstufig
  • Kundenserver
  • DB gesichert

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

EricSchaefer
quelle
3
"Das hängt stark vom einzelnen Entwickler ab" ... und genau deshalb wollte er eine Meinung von Leuten, die Erfahrung in beiden Welten haben ... "und dem Projekt." ... die eine Antwort erfordern sollte, die aufzeigt, welche Art von Projekten von den verschiedenen Technologien profitieren.
Ehrfurcht
4
Es hängt nicht von diesem Entwickler (auch bekannt als ich) ab, sondern von den Entwicklern, die das Projekt erstellen sollen. Es wäre auch einfacher, wenn er angegeben hätte, welche Art von Projekt er bauen wird ...
EricSchaefer
@eric es ist eine typische Unternehmensanwendung
Edin Dazdarevic
@Edin, Java hat JavaEE Edition mit integrierten Unternehmensfunktionen. Mit diesem Framework können Sie schnell Anwendungen entwickeln. Wie auch immer es eine Menge Sachen von Magic macht, Sie müssen sich an seine Regeln halten. Und wenn die Dinge kaputt gehen, erwarten Sie nicht, dass die Ausnahmemeldungen nützlich sind, da der Stacktrace riesig ist. Der Zugriff auf eine Datenbank mit falschem Namen oder DB ist deaktiviert. Die Stapelverfolgung ist so groß, dass Sie nicht sehen können, was das ursprüngliche Problem verursacht hat.
JonWillis
5
Sicher, es gibt eine "typische Unternehmensanwendung". Nehmen Sie diese Daten von Punkt a, lassen Sie den Benutzer sie durcheinander bringen und fügen Sie sie dann in Punkt b ein. ;)
Mezmo
6

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

Sie haben eine sehr bedenkliche Entscheidung zu treffen, aber meistens sollten Sie versuchen, sich in ein paar Szenarien zu unterteilen:

Desktopanwendung

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 plattformübergreifendes 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 ein paar:

C #

Stärke: Hat derzeit mehr Schwung beim Aufbau neuer Funktionen in der Sprache und der Plattform / dem Framework. Alles kommt von einem Anbieter und das ist definitiv ein Vorteil. Sie können auch einige sehr leistungsstarke Komponenten wie zum Beispiel DevExpress verwenden (Java kommt nicht einmal 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. Sie haben nicht so viele Anbieter, die Unternehmenssoftware in .NET erstellen, wie Sie es für Java getan haben.

Java

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

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 weiß, dass viele Java-Entwickler ähnliche Bedenken haben).

Serverseitige Anwendung

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

Allgemeine Überlegungen

Insgesamt hat .NET meiner Meinung nach den größten Vorteil, weil Visual Studio 2010 (zweifellos die beste IDE da draußen), MS SQL, Entity Framework, IIS usw. eng integriert sind. Dies alles stellt einen enormen Produktivitätsschub dar, und ich habe jede Menge Erfahrung damit. Außerdem arbeite ich mit hauptsächlich Java-Entwicklern zusammen, die sich an .NET gewandt haben und im Grunde die gleiche Meinung vertreten.

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

Alex
quelle
4

Ich habe vor kurzem meinen Universitätsabschluss gemacht, habe jedoch kaufmännische Erfahrung mit beiden Sprachen, wobei ich insgesamt etwa 3 Jahre Java und 4 Jahre C # .Net gebe (Anmerkung .net bedeutet, dass Sie C #, VB.net, C ++ CLI, und J # und F #).

Ich gebe jetzt an, 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 sich stark überlegen, was Sie bauen müssen? Ist das nur eine Desktop-Anwendung? Benötigen Sie Konnektivität zu anderen Clients, also zu anderen Desktops, Mobiltelefonen und Websites?

** Diskussion über IDE verloren, da Frage bei Stackoverflow geschlossen wurde. Das Wichtigste war, dass Java viele freie IDEs hat, aber sie lassen sich meiner Meinung nach nicht mit den Möglichkeiten und Addons von Visual Studio vergleichen. Beachten Sie jedoch, dass Visual Studio pro Lizenz mehr kostet.

Sie müssen prüfen, über welche Fähigkeiten Ihr Entwicklungsteam bereits verfügt, da dies erste Auswirkungen haben wird. 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 die Sprache nicht berücksichtigen müssen, da die Sprache nur Syntax ist, sondern die Werkzeuge und das Framework, das die Sprache verwendet.

JonWillis
quelle
11
£ 1000 pro Lizenz für VS? Wenn Sie MSDN-Abonnements erhalten, stehen Ihnen weitaus mehr Software und Tools für diese Kosten zur Verfügung. Ich bezweifle wirklich, dass jemand den Einzelhandelspreis von VS2010 zahlt.
James Love
6
@Michael, ich habe noch nie versucht, VS-Erweiterungen zu schreiben. Allerdings verwende ich oder habe verschiedene Plugins für Visual Studio ausprobiert. Dazu gehören Resharper, CodeRush, Gallio, VisualSVN, AnkhSVN, testDriven.Net und viele mehr.
JonWillis
2
@ JonWillis stimmte zu, es gibt eine Vielzahl von Erweiterungen. Darüber hinaus verwende ich (täglich) Productivity Power Tools, CKS: Dev für SharePoint und WSPBuilder. In der Galerie (unter visualstudiogallery.msdn.microsoft.com ) gibt es ein paar Tausend, sodass es nicht so schwer sein kann, mehr Erweiterungen für VS zu schreiben. .
James Love
1
Für ein Projekt, das 10-15 Mannjahre dauern soll, sind die anfänglichen Kosten für VS-Lizenzen Erdnüsse.
Ehrfurcht
1
Visual Studio 2010 Professional ohne MSDN kostet 550 US-Dollar.
Boris Yankov
3

Aufgrund der Ähnlichkeit von Syntax und Tools liegen die Produktivitätsgewinne von C # oder Java nicht in einer Größenordnung, die einen signifikanten Unterschied für Ihr 10-15-Mannjahre-Arbeitsprojekt bedeuten. Ich würde mir folgende Themen genauer ansehen:

  1. Was sind die Anforderungen des Projekts und welche Sprachfähigkeiten erfüllen diese Anforderungen (z. B. plattformübergreifend im Vergleich zum Rich-Windows-Client)?
  2. Was kann ich als Projektansatz / -methode einführen, mit der mein Team produktiv arbeiten kann?
  3. Was kann ich in Bezug auf das Arbeitsumfeld tun, um sicherzustellen, dass ich das bestmögliche Team für ein bedeutendes Projekt anstelle, behalte 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 zutrifft. Ich bezweifle nicht, dass es einen Unterschied geben würde, aber es wäre nicht signifikant.

AlexC
quelle
3

Ich habe zwischen Java und .NET hin und her gewechselt, angefangen mit Java 1.2 bis 1.6 und .NET 1 bis 4.0, über 10 Jahre Berufserfahrung (davor war ich C / C ++ - Programmierer).

Zu einer Zeit, wie .NET 2.0, würde ich sagen, dass Java und C # ungefähr gleich sind, insbesondere für die Back-End-Arbeit. Die Sprachkonstrukte waren immer noch sehr ähnlich. .NET hätte wahrscheinlich aufgrund des WinForms-Designers in Visual Studio die Nase vorn in der Desktop-UI-Programmierung, und Java hätte die Nase vorn in Sachen Web / Server gehabt, vor allem, weil Sie sich nicht mit IIS auskennen.

Nachdem ich nun auf .NET 3.5 und 4 übergegangen bin, gebe ich .NET den Produktivitätsvorsprung, und zwar zweifellos. Dies ist meiner Meinung nach in erster Linie darauf zurückzuführen, 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 varSchlüsselwort, die Gesamtheit der Linq, Erweiterungsmethoden, die Null-Koaleszenz - Operator ??, dynamicund wahrscheinlich noch viel mehr tolle Sachen , die wirklich steigert die Produktivität.

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

rally25rs
quelle
3

Eine Sache, die mir aufgefallen ist, ist, dass viele C # /. NET-Shops eine "hier nicht erfundene" Haltung haben und alle Drittanbieter- / Open Source-Bibliotheken verbieten, während viele Java-Shops eher bereit sind, Open Source-Bibliotheken zu verwenden. Es scheint auch mehr Bibliotheken für Java zu geben. Auch wenn Sie sich einige coole Bibliotheken von Drittanbietern in .NET ansehen, z. B. NHibernate, NPOI, Spring.NET usw., sind sie Ports der Java-Bibliotheken und daher dahinter. Es scheint, dass viele dieser Innovationen zuerst für Java entwickelt wurden und nach einiger Zeit ein .NET-Port erstellt wurde. Aus bibliothekarischer Sicht scheint Java hinsichtlich neuer innovativer Entdeckungen zu gewinnen.

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

Natürlich sparen viele dieser Bibliotheken eine Menge Zeit und machen Sie produktiver. Kernsprache zu Kernsprache C # und Java sind nicht so verschieden und für mich ist es zu nah dran zu nennen. Werfen Sie in die Armee von Bibliotheken von Drittanbietern und die Waage neigt sich sicherlich in Richtung Java. Immer noch mit einem offenen Laden gleicht eine Menge dieser Neigung aus. Es ist nur so, dass viele .NET-Shops die hier nicht erfundene Einstellung haben, während viele Java-Shops alles sind, um die Arbeit zu erledigen ... Dies gilt sogar für die Firma, in der ich arbeite, das .NET-Team bekommt nicht viel (aufgrund des Managements), während das Java-Team viele zugelassene Bibliotheken / Dienstprogramme von Drittanbietern hat. Auch mit .NET ist viel mehr des Guten nicht kostenlos (z. B. vor NPOI, wenn Sie mit Microsoft Office-Dokumenten arbeiten wollten, waren die meisten Lösungen [ohne Office-Automatisierung] nicht kostenlos.

Cervo
quelle
"Nicht hier erfunden". Aus welchen Gründen? Ich arbeite in einer Mischung aus C # und Java und es scheint, als würden Java-Leute mehr missbrauchen, z. B. einen IConverter erstellen und eine Logik implementieren, um einen String in Double umzuwandeln und umgekehrt.
George Silva
Aus mehreren Gründen bevorzuge ich C # gegenüber Java, bevorzuge jedoch die "migrierten" Java-zu-C # -Bibliotheken gegenüber dem nativen C #, das normalerweise in der realen Welt besser entworfen, getestet und angewendet wird.
Umlcat
0

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 in einer Sprache programmiert und sich dann viel trainiert. Wenn Sie perfekt darin sind, Code zu schreiben, über andere Sprachen nachdenken und mir glauben, werden Sie die anderen Sprachen wie ein Kinderspiel lernen.

Salah
quelle