Kategorien
Technik

Java vs C#

Ein kleiner Vergleich aus meiner Sicht. Warnung: enthält Programmiererchinesisch.

Java-Programmierer sollten hereinschauen, Java-Fans vielleicht besser nicht. :P

der Folgende Artikel enthält einiges Programmiererkauderwelsch, ich entschuldige mich mal vorweg.

Ich hatte nun einigen Kontakt mit den Programmiersprachen Java und C#, und ich denke, der Vergleich muss nicht so präzise und kompliziert sein, wie ihn manche Profis über viele Jahre hinweg formuliert haben oder wie ihn Wikipedia nun zieht.

Ich beschreibe einfach mal sehr grob beide Sprachen, gefolgt von einer Liste ihrer Vorteile, dann wird wohl klar, was ich meine. Wer die Details nicht versteht, aber meine Empfehlung klar formuliert haben will, darf gerne zum Fazit springen.

Um was geht es hier?
Java ist eine von Sun entwickelte Sprache, die 1995 erschienen ist und erstmals ermöglichte, Webanwendungen laufen zu lassen, ohne die Sicherheit des Computers zu gefährden. Die Sprache ist heutzutage stark in Mode, nicht zuletzt dank ihrer Unabhängigkeit von Betriebssystem und Prozessorarchitektur.

C# ist eine von Microsoft entwickelte, 2001 erschienene Sprache, die bis heute das Flaggschiff der Sprachen auf dem .NET Framework ist. Sie vereinigt viele alte Programmiertechniken, darunter mittlerweile auch Features von funktionalen Sprachen.

Vom prinzipiellen Design her sind sich beide sehr ähnlich. Es sind objektorientierte, hauptsächlich prozedurale Sprachen mit C++-ähnlicher Syntax, sie verwenden Garbage Collection und kompilieren in eine Zwischensprache, die erst auf dem Zielcomputer in einem zweiten Schritt zu nativen Code kompiliert wird. Zu einem guten Teil sieht sich ihr Programmcode sehr ähnlich. Auch kommen beide mit einer gewaltigen Sprachbibliothek, in der viele Funktionen obsolet sind, da sich die Sprachen seit ihrer ersten Version massiv verändert haben.

Dennoch fühlen die beiden sich für mich als Programmierer sehr unterschiedlich an, was besonders an der Entwicklung und Designphilosophie der Sprachen liegt: Java wirkt ein wenig gewachsen, die Sprachfeatures sind minimalistisch gehalten. C# ist hingegen eine Sprache mit vielen Features und Extras, in der es sogar oft mehrere Schreibweisen für das gleiche Ergebnis gibt.

Normalerweise bevorzugt man in der Programmierung minimalistische Lösungen. Aber wenn minimalistische Sprachfeatures zu nicht sehr minimalistischem Code führen, kann man wohl getrost eine Ausnahme machen, deshalb vergleiche ich im Folgenden die Sprachen auf praktischen Nutzen nach meinem Geschmack.

Argumente für Java

  • Plattformunabhängigkeit: C# läuft zwar dank Mono auch überall, aber das Framework ist bisher nicht komplett und Microsoft scheint diese Entwicklung eher zu behindern.

Argumente für C#

  • Besser versionierte und funktionierende Runtime: Die Java Runtime hat mir schon auf drei Computern mit den irrsten Absurditäten den letzten Nerv gekostet (Allein die Parallelinstallationen!). .NET Runtime lief eigentlich immer einwandfrei.
  • Userdefinierte value types
  • Ordentliche Generics: als Typargument darf man alles verwenden. Punkt. Mit den erweiterten Features muss ich da gar nicht mehr anfangen…
  • Delegates. Und hübsche Event-Syntax dazu. Delegates in Java sind ein schlechter Witz. (Es gibt sie nicht, aber man kann sie manchmal auf extrem ultra-wtf-absurde Weise „bauen“)
  • Properties (die Liste der „gibt’s in Java gar nicht.“ wächst…)
  • Enumeration per magischer yield-Syntax (komisch aber sehr praktisch)
  • Operator Overloading (Ja, die Liste wächst immer noch… kein Witz, Java kann das nicht.)
  • Unsigned Variablen
  • Dispose(): halbwegs ordentliches Aufräumen trotz Garbage Collection.
  • Lambda-Expressions (Nun verlassen wir endgültig jegliche Vergleichbarkeit mit Java)
  • Language Integrated Query (LINQ): SQL-ähnliche Syntax für Zugriffe auf Arrays, Container, Datenbanken, XML, …

Und noch ein Punkt, der nicht direkt zur Sprache gehört: eine bessere Entwicklungsumgebung! Visual Studio ist ziemlich gut. (Leider das einzige Programm von Microsoft, mit dem ich das Arbeiten angenehm finde.) Eclipse treibt mich hingegen in den Wahnsinn, allein schon mit seinen irreführenden Fehlermeldungen, aber es stürzte manchmal sogar ab!

Fazit
Ich lege Java nun erstmal auf Eis. Sollte ich jemals maximale Kompatibilität brauchen, denke ich vielleicht noch einmal darüber nach. Aber was jeden anderen Fall angeht: der Unterschied ist einfach viel zu gewaltig. Dieser Artikel fasst nur einen Ausschnitt: egal was ich tue, jedesmal freue ich mich, gerade C# zu programmieren, oder ärgere mich, wenn ich gerade Java programmiere und die Features von C# fehlen.

Wer ein Programm schreibt, bei dem er die freie Wahl hat: der Unabhängigkeits-Idealismus ist etwas schönes, aber man sollte für ihn nicht zum Masochist werden. Dennoch ist Java in geradezu unvernünftigem Maße beliebt, alle setzen sie geradezu krampfhaft immerzu ein. Dabei sollte man doch die Sprache wählen, die für den Programmierer effizienter ist und weniger Ärger bereitet.

C# ist einfach besser als Java. Kaum anders, aber viel besser. Musste einfach mal unverblümt gesagt werden.

6 Antworten auf „Java vs C#“

Hmm, das mit der Plattformunabhängigkeit würde ich nicht als so unwichtig sehen… Ich benutze regelmäßig 4 verschiedene Maschinen die mit programmierbarer Software laufen, darunter:
1 Gerät mit x86-Prozessor und WindowsXP
1 Gerät x64-Prozessor und Windows Vista und SuSE Linux
2 Geräte mit ARM-Prozessoren, davon eins mit GarnetOS und eins mit Maemo OS 2006

… von diesen Geräten benutze ich zB 2 mit IRC, und brauche dafür natürlich 2 verschiedene Programme… einfach weil es das eine nicht für ein Framework gibt, das auf ARM-Prozzis läuft… und das, das auf ARM läuft gibts zwar für x86, aber es ist nicht gerade toll, deswegen nehme ich unter x86 das bessere. das gleiche mit Browsern! 3 Geräte – 3 Programme – nervt einfach schrecklich. Außerdem muß man sich ständig merken was mit welchem Programm nicht funktioniert. Und dann kann ich unter SuSE Linux, obwohl es sogar ein x86 System ist, nicht die gleichen Programme nehmen, die ich unter Windows habe. Nur wegen einem dummen Framework. Grundsätzlich hinterlassen bei mir Programmiersprachen, die sich auf ein proprietäres Framework stützen einen fahlen Beigeschmack, weil ich genau weiß, dass sie bei mir den Einsatzbereich stark einschränkt. Aus diesem Grund nehme ich oft sogar Programme die weniger toll sind als andere, wenn sie entweder in einer Sprache geschrieben sind, die ich auf jedem System kompilieren kann, oder eben, wenn „Halbscriptingsprache“, eine plattformunabhängige Laufzeitumgebung haben.

Ok, bin vielleicht bißchen abgeschweift, den rein objektiven Vergleich sehe ich schon ein, geht mir nur um die Unabhängigkeit ^^ das ist gelegentlich schon wichtig

Du hast Recht, die Plattformunabhängigkeit ist tatsächlich nach wie vor ein Grund, trotz Alledem Java zu wählen.

Aber vergiss nicht, dass C# auch einen architekturunabhängigen Bytecode verwendet. Zusammen mit Mono sind also auch viele C# Programme auf Windows, Linux oder Mac auf verschiedensten Prozessoren prinzipiell möglich. Die Verbreitung und Entwicklung dieser Dinge hat nur nicht den gleichen fertigen Zustand wie bei Java.

Außderdem muss man Java zu Gute halten, dass die Sprache zum Lernen und für einfache Programme nicht schlecht geeignet ist. Die meisten Unterschiede sind ja nur fehlende Funktionalität – die vorhandenen Möglichkeiten in Java sind deshalb ja nicht schlecht.

Spät aber besser als nie …

Hat jemand von euch mal für Enterprise Environments programmiert? Also nicht klicki-bunti Interfaces oder Java Applets sondern Programme auf denen im Rahmen einer Webanwendung diverse Anwender mit Sessionreplikation auf nem Cluster arbeiten?

Kann das C#? Gibt es hier Frameworks und .net Applicationserver?

Bei der Plattformunabhängigkeit sollte man noch einen Punkt bedenken: Lizenzkosten!
C# braucht nen Windows (Server), das .net Framework, die .net Entwicklungsumgebung und Du bist absolut Hersteller gebunden.

Mit Java hast Du ein beliebiges OS verwenden, hast kostenlose Developer Tools en Masse und sehr ausgereifte kostenlose Applikationsserver. Für Unternehmen eigentlich ein eindeuties ko …

@iD4G
Inwiefern betrifft das C#? C# ist eine Sprache. Und die Sprache C# ist der Sprache Java imo eindeutig überlegen.
Was frameworks für enterprise Anwendungen angeht kann Java durchaus mehr haben als .net. Das ändert allerdings nichts am Sprachvergleich.

@W
Wenn FD selbst die Plattformunabhängigkeit anspricht, so ist es nur richtig, die darunterliegenden Frameworks anzuschauen, denn die sind für diese (Un-)abhängigkeit zuständig. :-)

Das erste Argument für C# ist seine Runtime – kein Sprach Agrument.
Und genau den Punkt würde ich sogar wieder als Pro von Java ansetzen. Hier wird von „Der Runtime“ gesprochen, es gibt jedoch viele unterschiedliche JVMs. Und die Verfügbarkeit von unterschiedlichen Versionen ist ein riesen Vorteil. Was wenn auf einem Computer/Server unterschiedliche Versionen von Programmen unterschiedliche JVMs voraussetzen?
Ich sehe es immer auf größere Dimensionen bezogen und nicht auf „Mein Programm auf Meinem Komputah“ sondern „Viele Programme auf vielen Computern mit vielen OS“.

Gut, das mit der Runtime ist vielleicht subjektiv, weil Java sich auf meinen Windows-Computern konsequent danebenbenommen hat.

Eigentlich bin ich sehr sprachorientiert; darum soll es eigentlich hauptsächlich im Artikel gehen — ich möchte nicht auf Spezialgebiete eingehen, wo irgendeine dominierende Bibliothek dann zum Kernpunkt der Diskussion wird.

Java hat sicherlich noch eine Daseinsberechtigung. Aber nicht jedes Projekt benötigt zwingend Bibliotheken, die es auf .NET nicht gibt! Dass Java so massiv in großen Projekten benutzt wird, auch neuen, halte ich für einen Trägheitseffekt — und Nebenwirkungen der Angst vor Microsoft.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert