Java und C# - Welche Herangehensweise scheint euch besser?

Registriert
Feb. 2020
Beiträge
65
Man kann C# als einen Abkömmling von Java betrachten. Gerade, wenn man diese Sprachen aus einem historischen Blickwinkel betrachtet. Jedoch gibt es wesentliche Unterschiede zwischen diesen Sprachen.

Mir geht es um eure subjektive Meinung, die ich gerne in Erfahrung bringen möchte. Mir geht es um die Frage, welche semantische, philosophische Herangehensweise ihr bevorzugt - die von Java, oder die von C#?

In Java besteht eine Klasse im wesentlichen aus Feldern und Methoden, wenn man von inneren Klassen und anderen, hochgestochenen, selten verwendeten Schickschnack absieht. C# wiederum bietet zusätzlich dazu noch Properties, Indexer und Delegates an - wobei es sich hier um in C# oft verwendete Features handelt.

Die Organisation des Source-Codes ist ebenfalls anders - In Java kriegt (für gewöhnlich) jede Klasse seine eigene Datei. Diese sind in Packages untergliedert, welche wiederum in Module untergliedert sind. C# bietet Namespaces an.

Auch bietet C# sehr viele zusätzliche Schlüsselwörter an, dessen Erläuterung den Rahmen sprengen würde. Nicht unerwähnt bleiben darf das Schlüsselwort "unsafe". Was hier für Schweinereien möglich sind, brauche ich nicht weiter erläutern.

Meine Meinung

Man merkt, dass hinter Java nicht nur ein kommerzieller Zweck, sondern eine Idee stand, die für sich stehen konnte. Seine Erdenker waren unzufrieden mit C++ und seiner Aufgeblähtheit und wollten eine Sprache und eine Programmier-Umgebung schaffen, die dem Entwickler eine klare, einheitliche Art des Entwickelns ermöglichen soll.

Die Motivation zur Kreierung von C# jedoch lieferten Konkurrenzdenken und Missgunst. Microsoft war schon seit jeher ein Künstler darin, bestehende Produkte nachzuahmen, dann zu erweitern und somit das Standardprodukt vom Markt zu prügeln. Das glückte jedoch bei weitem nicht immer.

Aus meiner Sicht merkt man, dass C# ein aufgeblähter, an vielen Stellen liebloser Abklatsch von Java ist. Die Vielfalt, seine Ideen in Quellcode auszudrücken ist bei C# kein Segen, sondern ein Fluch. Properties führen das Prinzip der Objektorientierung strenggenommen, genau wie Getter und Setter ad absurdum, die hunderttausend zusätzlichen Schlüsselwörter und die riesige Bibliothek erschweren Wiederverwendbarkeit, Erlernbarkeit und Wartbarkeit.

Kurz: Hinter Java stand eine Vision. Hinter C# stand eine bissige Riesenfirma mit, zugegeben durchaus fähigen Programmierern, jedoch kein Ideal. Java fühlt sich organisch an. C# fühlt sich eher lieblos an. Man kann C# benutzen - es ist kein Schmerz, es benutzen zu müssen, jedoch auch keine wirkliche Freude. Genau so erging es wahrscheinlich auch denjenigen Entwicklern, die den Auftrag bekamen, C# zu entwickeln.
 
Da das alles rein subjektives Empfinden des Nutzers ist, kann man dazu nichts sagen.

Letztlich sind das nur Programmiersprachen,
diese sollen eine festgelegte Funktionalität, die der Mensch in seiner analogen Denk- und Ausdrucksweise formuliert, in ein digitales, maschinenlesbares Equivalent umsetzen.

Viele Programmiersprachen sind alt und evolutionär gewachsen, aus C wurde C++ usw.
Viele Programmierprachen sind für ganz bestimmte Anwendungsfälle entwickelt worden.
Manche Programmierprachen sind für ein ganz individuelles Rechnersystem entwickelt worden.

Nicht jede Sprache eignet sich für alles. Nicht jeder beherrscht alle Sprachen. Und nicht viele beherrschen eine Sprache wirklich allumfassend perfekt.
Dabei stellt die Sprache auch nur das Vokabular bereit, die Grammatik in Form von Algorithmen muss man selber beisteuern.
Und natürlich liegt dem einen diese, dem anderen jene Sprache besser. Menschen sind eben alle verschieden.

Wenn du Java "besser" findest als C#, findest du sicher einige die dir zustimmen, aber auch genug andere die das genaue Gegenteil behaupten.
Diese haben in ihren Augen auch Recht und können das begründen. Was stimmt nun?

Ich habe bei dir auch ehr das Gefühl du bist gegen C#, nicht weil dir die Sprache nicht gefällt,
sondern nur weil ein profitorientierter Großkonzern dahinter steht und keine Gruppe idealisierter Visionäre, die davon träumen morgen in einer besseren Welt zu leben...

Aber dafür kann die Sprache nichts.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: DubZ, lemon03, Hayda Ministral und 3 andere
Ich habe im initialen Post explizit gesagt, dass es nicht um Objektivität, sondern um die subjektive Meinung geht. Stell dir vor, ich hätte ein Bild gemalt und frage jemanden, wie es ihm gefällt. Dieser Jemand antwortet, dass diese Frage sinnlos sei, da sie sich nicht objektiv beantworten lässt. Das wäre schon etwas komisch, nicht wahr?

Es geht also nur um Subjektivität. Jedoch kann aus etwas subjektivem auch etwas objektives werden. Aber wie dem auch sei: Dieser Thread hatte nie den Anspruch, die absolute Wahrheit darüber herauszufinden, welche Sprache nun besser sei - sondern nur eure subjektive Empfindung bezügl. dieser Frage.
 
Klaus Ulbrecht schrieb:
Nicht unerwähnt bleiben darf das Schlüsselwort
#region Ich bin immer an Kotzen wenn ich Java programmiere und es denkt mal wieder jemand, hier kann ich doch alles reinmachen. So kann es innerhalb der Klasse nochmal etwas strukturiert werden.

Persönlich finde ich auch Linq sehr viel angenehmer zu programmieren, als mit Streams.

Ansonsten, die Grundzüge sind ziemlich gleich. Bei Java spüre ich beim Start immer eine Verzögerung, man merkt das es eine Java Anwendung ist :D

Leider bin ich aktuell mehr im Java Umfeld unterwegs als im C# Bereich.

Wie knolle schon schrieb kommt es aber immer auf den Einsatzbereich drauf an. Mit .NET CORE habe ich bisher noch keine Erfahrungen gemacht. Für Unabhabhängigkeit steht Java noch immer an erster Stelle, der beiden Sprachen.
 
Ich komme mit C# besser zurecht, um ehrlich zu sein. Und dank .NET Core und Xamarin sehe ich C# sogar als universaler an, als Java. Java ist in meinen Augen keine Frontendsprache mehr. JavaFX ist mittlerweile auch echt altbacken und man merkt einer Anwendung an, wenn sie Java ist.

Auch kann man eine Java-Anwendung auch nicht mehr einmal programmieren und überall laufen lassen. Eine Java-Anwendung für Desktop-Rechnern läuft nicht auf einem Smartphone, obwohl im Falle von Android dort sogar eine JVM vorhanden ist.

C# mit .Net Core und Xamarin hingegen läuft quasi Out-of-the-Box auf Windows, macOS, iOS, Android und Linux und deckt damit einen extrem großen Bereich ab.
 
Kurzversion meiner subjektiven Meinung:
Microsoft versteht es, Entwcklern das Leben angenehm zu machen, zumindest für einfache Desktopanwendungen* in deren Universum. Das merkt man auch an C#, weshalb C# mir rein von der Sprache her besser als Java gefällt.
Die Properties mag ich und verstehe nicht, wie das OO widerspricht, da es auch nur Getter uns Setter sind. Auch so hat C# viele interessante Features, Java scheint da teilweise nachzuziehen.
Gefährliches Halbwissen incomming: War C# nicht auch mit Lambda-Ausdrücken schneller?

_

*Insgesamt entwickle ich auf einem Linux wesentlich lieber, sehe aber einen Vorteil in der .NET-Welt, wenn man mal schnell eine Desktopanwendung bauen möchte, also ohne die UI selbst zu code. Das wirkt irgendwie durchdachter auf mich. Mit zunehmenden Projektumfang wird dieser Vorteil IMHO unwichtig.
Gerade wenn die UI etwas dynamischer, umfangreicher und "schöner" werden soll, finde ich (jetzt wird's gefährlich :D) Java-Swing wesentlich schöner, weil man damit IMHO sehr gut UIs selbst coden kann.
Ja, C# geht auch abseits der Windows-Welt, aber irgendwie hat es das noch nicht auf meine Speisekarte geschafft.
 
Früher hab ich Java geliebt, Anfangs gab es VisualCafe mit dem man GUI's wie in Visual Studio einfach zusammenklicken und durch Interaktionen miteinander verknüpfen konnte - auch komplexere mit z.B skalierenden Elementen usw .. nur wurde davon die Entwicklung irgendwann eingestellt und es lief nicht mehr mit neueren Java-Versionen - fast gleichzeitig ist C# erschienen, das mit Visual Studio praktisch die gleiche Funktionalität mitbringt, auch wenn anfänglich C# nur theoretisch Open-Source war und es keine Implementierungen für andere Plattformen gab, so hat Microsoft durch die Offenlegung des .NET dafür gesorgt das es auf alle möglichen Plattformen portiert wurde. Ich sehe C# auch als Kind von C++ & Java, es übernimmt von beiden Vorgängern die positiven Aspekte und warf die Probleme über Bord. Inzwischen programmiere ich praktisch nichts mehr in Java.
 
Java hat in vieler Hinsicht als Technik Vorreiter die Softwareentwicklung vorangetrieben. Hier geht es um grosse Fortschritte wie compile-once-run everywhere, Garbage Collection, Leichter lesbarer Code durch unkrypitsche Syntax. Filenamen Konventionen, Umfangreiche Bibliotheken für UI, Netzwerkprogrammierung etc.

Das alles bietet heute C# mehr oder weniger auch bis auf die echte plattformunabhängige Runtime Umgebung.
Insofern ist es eine Me Too Sprache was es natürlich nicht schlecht macht. Es kollidiert aber an einigen Stellen mit dem Open Source Gedanken, da ein Konzern die Hand Darüber haltet.
 
Mir persönlich ist es relativ egal, was vorne dran steht. Beide (Java und cs) gehören zur C Familie, das reicht mir an der Stelle schon.
Größeres Problem seh ich ehrlich gesagt in der Anwendung. Wenn aus Java auf die Windows API zugegriffen werden kann, dann läuft was schief, ebenso wie wenn Java - oder C#! — als glorifiziertes Batch mißbraucht wird.

Beide machen Spaß. Aber fairerweise sollte man möglichst nicht zwischen beiden hin und her springen. Das geht dann doch eher schief.

Ich bin ehrlich gesagt nicht ganz sicher was es ist, grad auch im Bezug auf die JVM und deren Eigenheiten. Vielleicht ist es so wie der TO sagt. C# ist freundlicher. Aber Java ist solider. Properties in CS mag ich allerdings auch lieber als explizite getX und setX Methoden. Andererseits sollte gemäß OO keine Methode etwas anderes als void liefern, sodaß streng genommen Java sauberer sein könnte.

Aber wie gesagt. Beide werden oft genug vom “Programmierer” mißhandelt.
 
OO manipuliert Objekte. Rückgabewerte von Methoden, wenn es welche gibt, beschreiben den Status der Operation... aber dafür gibt es insbesondere auch generierbare Ausnahmen.

Deswegen sind das auch Methoden, keine Prozeduren und auch keine Funktionen.

Sauberes OO hat daher entweder
static void DoSomethingWith(object input) throws OperationException
oder
void MyObject.ManipulateMeUsing(object param1, ...object paramN) throws ManipulationException

wobei natürlich verschiedene Ausnahmeklassen geworfen werden können, je nach Bedarf.
 
  • Gefällt mir
Reaktionen: new Account()
new Account() schrieb:
Ich halte von der Frage nichts....
Vielen Dank für diesen Hinweis. Ich werde jetzt auch in jedem Thread, der mich nicht interessiert, sagen, dass er mich nicht interessiert. Wenn nur alle so wären wie du...
 
  • Gefällt mir
Reaktionen: LukS und Hayda Ministral
Er hat ja nicht gesagt, dass es ihn nicht interessiert, sondern die Frage an sich kritisiert und da würde ich mich anschließen. Wenn man die Sprachen im Universum aller Sprachen betrachtet, gleichen sie sich wie ein Ei dem anderen.

Hättest du jetzt z.B. Java mit Go für die professionelle Entwicklung von Software verglichen, wäre da mehr Fleisch in der Diskussion und nicht nur syntax sugar und ein bisschen Struktur der Dateien.

Um doch noch inhaltlich was beizutragen, hier meine subjektive Meinung: Java ist für mich überflüssig seit Kotlin und C# ist irrelevant, da zu Windows-fokussiert und daher Nische.
 
RalphS schrieb:
Andererseits sollte gemäß OO keine Methode etwas anderes als void liefern,...

Das versteh ich jetzt nicht. Es gibt doch z.B. genug Design Patterns (wie z.B. das Factory Pattern), die ganze Objekte zurückliefern.
 
Zurück
Oben