Was zuerst lernen? C++ oder doch zuerst C?
-
@Bashar stimmt, hast recht
-
Bitte bitte auf keinen Fall etwas vom Herrn Wolf holen. Da sind nicht nur ein paar Fehler drin, der hat die gesamte Sprache nicht wirklich verstanden. Ich habe auch mit dem Buch angefangen und es ließt sich wunderbar und jeder der kein C-Profi ist wird dir auch sagen, dass das Buch toll ist. Nur eines lernst du damit nicht, richtiges C zu schreiben, ohne undefiniertes Verhalten und Speicherlecks + SegFaults.
Das Bild hier beschreibt ganz gut warum das Buch so viele positive Bewertungen hat:
http://xkcd.com/937/
-
Eventuell ist das hier etwas?: http://c.learncodethehardway.org/book/
-
Hm, ich drucke mir gerade das aus:
https://de.wikibooks.org/w/index.php?title=C-Programmierung:_Druckversion&printable=yes
Sind bei mir 261 A4 Seiten
-
C++ ist die mächtigere Sprache, die einige Programmierprinzipien fördert, die mit C nicht oder nur umständlicher möglich sind oder die man dort eben zu Fuß machen muss.
- Strengere Typprüfung (gibt mehr Sicherheit)
- Konstruktoren / Destruktoren ermöglichen automatische Initialisierung von Datenstrukturen, Smart-Pointer (höhere Sicherheit) usw.
- Templates
- Referenzen als "sichere Pointer"
- mächtige Algorithmen und Containerklassen in der STL (nie wieder Arrays... oder zumindest nicht mehr sehr oft)
- Exceptions ermöglichen es, sehr elegant auf gewisse Fehler einzugehen.
usw.Ich empfand C++ nach C nicht nur als eine andere Sprache, sondern als eine andere Ebene der Programmierung, deren Mächtigkeit aber auch erst nach einer Weile so richtig fühlbar wurde.
Ich habe einigen "C++"-Code von Programmierern gesehen, die nie wirklich aus der C-Denke herausgekommen sind. Die haben zwar einige Befehle wie
string
oder so verwendet und haben alles irgendwie in "Klassen" gepackt, aber im Grunde war alles noch C-artig. Dass man jetzt eine Klassen-Methode statt einer Funktion hat, macht noch nichts besser. Die wirklichen Stärken von C++ sind da gar nicht genutzt worden.Umgekehrt vermute ich, wer C++ richtig lernt und begreift, wird auch einen anderes C schreiben, wenn er mal wieder zurück "muss". Ggf. fallen ihm dann die Einschränkungen mehr auf und er achtet besonders darauf. Wenn man das mit den Objekten nicht übertreibt (ab und zu sind freie Funktionen die bessere Wahl als das Alles-ist-ein-Objekt-Paradigma), denke ich mal, dass jemand, der gut C++ kann, auch gutes C hinkriegt.
Du schreibst, Du willst den Raspberry programmieren? Das ist ein ausgewachsenens Linux-System, da empfinde ich C++ als die bequemere und sicherere Lösung. Du wirst Dir um Resourcen wenig Gedanken machen müssen, daher sind die vorgetragenen Argumente bezüglich Speicherallokation nicht so wichtig, wenn man es nicht übertreibt und mal hier und da ein paar
strings
oder vectoren erzeugt.Für die "nackten" Mikrocontroller wie die ATMELS (inkl. Arduino), PICs usw., ist aufgrund der begrenzten Resourcen in der Tat C der bessere Weg. Man hat dort im Allgemeinen auch weniger mit dynamisch generierten Objekten zu tun, die durch die Gegend geschmissen werden. Meist geht es um irgendwelche Sensoren oder Pins, die man einlesen und an anderen Pins wieder ausgeben will. Da reicht C.
Du wirst eh mit beiden wenig Probleme haben: Wenn Du PHP kannst (benutzt Du dort Klassen und Objekte?), wirst Du zunächst auf die Unterschiede zu PHP schauen; die Grund-Konstrukte (if, while, for) usw. sind ja sowieso ähnlich.
-
Nathan schrieb:
Wie heißt dieser Effekt, wenn man zu den "primitiveren" Sprachen hinunterblickt und sich denkt "Boah, wie scheiße lowlevel sind die denn? Denen fehlt ja x, y und z. Wie kann man ohne z leben?" und zu den "höheren" aufschaut und denkt "Was haben die denn für überflüssiger Scheiße, bitte? Wer braucht so einen Mist?! Der macht das nur komplex unnötig kompliziert und behindert das Entwicklen. Ich brauch so einen Schwachsinn nicht, funktioniert doch auch so!".
Diesen Effekt sieht man hier schön. Ich denke wir alle sollten offener sein für beide Seiten, bereit sich auf Neues einzulernen.Schön gesagt! Nur ist es oft umgekehrt, dass in den "höheren" Sprachen Dinge nicht möglich sind, die bei den "tieferen" gehen.
Unterschiedliche Sprachen haben unterschiedliche Abstraktionsniveaus. Wer "modernes" C++ lernt, lernt erst einmal mit Objekten herumzuhantieren ohne sich z.B. über den Speicher Gedanken zu machen. Wer Python lernt, braucht nicht einmal mehr den Unterschied zwischen Wert und Referenz zu kennen. Und wer C lernt, der macht all das mit, umgeht aber einige Probleme der "höheren Gesellschaft". C++ ist hier eine Ausnahme, denn die Abstraktion ist nicht vollkommen, da immer noch C möglich ist. Wer C++ lernt, lernt daher irgendwann auch einmal C, aber erst viel später.
Leider scheinen das die wenigsten zu begreifen. Aus einem anderen Thread:
<a href= schrieb:
https://www.c-plusplus.net/forum/p2434269#2434269">
Dank dir für den Tipp, aber ich will das Projekt erstmal ohne Vektoren schreiben.Wer C++ ohne die Abstraktion von RAII lernt, lernt C und die Komplexität von C++ gemeinsam (Ro3, etc.). Dann lieber gleich nur C.
Für den Raspberry empfehle ich Python. Der Raspberry ist kein Mikrocontroller. Python ist ein bisschen ähnlich zu PHP und einfach zu debuggen.
-
Ich hab hier mal ein bisschen aufgeräumt. Don't feed the troll? Das war ja wohl so etwas von offensichtlich, vom Nutzernamen und vom Inhalt her, und trotzdem springt ihr da drauf an?
-
Hallo allerseits und frohe Weihnachten.
Nun, ich konnte anfangs schlecht unterscheiden welche Sprache nun besser ist für mein Ziel, ob C, C++.
Jedoch habe mich entschlossen zuerst C zu erlernen.
Ich habe auch schon das Buch erhalten und bereits angefangen.
Ich denke jede Sprache hat seine Vor- und Nachteile und dass es auch auf den Nutzen ankommt, welche Sprache man wählt.Da ich mich beispielsweise mit Raspberry pi beschäftigen möchte, wenn ich soweit bin, dass ich Programme schreiben kann, die Steuerungen ausführen, wie beispielsweise einen Schrittmotor, denke ich, habe ich mit C trotzdem eine grundlegende Sprache gewählt, sodass ich auch andere MC’s programmieren kann.
Ich habe gelesen dass der Raspberry pi kein MC ist. Ok, wenn das so ist, dann ist mein Verständnis in der Richtung noch ungenügend. Dennoch bin ich erst im Anfangsstadium und muss erst C lernen bevor ich überhaupt etwas mit Hardware anfangen kann. Ich habe aber auch gelesen, dass man den Raspberry pi mit C programmieren kann.
Mag sein dass Python leichter ist, jedoch denke ich wenn ich C lerne, dass ich dann auch das Zusammenspiel zwischen Code und Hardware besser zu verstehen lerne. Ich bilde mir ein, dass C in der Richtung detaillierter vorgeht, als die anderen Sprachen, auch wenn C komplizierter sein sollte.
Anfangs war ich der Meinung, dass ich C++ wegen der Syntax lernen soll, weil ich schon PHP kann, da diese Sprache mehr Parallelen besitzt, jedoch denke ich, dass es auch auf das Ziel ankommt.
Ich hoffe, meine Ausführungen waren soweit richtig
-
Klingt nach einer vernünftig begründeten Wahl. Welches Buch hast du dir geholt? Doch hoffentlich nichts vom Galileoverlag?
-
web-codex schrieb:
Ich hoffe, meine Ausführungen waren soweit richtig
Naja, ich muss da was anmeckern. Irgendwie mag mir scheinen, daß Du in PHP noch nicht durch bist. Ich schreibe erstmal in dieser Annahme.
Wenn C oder C++ später mal Deine Hauptsprache sein sollen, dann lerne jetzt Python. Der Grund ist ganz einfach: Du wirst im ersten Jahr nicht immer fünf mögliche Wege sehen und den allerhübschesten aussuchen können. Das muss man aber, sonst kippt die Software ganz schnell um in den berühmten großen Haufen Scheiße. Eine frühe stilistische Fehlentscheidung führt zur nächsten Fehlentscheidung und die wieder zu einer…
Lies ein beliebiges Gamecodersforum und Du weißt, was ich meine.Man kann nur sauber programmieren lernen, wenn man schon sauber programmieren kann, und das ist voll gemein.
Wenn Du dann in Python gut Programmieren kannst, dann wechsle die Sprache und mach in der neuen Sprache alles richtig. Ganz ganz wichtig ist dann, das beste Buch zu finden. Der gute Stil kann gar nicht überbewertet werden. Durch die neue Syntax kannste stilistisch von vorne anfangen und stets hübsch schreiben. Keine alte Gewohnheit musst Du aus Versehen übernehmen. Die Zäsur spart Dir zwei bis drei Jahre des Stümperns. Oder auch mal 20 wie ich leider oft genug mitansehen muss.Falls Du mit PHP soweit durch bist, daß Du nie überlegen musst, wie Du was anfängst, kannste den Python-Schritt auslassen. Da wäre ich aber vorsichtig. In PHP macht man statische Menus, Kontaktformulare und Foren (Foren sind immer der berühmte gHS), eventuell reicht das überhaupt nicht und schon die kleinste perfekte Heizungssteuerung oder Teleskopnachführung mit dem RasPi würde Dich vor Probleme stellen?
Und dann gips noch ein dickes Problem schwersten Kalibers. Im Gegensatz zu dem, was unser Haustroll verzapft, schreibt man in C auch normalerweise objektorientiert (außer für Winzigprogramme). OOP ist ein Muss. Ob man jetzt die Sprachmittel dazu hat oder es per Hand macht, ist egal. Das wirste aber in C-Büchern missen. Von daher lerne erst C++ und dann steig ab und schreib quasi C++-Programme auf dem C-Compiler.
-
Hallo miteinander.
@SeppJ:
Auch wenn es laut mancher Meinungen nicht unbedingt das beste Buch ist. Nun ich habe Rezessionen anderer Bücher gelesen und festgestellt, dass es immer etwas auszusetzen gibt.
Wird auch nicht mein letztes Buch sein über C. Wie geschrieben, habe ich mir auch Wikibooks ausgedruckt.Wie ich bereits geschrieben habe, habe ich das Buch „Einstieg in C“ von Thomas Theis gewählt.
Auch gibt es sehr viel Kritik beim Buch „C von A bis Z“. Jedoch habe ich das andere Buch gewählt, weil es auch den Raspberry pi behandelt. Bis jetzt kann ich nichts Negatives schreiben darüber.@volkard:
Danke für dein Feedback, wobei ich etwas anderer Meinung bin.
Mich würde interessieren, wie du zu der Annahme kommst bzgl. deiner Beurteilung meiner PHP-Kenntnisse.Ich habe auch nicht geschrieben, dass C oder C++ meine Hauptsprache werden wird. Vielleicht ja, vielleicht nein. Die Gründe habe ich in meinem letzten Thread schon beschrieben, warum ich C wähle. Wenn du jetzt schreibst, dass Python besser ist oder ich C++ zuerst lernen soll und danach zu C, hm,…hört sich für mich nach einer reinen Geschmackssache deinerseits an.
Mag sein, dass deine Gründe korrekt sind, jedoch wenn es so sei, dann möchte ich diese Erfahrungen und auch die Stolperfallen mitmachen, weil so hast du auch deine Erfahrungen sammeln können
Nun ich habe mich schon entschieden zuerst C zu lernen.
Vielleicht sind einige anderer Ansichten, jedoch viele Wege führen nach Rom und auf einer Reise kann man viel erleben.