C# lernen

Die Programmiersprache C# und Programmierung im .NET Framework/Mono
Antworten
gizno82
Beiträge: 46
Registriert: Sa Dez 19, 2009 4:03 pm

C# lernen

Beitrag von gizno82 » Mo Jan 18, 2010 1:54 pm

Hallo Leute

Mal eine Frage ich kann C was ist sinnvoller zu lernen C++ oder C# ?
Ist C# einfacher zu erlernen als C++ ?

Gruß

gizno82

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: C# lernen

Beitrag von Xin » Mo Jan 18, 2010 3:23 pm

gizno82 hat geschrieben:Mal eine Frage ich kann C was ist sinnvoller zu lernen C++ oder C# ?
Ist C# einfacher zu erlernen als C++ ?
Die Frage ist gar nicht so einfach zu beantworten, da C# sich eher an Java anlehnt als an C oder C++. C# sieht optisch C(++) ähnlich aber in der Verpackung befindet sich eigentlich ein anderes Produkt.

Die Frage nach dem Sinn ergibt sich dementsprechend, welches Produkt Dich mehr reizt. Du wirst in C# vermutlich deutlich schneller zu sichtbaren Erfolgen kommen. Das .NET Framework nimmt Dir sehr viel Arbeit ab, so dass Du viele Probleme bereits vorgekaut geliefert bekommst. Dann kannst Du C#, aber deswegen noch lange nicht programmieren. Du wirst aber eben sehr schnell etwas haben, was Du zeigen kannst. Auf meiner Arbeitsstelle gibt es einige Leute, die das sehr schätzen und andere, die der Meinung sind, dass man mit Microsoftprodukten alles supertoll machen kann, was sich Microsoft so vorstellen kann. Leider machen wir nicht nur, was sich Microsoft gut vorstellen konnte.
Mein aktueller Job ist, das Zeug, was Microsoft in .NET vorgekaut hat, so zu erweitern, dass es Dinge kann, die als wxWidgets oder GTK nicht mit C/C++ mitgeliefert würden, aber die meine Probleme ohne mein Zutun lösen würden und die ich mit C++ nur kombinieren müsste. Es wurde sich aber auf .NET festgelegt und nun erweitere ich die vorgekauten Windows-Controls so, dass man sie sinnvoll verwenden kann.
Eine graphische Benutzeroberfläche mit dem Designer zu machen ist ja ganz nett, aber was ich brauche, kann mir der Designer nicht liefern, also bin ich schlussendlich auch beim Entwickeln deutlich langsamer, als ich es ohne Designer in C++ wäre.

C++ ist - wie C - deutlich näher an der Maschine. Wenn Dich also mehr interessiert, wie die Maschine wirklich funktioniert, wenn Du begreifen möchtest, was Du da tust, dann ist C++ der interessantere Weg. C# ist auf Windows, Linux und Mac verfügbar. Aber es ist nur auf Windows zu Hause, auf den anderen Plattformen interessiert C# nicht wirklich. C++ ist die Grundlage von allen Systemen. Wenn es also darum geht, wirklich hochperformante Software zu schreiben, ist C++ weiter.

Solange Du lernst, wird Dir C# sicherlich einige Zeit ausreichen. Die Frage ist dann, ob Du die Möglichkeiten von C++ überhaupt kennen lernst, da die Erfahrung zeigt, dass man Features, die man nicht kennt, auch nicht vermisst, also auch nicht nutzt, also die Fehler immer wieder begeht, die man nicht machen würde, würde man die passenden Features kennen.
Die Syntax von C++ ist nicht ganz so sauber wie die von C# (was das Lernen ein wenig schwieriger macht), dafür ist C++ semantisch stärker, das bedeutet, Du kannst dem Compiler genauer erklären, was Du vorhast, so dass er Dich besser darauf hinweisen kann, wenn Du Dich Dinge machst, die Deinem Plan widersprechen würden.
Auch C# hat gegenüber C++ (und Java) einige semantische Leckerbissen (override/new, out und ref), die ich aber nicht so wichtig erachte, als dass sie den Verlust von Const-Correctness rechtfertigen würden.
Ich beherrsche inzwischen C++ und nutze die Möglichkeiten, die mir C++ bietet. In der Phase, wo Du C++ lernst, wirst Du vermutlich die meisten Möglichkeiten noch gar nicht nutzen oder nachvollziehen können. Du hältst Dir mit C++ also erstmal nur die Türe offen, mehr Möglichkeiten zu erhalten.

Ich selbst programmiere beruflich C# und C++, privat - wo ich es mir aussuchen kann - ausschließlich C++. Ich habe mir den Text nochmal durchgelesen und ich denke, man hört heraus, dass ich kein C#-Fan bin.
Ich habe erst C++, dann C# gelernt. Der Wechsel ging vergleichsweise schnell, da einige Konzepte wegfallen (die ich sehr vermisse, in Strukturen eingebettete Strukturen, Const-Correctness, Mehrfachvererbung) und nur wenige andere Konzepte hinzukommen, die ich als Designfehler der Sprache verstehe (Reflection) oder die in C++ durch größere, bzw. flexiblere Konzepte abgedeckt werden (C#-Generics lassen sich sich funktionell durch C++-Templates abbilden, Generics können aber nicht Templates ersetzen, also gibt es diese Funktionalität in C# nicht, wie es genauso auch in Java ist: Java-Hass-Thread). Entsprechend ist der Weg von C# zu C++ so, dass man nicht den Spezialfall verstehen muss, den C# aus Sicht eines C++-Programmierers darstellt, sondern von einem konkreten Spezialfall die Abstraktion verstehen muss.
Aus Sicht des C#-Programmierers ist C++ die universelle Freiheit, die kein Mensch braucht und kein Programmierer kontrollieren kann (der die zusätzlichen semantischen Möglichkeiten von C++ nicht kennt), aus Sicht des C++ Programmierers ist C# eine deutliche Reduktion von Möglichkeiten und semantischer Unterstützung durch den Compiler.


Ein C++-Tutorial schreibe ich zurzeit. Wenn Du den jetzigen Inhalt des Tutorials nachvollziehen kannst, kannst Du - bis auf die Mehrfachvererbung - eigentlich das Wissen nahezu 1:1 zu C# mitnehmen. Ein C#-Tutorial ist von meiner Seite in diesem Jahr nicht geplant, dafür habe ich zuviele andere Dinge für proggen.org noch auf der Agenda. Fällt Deine Entscheidung auf C# und du hast Fragen, so kannst Du diese aber natürlich ebenfalls hier stellen.
In jedem Fall rate ich eher zu C# als zu Java.

Beide Sprachen verfolgen unterschiedliche Wege. Die Frage ist also, welchen Weg Du gehen möchtest. Möchtest Du schnell sichtbare Erfolge haben - auch gute Erfolge, dann C#. Möchtest Du die Möglichkeit haben außergewöhnliche Erfolge haben und bist bereit dafür mehr Zeit und Geduld zu investieren, dann C++.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten