C auslassen, oder vor c++ lernen?



  • Hallo,

    man möge mich nicht erschlagen. Diese Frage wurde sicher zu Hauf beantwortet. Dennoch würde ich gerne ein paar frische Meinungen dazu hören ob es Sinn macht C vor C++ zu lernen, oder man lieber direkt C++ lernen sollte.

    Wie ist die Schwierigkeit C zu lernen, und wie ist sie für C++? Und ist der Umstieg von C auf C++ einfacher?

    Naja, ich denke der Kern der Frage ist schon angekommen. Wie sind die Meinungen hier?

    Danke und Gruß
    Ohne_Ahnung



  • Die letzte solche Diskussion ist in eine Diskussion ob C nun eine Untermenge von C++ ist oder nicht.
    Dann gab es verschiedene Meinungen, aber sicher ist, dass wenn du sowieso C++ lernen willst du das auch ohne C tun kannst und später immer noch C lernen kannst, der Umstieg von C++ nach C wird nicht dramatisch schwer sein, andersrum musst du allerdings schon eine ganze Menge noch dazu lernen.
    Auf das was du tun SOLLTEST wirst du hier keine klare Meinung bekommen.



  • Der Umstieg von C++ auf C ist äusserst lästig, aber die meisten werden wohl nie umsteigen müssen.
    Der Punkt ist der: "unlearning" ist schwer, und wenn man C++ lernt nachdem man C gelernt hat, sollte man einiges "unlearnen", wenn man nicht grausamen Code schreiben will.

    Von daher vermutlich besser gleich mit C++ anzufangen.

    Ich war da früher anderer Ansicht, aber mittlerweile bin ich auch der Meinung dass man sich damit bloss unnötig Klötze in den Weg, wenn man zuerst C lernt.

    Der minimale Nutzen dass man bei einigen Dingen einen "tieferen" Einblick in die Materie erhält (weil C eben wenider "high-level" Funktionen anbietet) kann die Nachteile wohl nie aufwiegen.

    -----

    Wenn jmd. "ganz unten anfangen" will, dann soll er besser erst Assembler lernen, und dann gleich C++.



  • C ist insofern eine Teilmenge von C++, als der Grossteil der Sprachmittel und der Standardbibliothek von C übernommen wurde.

    Trotzdem gibt es für sehr viele Anwendungsfälle neuere (ich meine bessere) Möglichkeiten in C++. Mit der Objektorientierung und Templates kommen noch totale Konzeptbrüche dazu. Die Art und Weise, ein Problem anzugehen, kann sich in beiden Sprachen von Grund auf unterscheiden.

    Von daher kannst du gut direkt mit C++ anfangen. Falls du dich später immer noch mit C befassen willst, kannst du das ohne Weiteres tun. Aber es ist nicht Voraussetzung für C++ und ist dir in vielen Fällen eher hinderlich als hilfreich, weil du dich ständig umgewöhnen musst.



  • Ich kann mich meinen Vorrednern nur anschließen. Außerdem sparst du dir dann das Gemosere hier im Forum das vielen entgegenschlägt die in ihrem C++-Code C-fragmente einbauen 😉



  • Ich bezweifle, dass jemand, der erst C gelernt hat, dann auf C++ umgestiegen ist, und es nie richtig begriffen hat, heute ein besserer C++-Programmierer wäre, wenn er C ausgelassen hätte.
    Ansonsten ist es natürlich Zeitverschwendung, C zu lernen, wenn man C gar nicht können will. Was natürlich nichts darüber aussagt, ob man C können will oder nicht 😃



  • Ich hab halt C gelernt weil's damals C++ noch gar nicht gab.
    Aber wenn du nicht lowlevel-Sachen/bof's programmieren willst brauchst du es eher nicht.

    C++ ist einfach viel bequemer.



  • Also ich benutze immer VB! Läuft ganz toll. Keine nutzlosen Pointer, Referenzen, Templates, usw.



  • also, für größere software-projekte bietet sich c++, bzw allgemein eine object-orientierte sprache an.
    wenn du sowieso neu anfängst, wirst du wohl mit klassen noch nicht viel zu tun bekommen. allerdings sagt mir die erfahrung, dass sich große projekte damit sehr viel einfacher ordnen und gliedern lassen und die code-lesbarkeit "allgemein" besser ist (mal davon abgesehen, dass das auch eine frage des coding std's ist).

    zudem wirst du bei vielen software libs auf oo-designs stoßen. Qt ist zum beispiel ein beispiel dafür. opengl oder sdl, zeigen als gegenbesipeil auch, was man als reiner c-programmierer nicht hat. zb überladene funktionen, was ua. opengl und sdl sehr viel unübersichtlicher gestaltet.

    ich bin evtl. etwas voreingenommen, aber es ist doch wirklich so. bei größeren projekten hat man mit c oft zig tausend verschieden benannte funktionen, mit gering abgeänderten argumenten. und die einarbeitungszeit in solche bibs ist dementsprechend länger.

    die frage ob man jetzt c oder c++ lernt, sollte sich für den anfänger eigentlich nicht stellen. wenn du c++ kannst, wirst du auch mit c automatisch umgehen können. man lernt sowieso nie aus und die frage nach der effektivsten möglich zu programmieren stellt sich als anfänger auch nicht, aber es gibt nix, was du als c++ lernender auslassen würdest aber essentiell für die sprache c wäre. umgedreht ist es aber so!

    zudem wirst du auch größere probs haben wenn du mal in java programmierst oder python. eigentlich sind alle modernen sprachen objekt-orientiert. du kannst dich so besser in so ein konzept denken, als wenn du davon noch nie was gehört hast.

    TROLL abschnitt:
    ach ja, und meine meinung ist auch, dass c eine untermenge von c++ ist, weil c++ alle funktionen von c unterstützt umgekehrt aber nicht. (das ist auch die definition von untermenge)
    desweiteren denke ich auch, dass der linux kernel endlich in c++ geschrieben werden soll 🕶
    und ich denke auch das opengl 3 auch lieber auf c++ hätte umgestellt werden sollen, mit restloser streichung aller unnötigen alten funktionen, die kein schwein mehr braucht.




  • Administrator

    Wenn schon solche Links kommen, will ich auch noch einen hinwerfen:
    http://david.tribble.com/text/cdiffs.htm

    Grüssli



  • Ich denke mal, dass vielleicht ich als Anfänger in C++ was dazu sagen kann und darum will ich das mal tun. 🙂

    Wenn ich C++ Lektüre gelesen habe, dann hatte ich oft die Schwierigkeit, dass viele Themen mit "bekannt aus C" abgetan wurde. Da musste ich erstmal schauen was gemeint ist und wie es funktioniert. Das ist manchmal nervig.
    Das schwierigste sind Zeiger in C. Ich programmiere schon länger mit Java und ganz früher Pascal und kenne so etwas gar nicht. Das hat mir manchmal den letzten Nerv geraubt. Aber mittlerweile denke ich habe ich einen kleinen Einstieg in C++ gefunden. Und weil ich C++ (naja) kann ist C gar nicht mehr so schwer. So habe ich praktisch einen Einstieg in 2 Sprachen.
    Außerdem kann ich mir sehr gut vorstellen, dass wenn man mit C beginnt und dann zu C++ übersteigt, dass man dann mit der Objektorientierung ein paar Schwierigkeiten hat. Gerade weil man das aus C nicht gewohnt ist.

    Also darum bin ich dafür gleich mit C++ anzufangen und bei gelegentlichen Fragen und Interesse auf C zu schauen. Da hat man viel mehr von. 🙂



  • Neuling09 schrieb:

    Wenn ich C++ Lektüre gelesen habe, dann hatte ich oft die Schwierigkeit, dass viele Themen mit "bekannt aus C" abgetan wurde. Da musste ich erstmal schauen was gemeint ist und wie es funktioniert. Das ist manchmal nervig.

    Dann benutzt du aber Bücher die für Leute gedacht ist die C schon können.
    Ich persönlich habe kein Buch das so etwas sagt, höchstens informiert das dieses Sprachmittel aus C kommt.
    Und wenn der "Kritiker" schon was von der Homepage von Stroustrup verlinkt, kann er auch gleich dessen Meinung zu diesem Thema verlinken:

    Knowing C is a prerequisite for learning C++, right?
    Wrong. The common subset of C and C++ is easier to learn than C. There will be less type errors to catch manually (the C++ type system is stricter and more expressive), fewer tricks to learn (C++ allows you to express more things without circumlocution), and better libraries available. The best initial subset of C++ to learn is not "all of C".
    See Learning Standard C++ as a New Language for a discussion of the choice of C++ constructs, techniques, and libraries for early learning. For an example of books that takes that approach systematically, see Stroustrup: Programming: Principles and Practice using C++ and Koenig&Moo: "Accelerated C++" from Addison Wesley's C++ In Depth series.

    Quelle: http://www.research.att.com/~bs/bs_faq.html#prerequisite



  • Neuling09 schrieb:

    Ich denke mal, dass vielleicht ich als Anfänger in C++ was dazu sagen kann und darum will ich das mal tun. 🙂

    Wenn ich C++ Lektüre gelesen habe, dann hatte ich oft die Schwierigkeit, dass viele Themen mit "bekannt aus C" abgetan wurde. Da musste ich erstmal schauen was gemeint ist und wie es funktioniert. Das ist manchmal nervig.

    Dann hast du das falsche Buch gekauft. Bücher für Programmieranfänger sollten nicht voraussetzen, das man schon eine andere Sprache kennt. Wenn sie das tun, ist man kein Anfänger mehr.

    Es gibt genug C++-Bücher, wo der Autor selber noch in einer C-Welt lebt. Und dann ist das Buch schlecht.

    Es gibt Bücher die explizit C++ für C-Programmierer sind. Da ist es berechtigt.

    Es gibt Bücher, die sich C/C++ nennen. Da ist es normal das C vorkommt.

    In einem C++-Buch für Anfänger sollte aber nichts von C drin stehen bzw. keine Voraussetzung sein!

    Bücher wie der "C++ Primer" oder http://www.oop-mit-cpp.de erzählen nichts von C! Und die gehören auch mit zu den besten C++-Büchern.



  • Ich hab von Anfang an C++ gelernt. Ich wusste zwar dass theoretisch C in C++ enthalten ist, vor allem dass C++-Compiler C übersetzen können (zumindest fast, wenn man von den C99-Features mal absieht die in C++ enthalten sind), aber dennoch habe ich es nicht für nötig gehalten mich mit C zu beschäftigen.
    Man könnte denken dass wenn man C++ lernt, C direkt mit dabei ist. Dem ist aber nicht so, weil zu einer Sprache nicht nur die Syntax und die ethaltenen Schlüsselwörter usw. gehören, sondern auch die Semantik. Und die ist nunmal sehr unterschiedlich. Viele Dinge, die in C gang ung gäbe sind, könnte man von der Syntax her zwar in C++ machen, sie sind aber nicht üblich und meistens auch nicht sinnvoll, weil sie durch die zusätzlichen Paradigmen udn Mechanismen in C++ ersetzt worden sind. Wenn man sich C-Code anschaut, sieht man z.B. die wildesten Verrenkungen mit Pointern, es werden mit Pointern Argumente übergeben, hin- und hergecastet, arithemtische Operationen auf dynamischen Arrays betrieben usw. Sowas ist für einen C-Entwickler das tägliche Einmaleins, in C++ werden diese Mechanismen durch Objektorientierung, Polymorphie, Templates usw. ersetzt und deshalb sind sie für uns ungewohnt und sorgen hier und da für Kopfschmerzen.
    Eine Sprache zu lernen heißt vor allem, ihre Anwendung zu lernen. Und wenn man C++ lernen möchte dann braucht man sicher nicht in erster Instanz die Anwendung von Pointerspaghetti zu lernen sondern kann sich auf die Abstraktionen konzentrieren, die in C eher fremd sind (bzw. anders umgesetzt werden).

    Fang gleich mit C++ an, damit lernst du auch gleich alles an C was man für C++ braucht.



  • ich habe mich früher mit pointern auch ne weile schwer getan, und ein bekannter auch. der hatte meistens referenzen benutzt wos ging.

    aber zeiger sind nunmal einer der wichtigsten features der sprache um schnell auf große objekte zuzugreifen. darum sollte man den umgang mit ihnen schon lernen bevor man klassen schreibt oder stl benutzt.



  • dgrat schrieb:

    aber zeiger sind nunmal einer der wichtigsten features der sprache um schnell auf große objekte zuzugreifen. darum sollte man den umgang mit ihnen schon lernen bevor man klassen schreibt oder stl benutzt.

    Natürlich kommt man auch in C++ nicht um Zeiger herum. Jedoch kann man deren Anwendung in der Praxis auf ein Minimum beschränken, was oftmals zu schönerem, leicht wartbarem und weniger fehleranfälligem Code führt. In C++ steht einem im Gegensatz zu C diese Möglichkeit zur Abstraktion frei.



  • dgrat schrieb:

    ich habe mich früher mit pointern auch ne weile schwer getan, und ein bekannter auch. der hatte meistens referenzen benutzt wos ging.

    aber zeiger sind nunmal einer der wichtigsten features der sprache um schnell auf große objekte zuzugreifen. darum sollte man den umgang mit ihnen schon lernen bevor man klassen schreibt oder stl benutzt.

    Ähmmm, auch wenn Zeiger ihre Relevanz haben (Auch wenn ich nicht meine, das man sie zwangsweise vor Klassen oder der STL benötigt - es geht häufig gerade am Anfang auch ohne), ist das Argument "schnell auf große Objekte" nicht den Zeigern vorbehalten - das gilt auch für Referenzen.

    Und ja, ich nutze Referenzen wo es geht, aber Zeiger dort wo sie nötig und sinnvoll sind.

    Aber was bitte hat das mit "C auslassen, oder vor C++ lernen" zu tun. Es gibt Gemeinsamkeiten zwischen C und C++ die in beiden Sprachen Sinn machen, nur setzt man in C++ in der Regel nur einen Teil der C-Features ein, und teilweise auch auf eine andere Weise.



  • es schadet übrigens auch nicht, wenn man schon am Anfang, vor dem Lernen von C und C++, eine ungefähre Vorstellung von der Funktionsweise eines Mikroprozessors hat, und weiß, was indirekte Adressierung, Heap und Stack sind - das erleichtert das Verständnis von hardwarenahen Konzepten in C und C++, bspw. Zeiger und Arrays.

    just my EUR 0.02



  • u_ser-l schrieb:

    es schadet übrigens auch nicht, wenn man schon am Anfang, vor dem Lernen von C und C++, eine ungefähre Vorstellung von der Funktionsweise eines Mikroprozessors hat, und weiß, was indirekte Adressierung, Heap und Stack sind - das erleichtert das Verständnis von hardwarenahen Konzepten in C und C++, bspw. Zeiger und Arrays.

    Es ist ebenso vorteilhaft, wenn man schon Funktionen oder Objektorientierung aus einer anderen Sprache kennt. 😉

    Was aber nicht heisst, dass man sich deshalb speziell vorbereiten sollte, bevor man mit C++ anfängt.


Log in to reply