Steffen: C++ oder C#

Hi,

ich habe vor, mich in nächster Zeit in eine Programmiersprache einzuarbeiten, mit der man (Windows-) Anwendungsprogramme schreiben kann.

Dabei liebäugele ich mit C++ bzw. C#.

Hat jemand von Euch Erfahrungen mit beiden und kann kurz Vor- und Nachteile gegenüberstellen?

Ein wichtiges Kriterium wäre für mich auch, wie sich Kenntnisse in der eine oder anderen Sprache bei einer Jobsuche auswirken könnte.

Ich habe bisher einiges in Assembler (für Mikrocontroller), Perl, Java und JavaScript programmiert. (Vor vielen Jahren auch mal was in C und C++, war aber eher "stümperhaft".)

Für o.g. Aufgaben kommt Java zwar prinzipiell in Frage aber irgendwie mag ich das Konzept von Java nicht (Den Resourcenverbrauch, das teils "komische" look and feel).

Gruß
Steffen

  1. Hallo,

    Dabei liebäugele ich mit C++ bzw. C#.

    dann erliege bitte nicht dem Irrtum, diese beiden Sprachen seien einander ähnlich. Tatsächlich heißt es, dass C# eher mit Java als mit C verwandt ist, wobei ich dazu sagen sollte, dass ich selbst weder Java noch C# wirklich kenne.

    Ein wichtiges Kriterium wäre für mich auch, wie sich Kenntnisse in der eine oder anderen Sprache bei einer Jobsuche auswirken könnte.

    C/C++ wird heutzutage schon oft als selbstverständlich vorausgesetzt; mit C# könntest du eventuell noch ein As im Ärmel haben.

    Ich habe bisher einiges in Assembler (für Mikrocontroller), Perl, Java und JavaScript programmiert. (Vor vielen Jahren auch mal was in C und C++, war aber eher "stümperhaft".)

    Ich selbst würde dir raten, dich in C soweit reinzuknien, dass du es "im Schlaf" beherrscht. Es dürfte auch heute noch eine der meistgenutzten Programmiersprachen sein und IMHO auf lange Zeit bleiben.

    Für einige Anwendungsfälle mag auch C++ in Frage kommen; man sollte aber beim Erlernen von C++ nicht allzusehr am klassischen C kleben. Wer C wirklich beherrscht und dann auf C++ umschwenkt, der wird sich gehörig umstellen müssen, auch wenn C++ auf C aufbaut.
    Aber C++ lässt einen Großteil der Klarheit und der Systematik von C vermissen. Sowohl die Syntax als auch die im Hintergrund (durch Compiler und Laufzeit-Mechanismen) ablaufenden Dinge sind oft mysteriös und schwer zu durchschauen, und die weniger strenge Syntax von C++ verleitet zur Schlamperei.

    Für o.g. Aufgaben kommt Java zwar prinzipiell in Frage aber irgendwie mag ich das Konzept von Java nicht (Den Resourcenverbrauch, das teils "komische" look and feel).

    Das mag sicher ein Grund sein, warum sich Java in all den Jahren noch nicht so richtig durchsetzen konnte (außer in einigen Nischenanwendungen), obwohl das Konzept, plattformunabhängige Applikationen zu schreiben, eigentlich genial ist.

    So long,
     Martin

    --
    Die beste Informationsquelle sind Leute, die jemand anderem versprochen haben, nichts weiterzuerzählen.
      (alte Journalistenweisheit)
    1. Wer C wirklich beherrscht und dann auf C++ umschwenkt, der wird sich gehörig umstellen müssen, auch wenn C++ auf C aufbaut.
      Aber C++ lässt einen Großteil der Klarheit und der Systematik von C vermissen. Sowohl die Syntax als auch die im Hintergrund (durch Compiler und Laufzeit-Mechanismen) ablaufenden Dinge sind oft mysteriös und schwer zu durchschauen, und die weniger strenge Syntax von C++ verleitet zur Schlamperei.

      Wer C wirklich beherrscht, der hat sich imperative und prozedurale Denkweise angeeignet und kommt mit den oo Konzepten von C++ nicht wirklich gut zurecht, denn hier ist ein Paradigmenwechsel erforderlich. Das hat nichts mit der Syntax zu tun sondern mit grundlegend unterschiedlichen konzeptionellen Ansätzen. Von irgend einer Programmiersprache zu sagen, sie sei klar und systematisch halte ich für irreführend, denn in jeder Sprache kannst Du unklare und unsystematische Software schreiben. Das gilt für C ebenso wie für C++ und C#.

      C und C++ waren beide deswegen so erfolgreich, weil sie zwar die Möglichkeiten bieten, klar und systematisch zu entwickeln, einmal imperativ und einmal objektorientiert, aber dem Anwender das nicht aufzwingen. Dies macht sie auf der einen Seite universell einsetzbar, auf der anderen Seite aber auch schwer beherrschbar. Es ist ein gutes Mass an Selbstdisziplin erforderlich, um strukturierten Code abzuliefern bzw. einen Wildwuchs während eines Projektes zu verhindern.

      Wichtiger als die konkrete Syntax einer Sprache sind die Konzepte und Ideen, die hinter dieser Sprache stehen, denn diese sind auch auf andere Sprachen übertragbar. Wer etwa C++ beherrscht, wird mit C# keine großen Schwierigkeiten haben, denn ihm sind z.B. die Konzepte Ableitung, Polymorphismus und generische Funktionen/Klassen schon bekannt, er weiss wie er diese Konzepte effektiv in der Entwicklung einsetzen kann. Die abweichende Syntax von C# ist dabei schnell gelernt. Der Umstieg von C nach C++ ist dagegen viel schwerer, weil neue Konzepte sowie deren effektiver Einsatz erlernt werden müssen. Darüber hinaus lassen sich C Programme ohne oder nur mit geringen Änderungen auch mit einem C++ Compiler übersetzen, was dazu verleitet in der C-Denkweise zu verharren.

      Am Schluss noch folgende Bemerkung: C# ist untrennbar mit dem .NET Framework verbunden. C# zu lernen heisst gleichzeitig, mit dem .NET Framework entwicklen zu können. Die Laufzeitsysteme von C und C++ sind dagegen Peanuts. Der Einarbeitungsaufwand ist riesig.

      MfG
      GK

      1. Hallo Gerhard,

        Wer C wirklich beherrscht, der hat sich imperative und prozedurale Denkweise angeeignet und kommt mit den oo Konzepten von C++ nicht wirklich gut zurecht, denn hier ist ein Paradigmenwechsel erforderlich.

        ACK. Das hatte ich unter anderem mit dem Teilsatz "man sollte aber beim Erlernen von C++ nicht allzusehr am klassischen C kleben" gemeint.

        Von irgend einer Programmiersprache zu sagen, sie sei klar und systematisch halte ich für irreführend, denn in jeder Sprache kannst Du unklare und unsystematische Software schreiben.

        Richtig, ich bezog das aber nicht auf die Software, die man in dieser Sprache schreibt, sondern auf den Charakter der Sprache selbst.

        Nimm als Beispiel Pascal. Pascal ist eine Sprache mit sehr strenger Syntax und äußerst konsequenter Typisierung. Pascal zu erlernen heißt automatisch und zwangsläufig, Disziplin und Ordnung zu praktizieren (oder zu lernen). Deswegen wurde (oder wird noch) Pascal in Lehr- und Studienplänen auch gern als erste Programmiersprache gelehrt.
        PHP dagegen ist das andere Extrem, weil viele kleine Fahrlässigkeiten entweder automatisch vom Interpreter ausgebügelt werden oder gar nicht erst nötig sind - etwa die formale Deklaration von Variablen oder die Beachtung von Datentypen und deren Kompatibilität untereinander. Das ist aber nicht nur eine Vereinfachung, sondern auch eine häufige Fehlerquelle.
        Dass ich hier eine Compilersprache mit einer Scriptsprache vergleiche, soll für diese Betrachtung mal keine Rolle spielen.

        Natürlich kann man nun auch in Pascal sehr konfuse Programme schreiben, und andererseits kann man auch in PHP sauber strukturierten und durchdachten Code fabrizieren. Das Problem, das ich sehe, ist aber, dass "großzügige" Sprachen auch zur Großzügigkeit und Oberflächlichkeit beim Entwickeln des damit geschriebenen Programms verleiten.

        Wichtiger als die konkrete Syntax einer Sprache sind die Konzepte und Ideen, die hinter dieser Sprache stehen, denn diese sind auch auf andere Sprachen übertragbar.

        Vom pädagogischen Standpunkt her absolut richtig. Ich habe es konkreter an bestimmten Sprachen aufgehängt.

        So long,
         Martin

        --
        Was du heute kannst besorgen,
        das geht sicher auch noch morgen.