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.
quelle
Antworten:
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.
quelle
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
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.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:
object.getSomeProperty()
gegenobject.SomeProperty
eine anonyme innere Klasse gegen einen Lambda tippen oder diese verwenden, wird für den Wettbewerbsvorteil Ihres Unternehmens einfach keinen nennenswerten Unterschied machen.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).
quelle
Ich habe: Java 10 Jahre, C # 8 Jahre
Ich stimme für Java
quelle
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:
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.
quelle
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.
quelle
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.
quelle
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:
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.
quelle
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
var
Schlüsselwort, die Gesamtheit der Linq, Erweiterungsmethoden, die Null-Koaleszenz - Operator??
,dynamic
und 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.
quelle
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.
quelle
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.
quelle