{"id":911,"date":"2009-03-12T20:32:37","date_gmt":"2009-03-12T19:32:37","guid":{"rendered":"https:\/\/acureus.com\/?p=911"},"modified":"2009-08-01T19:58:48","modified_gmt":"2009-08-01T17:58:48","slug":"java-vs-c-die-kurzfassung","status":"publish","type":"post","link":"https:\/\/blog.acureus.com\/?p=911","title":{"rendered":"Java vs C#"},"content":{"rendered":"<p>der Folgende Artikel enth\u00e4lt einiges Programmiererkauderwelsch, ich entschuldige mich mal vorweg.<\/p>\n<p>Ich hatte nun einigen Kontakt mit den Programmiersprachen Java und C#, und ich denke, der Vergleich muss nicht so pr\u00e4zise und kompliziert sein, wie ihn <a href=\"http:\/\/www.25hoursaday.com\/CsharpVsJava.html\">manche Profis \u00fcber viele Jahre hinweg formuliert haben<\/a> oder <a href=\"http:\/\/en.wikipedia.org\/wiki\/Comparison_of_C_Sharp_and_Java\">wie ihn Wikipedia nun zieht<\/a>.<\/p>\n<p>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.<br \/>\n<!--more--><br \/>\n<strong>Um was geht es hier?<\/strong><br \/>\nJava ist eine von Sun entwickelte Sprache, die 1995 erschienen ist und erstmals erm\u00f6glichte, Webanwendungen laufen zu lassen, ohne die Sicherheit des Computers zu gef\u00e4hrden. Die Sprache ist heutzutage stark in Mode, nicht zuletzt dank ihrer Unabh\u00e4ngigkeit von Betriebssystem und Prozessorarchitektur.<\/p>\n<p>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.<\/p>\n<p>Vom prinzipiellen Design her sind sich beide sehr \u00e4hnlich. Es sind objektorientierte, haupts\u00e4chlich prozedurale Sprachen mit C++-\u00e4hnlicher 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 \u00e4hnlich. Auch kommen beide mit einer gewaltigen Sprachbibliothek, in der viele Funktionen obsolet sind, da sich die Sprachen seit ihrer ersten Version massiv ver\u00e4ndert haben.<\/p>\n<p>Dennoch f\u00fchlen die beiden sich f\u00fcr 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\u00fcr das gleiche Ergebnis gibt.<\/p>\n<p>Normalerweise bevorzugt man in der Programmierung minimalistische L\u00f6sungen. Aber wenn minimalistische Sprachfeatures zu nicht sehr minimalistischem Code f\u00fchren, kann man wohl getrost eine Ausnahme machen, deshalb vergleiche ich im Folgenden die Sprachen auf praktischen Nutzen nach meinem Geschmack.<\/p>\n<p><strong>Argumente f\u00fcr Java<\/strong><\/p>\n<ul>\n<li><strong>Plattformunabh\u00e4ngigkeit<\/strong>: C# l\u00e4uft zwar dank <a href=\"http:\/\/www.mono-project.com\/\">Mono<\/a> auch \u00fcberall, aber das Framework ist bisher nicht komplett und Microsoft scheint diese Entwicklung eher zu behindern.<\/li>\n<\/ul>\n<p><strong>Argumente f\u00fcr C#<\/strong><\/p>\n<ul>\n<li><strong>Besser versionierte und funktionierende Runtime<\/strong>: Die Java Runtime hat mir schon auf drei Computern mit den irrsten Absurdit\u00e4ten den letzten Nerv gekostet (Allein die Parallelinstallationen!). .NET Runtime lief eigentlich immer einwandfrei.<\/li>\n<li><strong>Userdefinierte value types<\/strong><\/li>\n<li><strong>Ordentliche Generics<\/strong>: als Typargument darf man alles verwenden. Punkt. Mit den erweiterten Features muss ich da gar nicht mehr anfangen&#8230;<\/li>\n<li><strong>Delegates<\/strong>. Und h\u00fcbsche 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 &#8222;bauen&#8220;)<\/li>\n<li><strong>Properties<\/strong> (die Liste der &#8222;gibt&#8217;s in Java gar nicht.&#8220; w\u00e4chst&#8230;)<\/li>\n<li><strong>Enumeration per magischer yield-Syntax<\/strong> (komisch aber sehr praktisch)<\/li>\n<li><strong>Operator Overloading<\/strong> (Ja, die Liste w\u00e4chst immer noch&#8230; kein Witz, Java kann das nicht.)<\/li>\n<li><strong>Unsigned Variablen<\/strong><\/li>\n<li><strong>Dispose()<\/strong>: halbwegs ordentliches Aufr\u00e4umen trotz Garbage Collection.<\/li>\n<li><strong>Lambda-Expressions<\/strong> (Nun verlassen wir endg\u00fcltig jegliche Vergleichbarkeit mit Java)<\/li>\n<li><strong>Language Integrated Query (LINQ)<\/strong>: SQL-\u00e4hnliche Syntax f\u00fcr Zugriffe auf Arrays, Container, Datenbanken, XML, &#8230;<\/li>\n<\/ul>\n<p>Und noch ein Punkt, der nicht direkt zur Sprache geh\u00f6rt: eine <strong>bessere Entwicklungsumgebung<\/strong>! 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\u00fchrenden Fehlermeldungen, aber es st\u00fcrzte manchmal sogar ab!<\/p>\n<p><strong>Fazit<\/strong><br \/>\nIch lege Java nun erstmal auf Eis. Sollte ich jemals maximale Kompatibilit\u00e4t brauchen, denke ich vielleicht noch einmal dar\u00fcber 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 \u00e4rgere mich, wenn ich gerade Java programmiere und die Features von C# fehlen.<\/p>\n<p>Wer ein Programm schreibt, bei dem er die freie Wahl hat: der Unabh\u00e4ngigkeits-Idealismus ist etwas sch\u00f6nes, aber man sollte f\u00fcr ihn nicht zum Masochist werden. Dennoch ist Java in geradezu unvern\u00fcnftigem Ma\u00dfe beliebt, alle setzen sie geradezu krampfhaft immerzu ein. Dabei sollte man doch die Sprache w\u00e4hlen, die f\u00fcr den Programmierer effizienter ist und weniger \u00c4rger bereitet.<\/p>\n<p>C# ist einfach besser als Java. Kaum anders, aber viel besser. Musste einfach mal unverbl\u00fcmt gesagt werden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ein kleiner Vergleich aus meiner Sicht. Warnung: enth\u00e4lt Programmiererchinesisch.<\/p>\n<p>Java-Programmierer sollten hereinschauen, Java-Fans vielleicht besser nicht. :P<\/p>\n","protected":false},"author":12,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[29],"tags":[365,364,189],"class_list":["post-911","post","type-post","status-publish","format-standard","hentry","category-technik","tag-c","tag-java","tag-review"],"_links":{"self":[{"href":"https:\/\/blog.acureus.com\/index.php?rest_route=\/wp\/v2\/posts\/911","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.acureus.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.acureus.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.acureus.com\/index.php?rest_route=\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.acureus.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=911"}],"version-history":[{"count":13,"href":"https:\/\/blog.acureus.com\/index.php?rest_route=\/wp\/v2\/posts\/911\/revisions"}],"predecessor-version":[{"id":922,"href":"https:\/\/blog.acureus.com\/index.php?rest_route=\/wp\/v2\/posts\/911\/revisions\/922"}],"wp:attachment":[{"href":"https:\/\/blog.acureus.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=911"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.acureus.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=911"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.acureus.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=911"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}