Don P: C, C++ oder C# noch in diesem Leben lernen?

Hallo Cracks,

Mal zu den Lernkurven für C, C++ oder C# (Cis oder C-sharp oder wie wird das gesprochen?): Ich kenne keine dieser Sprachen, habe von C nur eine blasse Ahnung, d.h. schon mal Quellcode gesehen und von Zeigern gelesen (wenn ich nicht irre), was mich aber ziemlich abschreckte. In C muss man scheint's so gut wie alles "zu Fuß" machen.

Was ich kenne sind ein paar Scriptsprachen wie Perl, JavaScript, Framescript, Batch-Programmierung unter DOS und Windows sowie früher mal 8086-Assembler, DBase bzw. Clipper und ein bisschen Pascal. Letztere sind ja heute nicht mehr zu gebrauchen.

Zur C-Familie habe ich im Archiv
diesen Thread gefunden, wonach C++ und C# objektorientiert sind, C eigentlich gar nicht. Und C# geht anscheinend nicht ohne .NET, was immer das genau sein mag.

Hier also meine Frage(n):
Wenn ich jetzt C++ oder C# lernen will, geht das überhaupt ohne C zu beherrschen?
Wie lange braucht man, wenn man nicht ganz auf den Kopf gefallen ist, um so eine Sprache zu lernen bzw. einigermaßen zu beherrschen?
Ich vermute mal, dass man die Syntax relativ schnell intus hat und das Gros dann aus einem Sammelsurium von Bibliotheksfunktionen besteht, die man gut kennen sollte, d.h. besonders die einzelnen Bugs jeder Funktion und den entsprechenden Workaround. Kommt das etwa hin und kann man das irgendwann überschauen, oder sehe ich das zu schwarz oder zu optimistisch?

Was habt ihr für Erfahrungen?

Gruß, Don P

  1. Yerf!

    Hier also meine Frage(n):
    Wenn ich jetzt C++ oder C# lernen will, geht das überhaupt ohne C zu beherrschen?

    Im Prinzip ja, für manche ists sogar hinderlich, weil man mit C erst mal prozedurales Programmieren lernt und dann mit C++ auf OOP umschwenken muss. C# ist sowieso nochmal anders, das kann man eher mit Java vergleichen.

    Wie lange braucht man, wenn man nicht ganz auf den Kopf gefallen ist, um so eine Sprache zu lernen bzw. einigermaßen zu beherrschen?

    Schwer zu sagen. C ist an sich erst mal nichst schwer, da relativ übersichtlich. Die Schwierigkeit liegt eher darin, aus dem ganzen was brauchbares zu machen (d.h. man braucht am besten gute Zusatzbibliotheken). C++ hat nen deutlich größeren Umfang. Für jemanden der von Scriptsprachen kommt, dürfte der Einstieg in C# am leichtesten fallen (automatische Speicherverwaltung uns so inklusive). Und das .NET Framework ist so ähnlich wie die Java-Runtime, die man braucht um Java-Programme auszuführen. Für Linux gibts das ganze unter dem namen Mono.

    Ich vermute mal, dass man die Syntax relativ schnell intus hat und das Gros dann aus einem Sammelsurium von Bibliotheksfunktionen besteht, die man gut kennen sollte, d.h. besonders die einzelnen Bugs jeder Funktion und den entsprechenden Workaround. Kommt das etwa hin und kann man das irgendwann überschauen, oder sehe ich das zu schwarz oder zu optimistisch?

    Hm, aber das ist glaub ich bei fast jeder Sprache so, oder?

    Was habt ihr für Erfahrungen?

    In C hab ich ganz gut einen Einstieg gefunden, wärend C++ mich doch etwas erschlagen hat, evtl. auch, weil Objektorientiertes Programmieren unter Java (was ich vorher schon mal gemacht hab) viel "schöner" ist. Deshalb hab ich mich dann auch in C# recht schnell heimisch gefühlt.

    Persönlich würde ich aber immernoch Java als Sprache empfehlen (muss mich mal meinem Tomcat hier auf dem lokalen Server zuwenden ;-)

    Gruß,

    Harlequin

    --
    <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
  2. Hallo,

    Was ich kenne sind ein paar Scriptsprachen wie Perl, JavaScript, [..]

    Bei mir war es genau umgekehrt, ich bin von C, C++ (Crashkurs vom AA 1995/1996) zu Perl (beruflich gefordert später 1998) gekommen. Zwischendurch hab ich mir die Zeit (arbeitslos) mit Pascal (Delphi) vertrieben.

    In Perl war ich nach ein paar Tagen fit um damit die ersten CGI's zu schreiben (Danke SELFHTML und FORUM!).

    Fazit: Wenn Du überhaupt schon einmal was programmiert hast, ist der Umstieg von einer Sprache auf eine andere Sprache nicht schwer.

    Viele Grüße und viel Erfolg!
    Hotte

  3. Hellihello Don P,

    Hallo Cracks,

    nun, dann sach ich eben nischt.

    Hier also meine Frage(n):
    Wenn ich jetzt C++ oder C# lernen will, geht das überhaupt ohne C zu beherrschen?

    C Code kannst Du auch als C++ verwenden. Mittlerweile denk ich, ein bissel C hat noch keinem geschadet, oder: wer C nicht ein bisschen kennt, hat was verpasst.

    Auch schonmal hieran gedacht https://forum.selfhtml.org/?t=161260&m=1049059? Python, auf dem 100-Dollar-Laptop.

    Zu C# und Java haste ja schon Kommentare. Java sei jetzt GPL habich gehört. C# ist Kleinstweich und hat sich das mit der Runtimeenvironemt von Java abgeschaut?

    Dank und Gruß,

    frankx

  4. Hallo Cracks,

    Ich hoffe, auch ich als 'nicht-Crack' darf dir antworten ;)

    Hier also meine Frage(n):
    Wenn ich jetzt C++ oder C# lernen will, geht das überhaupt ohne C zu beherrschen?

    Bei C# ein klares ja. C# hat außer der Syntax nicht wirklich viel mit C gemeinsam, sondern ist quasi Microsofts Version von Java und auch als Anfängersprache geeignet.

    Wie lange braucht man, wenn man nicht ganz auf den Kopf gefallen ist, um so eine Sprache zu lernen bzw. einigermaßen zu beherrschen?

    'Einigermaßen' beherrschen - vielleicht ein paar Wochen? 'Richtig' beherrschen? Jahre.

    Ich vermute mal, dass man die Syntax relativ schnell intus hat und das Gros dann aus einem Sammelsurium von Bibliotheksfunktionen besteht, die man gut kennen sollte, d.h. besonders die einzelnen Bugs jeder Funktion und den entsprechenden Workaround. Kommt das etwa hin und kann man das irgendwann überschauen, oder sehe ich das zu schwarz oder zu optimistisch?

    Bei C# würde ich deiner Einschätzung zustimmen.

    Um vernünftig mit C klarzukommen, braucht man etwas mehr an Übung. Dafür kann man aber auch z.B. mit Zeigern und einem kleinen Bisschen Makro-Magie Dinge anstellen, die in eigentlich 'höheren' Sprache teilweise weniger elegant zu lösen sind. Das schöne dabei ist, dass man (soweit ich das mit meinem Wissen abschätzen kann) die Sprache C vollständig verstehen kann.

    C++ hingegen kann alles, was C kann - aber eben noch VIEL mehr. C++ ist eine Multi-Paradigmen-Sprache - Objekt-Orientierung, Meta-Programmierung mit Templates (und was es da noch so alles gibt) führen dazu, dass es angeblich niemanden gibt, der tatsächlich alle Möglichkeiten, die die Sprache bietet, verinnnerlicht hat (was aber auch gar nicht nötig ist).

    Was habt ihr für Erfahrungen?

    Auch wenn du nicht direkt danach gefragt hast, vielleicht noch ein paar weitere Hinweise zu den genannten Sprachen:

    C# ist für Anfänger geeignet, besitzt eine große Standardbibliothek und man hat wenig Möglichkeiten, sich selbst 'in den Fuß zu schießen'. Die Stärken von C# liegen klar in der Anwendungsentwicklung, die Sprache ist in meinen Augen aber eher 'langweilig'.

    C ist für viele Anwendungsgebiete nicht mehr erste Wahl - es sei denn, höchstmögliche Performance oder Hardware-nahe Programmierung ist von Nöten (grundsätzlich kann man in solchen Fällen auch zu C++ greifen). Mir persönlich macht C-Programmierung Spaß, auch (oder gerade weil - Masochismus und so? ;)), wenn es ziemlich mühsam werden kann.

    Um C++ habe ich bisher einen Bogen gemacht - die Sprache ist mir zu 'monströs' - was man der Sprache natürlich auch positiv anrechnen kann: Niemand wird schleßlich dazu gezwungen, tatsächlich alle Sprach-Features zu verwenden.

    Und weil's so schön ist, würde ich noch zwei weitere C-ähnliche Sprachen in die Runde werfen:

    Objective-C ist C erweitert um Smalltalk-inspirierte Objekt-Orientierung. Als Hybrid aus Hardware-naher und dynamischer Sprache gefällt sie mir konzeptionell, die Syntax hingegen finde ich eher hässlich.

    Die Sprache D von Digital Mars ist eine Art Re-Implementierung von C++ - quasi 'C++ done right'. Ich habe noch nie damit gearbeitet, aber nach dem, was ich bisher davon gesehen habe, könnte ich mir durchaus vorstellen, dass sich das in Zukunft ändert.

    Gruß
     Christoph

  5. Hallo,

    [...] habe von C nur eine blasse Ahnung, d.h. schon mal Quellcode gesehen und von Zeigern gelesen (wenn ich nicht irre), was mich aber ziemlich abschreckte. In C muss man scheint's so gut wie alles "zu Fuß" machen.

    gerade das macht C meiner Ansicht nach so attraktiv.

    Was ich kenne sind ein paar Scriptsprachen wie Perl, JavaScript, Framescript, Batch-Programmierung unter DOS und Windows sowie früher mal 8086-Assembler, DBase bzw. Clipper und ein bisschen Pascal. Letztere sind ja heute nicht mehr zu gebrauchen.

    Ich habe den skizzierten Weg quasi umgekehrt beschritten: Als Jugendlicher ein wenig mit BASIC gespielt, dann in Assembler Blut geleckt (zunächst auf der 6502-Familie), später Pascal, noch später C gelernt, kurz darauf x86-Assembler kennen und lieben gelernt. C++ ergab sich dann irgendwann "zufällig", und als ich das Internet für mich entdeckt habe, kamen noch Javascript und PHP dazu. C++ mag ich nicht so, und OOP ist allgemein auch nicht so mein Ding, obwohl ich vom Denkansatz her auch in C oder Assembler objektorientiert programmiere.

    Wenn ich jetzt C++ oder C# lernen will, geht das überhaupt ohne C zu beherrschen?

    Ja, vielleicht sogar besser. Obwohl ich der Ansicht bin, solide C-Grundkenntnisse sind eine wertvolle Basis. Immerhin baut auch die Syntax von Javascript und PHP sehr stark auf den Strukturen von C auf.

    So long,
     Martin

    --
    Es gibt Dinge, die sind sooo falsch, dass nicht einmal das Gegenteil stimmt.
    1. Hellihello Martin,

      ... obwohl ich vom Denkansatz her auch in C oder Assembler objektorientiert programmiere.

      Magst Du dazu noch ein paar Schlüsselworte verlieren? Wie machst Du das? Auch in Assembler? Ich kenn das kaum, sah bisher nur push und mov und eax (;-). Aber vielleicht sachte und erstmal, was Denkansatz OOP in C bedeutet? Findet sich das auch in den Kerneln wieder oder den Header-Dateien?

      Dank und Gruß,

      frankx

      1. Hallo,

        ... obwohl ich vom Denkansatz her auch in C oder Assembler objektorientiert programmiere.

        Magst Du dazu noch ein paar Schlüsselworte verlieren? Wie machst Du das? Auch in Assembler?

        na klar. ;-)
        Eine Grundidee der OOP ist doch, Daten und den zugehörigen Code zu einer Einheit zusammenzufassen und den Code so zu implementieren, dass die genaue Realisierung von außen betrachtet unerheblich ist, weil eine klar definierte Schnittstell existiert (-> Kapselung).

        Das kann man auch in reinem C oder Assembler machen: Man schreibt ein in sich abgeschlossenes Programmodul, das eine einheitliche Aufrufschnittstelle hat, und macht nur diese Schnittstelle und die zugehörigen Datentypen und Strukturen nach außen bekannt.

        Ein weiteres Paradigma der OOP, die Polymorphie, besagt, dass unterschiedliche Klassen/Objekte sich nach außen hin gleich darstellen, so dass es dem übergeordneten Code egal sein kann, welches Objekt genau darunter liegt. Das realisiere ich dadurch, dass ich Module mit unterschiedlicher Funktion, aber möglichst gleicher Schnittstelle schreibe, die dann problemlos austauschbar sind.

        Und der dritte Grundsatz der OOP, die Vererbung, kann ebenso auf Modulebene realisiert werden: Modul A benutzt Modul B, ergänzt ein bisschen spezielle Funktionalität, und gibt sich nach außen doch als Typ B aus.

        Ich kenn das kaum, sah bisher nur push und mov und eax (;-). Aber vielleicht sachte und erstmal, was Denkansatz OOP in C bedeutet?

        Es ist schwierig, das jetzt in ein paar Sätzen wiederzugeben. Der Knackpunkt ist, dass OOP ein Denkmodell der Programmierung ist, das man auch anwenden kann, wenn die verwendete Programmiersprache selbst keine OOP-Elemente hat.

        Findet sich das auch in den Kerneln wieder oder den Header-Dateien?

        Prominentestes Beispiel: Der Windows-Kernel ist größtenteils in C, zu einem kleineren Teil in Assembler geschrieben. Trotzdem ist Windows in weiten Teilen objektorientiert gestrickt.

        Schönen Abend noch,
         Martin

        --
        Wichtig ist, was hinten rauskommt.
          (Helmut Kohl, 16 Jahre deutsche Bundesbirne)
  6. Hallo Don P,

    Was habt ihr für Erfahrungen?

    Ich habe bislang nur mit C++ Erfahrung gemacht, habe allerdings auch mal kurz in C reingeschnuppert. C# habe ich bislang nur kurz bei meinem damaligen Zimmerkollegen gesehen.

    Grundsätzlich ist C++ ja gewissermaßen C mit vielen Erweiterungen - und das merkt man an der Komplexität der Sprache.
    C# ist eine Eigenentwicklung von Microsoft und hat erst mal überhaupt nichts mit C und C++ zu tun. Wie bereits gesagt wurde ist C# eher mit Java zu vergleichen.

    Meiner Erfahrung nach wird C/C++ und auch Java häufig in Unternehmen eingesetzt (C# auch zunehmend, aber vor allem C++).

    Empfehlen würde ich dir, die Sprachen Java und C++ zu erlernen - in dieser Reihenfolge.

    C# ist zwar neuer als Java, hat insbesondere diese Nachteile:

    • Der Sprachkern ist offen, aber viele der Bestandteile die man zur täglichen Arbeit benötigt sind es nicht. Dies betrifft insbesondere die Grafik-Bibliotheken.
    • C# ist nur auf Windows-Plattformen gut einsetzbar. Natürlich gibt es auch Portierungen, aber Microsoft gibt die neuesten Bibliotheken natürlich nur für Windows raus. Und die Beteiligung an OpenSource-Projekten wie Mono lässt sich schnell wieder kappen.
    • C# ist von Microsoft. Und Microsoft hat in der Vergangenheit stets versucht sein Monopol mit allen Mitteln zu erhalten - das wird bei C# nicht anders sein.

    Java ist natürlich auch zunächst eine proprietäre Entwicklung von Sun. Aber: Es wird für die wichtigsten Plattformen in gleicher Zeit freigegeben, und in wenigen Monaten ist es auch (inklusive dem JDK) OpenSource, sodass für die Zukunft gewährleistet ist, dass die Weiterentwicklung und Wartung nicht einfach durch die Entscheidung eines Unternehmens eingestellt wird.

    Grüße

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
  7. Moin,

    In C muss man scheint's so gut wie alles "zu Fuß" machen.

    Wenn du auf die Grund-API anspielst, hast du recht. Du findest aber für so ziemlich alles, was du dir vorstellen kannst, fertige Bibliotheken.

    Zu finden z.B. hier: http://www.gnu.org. Anderes Beispiel: Java kann von Haus aus XML. C nicht. Aber es gibt z.B. die xmllib2: http://www.xmlsoft.org.

    D.h.: Zu Fuß musst du gar nichts machen, du kannst es aber.

    Übrigens: Was OOP in C angeht. Es gibt eine Bibliothek, die das ermöglicht. Stichwort gObject.

    Gruß

    Stareagle

  8. Hallo,

    Wow, das ist ja eine Menge an Informationen, viielen Dank erstmal euch allen.

    Das muss ich alles mehrfach in Ruhe durchlesen, um mir ein Bild zu machen. Vielleicht sollte ich zuerst mit allem ein bisschen anfangen und dann schauen, was mir am meisten liegt bzw. für meine Zwecke am besten zu gebrauchen ist. Schau mer mal...

    Gruß, Don P

  9. Hi,

    aus persönlicher Erfahrung kann ich dir sagen, dass man absolut kein C oder CPlusPlus braucht um C# zu "können". Letzteres schliesst auch dir Verwendung des MS .net Frameworks ein.

    Und C# geht anscheinend nicht ohne .NET, was immer das genau sein mag.

    Zu .Net Informationen zu finden, ist nun nicht besonders schwer.

    Ciao, Frank