Java war nach TopPascal und TI-BASIC die erste Programmiersprache, mit der ich in Kontakt kam. Java spielte in meiner Maturitätsarbeit eine grosse Rolle, und auch heute komme ich nicht von Java los. Seit rund einem halben Jahr programmiere ich nun hauptsächlich auf dem .NET-Framework mit C#. Gemäss Mitlernenden ist C# viel besser als Java. Gerne glaube ich ihnen das, aber heute mit diesem Blog möchte ch genauer wissen, wie es um die Unterschiede zwischen den beiden steht.
Ganz zu Beginn muss festgehalten werden, dass die beiden Sprachen sehr viele Dinge gemein haben, und sich sämtliche Vergleiche eher auf Detail-Ebene bewegen. Einige der wichtigsten Gemeinsamkeiten:
Alles in allem sind die Konzepte und Syntaxen ähnlich genug, um zu sagen, dass wohl C# und Java etwa gleichauf sind, wenn es um die Schwierigkeit geht, diese zu lernen. Die persönliche Erfahrung ist jedoch, dass C# eine nicht unwesentliche Anzahl zusätzlicher Syntax-Features hat, etwa LINQ, welche auch ihre Zeit brauchen, um damit vertraut zu werden.
Ein weit wesentlicher Unterschied ist jedoch, dass C# fast ausschliesslich auf dem .NET-Framework verwendet wird, wobei Java auf einer Vielzahl von Frameworks, welche alle rege verwendet werden, eingesetzt wird. Somit besteht eine gute Chance, dass wenn man zwar Java auf einem Framework gemeistert hat, man bald darauf mit einem bislang unbekannten Framework konfrontiert wird, welches erst kennengelernt werden muss.
Java wurde von Anfang an nach dem Leitsatz "Write once, run anywhere"konzipiert, sodass Java-Anwendungen auf möglichst allen Betriebssystemen verwendet können, ohne dass die eigentliche Anwendung für die einzelnen OS' angepasst werden muss. Bei C# und .NET war das nicht der Fall, jedoch wird dies mit dem Mono-Projekt zurzeit erarbeitet.
Häufig ist es aber gar nicht notwendig, dass eine Applikation plattformunabhängig ist, etwa wenn diese serverseitig läuft. Weiter funktioniert die Plattformunabhängigkeit bei Java auch nur, solange keine Betriebssystem-spezifische Libraries verwendet werden. Somit ist dieser Vorteil von Java nur bedingt nützlich.
Die Beschreibung von C#, als ich zum ersten Mal damit in Kontakt kam, lautete etwa so "C# ist genau gleich wie Java, nur 'string' wird klein geschrieben". Aber neben diesem syntaktischen Unterschied, lassen sich noch einige weitere festhalten:
Neben diesen lassen sich auch noch weitere Punkte finden, wo meistens C# mehr Optionen bietet als Java, etwa betreffend Delegates, Nullable Types oder Flexibilitäten bei Methodenparametern. Vieles sind aber lediglich Code Sugars, also Sprachfeatures, welche den Code leserlicher machen können, aber letztendlich keine vollends neuen Möglichkeiten eröffnen.
Auch wenn ich einige Argumente finden konnte, welche C# als diejenige Sprache küren könnten, welche zu bevorzugen wäre, wenn wirklich beide in einem bestimmten Anwendungsfall verwendbar wären, möchte ich für mich (noch) keinen Sieger küren. Ein kurzes Interview mit einem meiner Oberstifte zeigte jedoch einige weitere Vorteile von C# + .NET + Visual Studio auf, insbesondere wenn es um die effiziente und unkomplizierte Webentwicklung geht. In diesem Anwendungsfeld habe ich aber noch keine Erfahrungen sammeln können, und lasse diese also nicht in mein Urteil einfliessen. Sicher scheint jedoch, dass weder C# noch Java so schnell verschwinden werden, womit es wohl am besten ist, sich mit beiden anzufreunden.