Was zuerst lernen? C++ oder doch zuerst C?
-
Nathan schrieb:
BTW: yeah, der zweite C vs C++ Flamewar innerhalb weniger Tage!
Jupp und die Moderation mischt wieder mit.
-
Ja und für Mikrocontroller eh nur C, denn da haben die vielen Unzulänglichkeiten von C++ nichts verloren. In C++ passiert sehr viel hinter den Kulissen, wenn man das nicht alles weiß schreibt man nur Schrott. Nicht umsonst ist eines der grüßten Softwareprojekte weltweit in C geschrieben, nämlich Linux. Also lass dir keinen Bären aufbinden hier, dass C nicht mehr "in" ist oder sich für größere Sachen nicht eignet.
-
Du solltest auf keinen Fall zuerst C und dann C++ lernen, weil es dir dann warscheinlich viel schwerer fallen wird.
Mir gings auch so, für meine Zwecke reicht C auf jeden Fall aus. Für einfache Anwendungsprogramme kannst du auch C verwenden und wenn du sowieso Mikrocontroller programmieren willst dann ist es sogar am besten.
C ist maschinennäher als C++ und im Allgemeinen auch leichter zu erlernen.
Die Aussgage, dass C seit C++ nichts mehr Wert ist, ist um es so auszudrücken "geistige Gülle".
Es kommt darauf an was einem am besten liegt und objektorientiertes Programmieren ist kein muss.
-
Unreg schrieb:
Nathan schrieb:
BTW: yeah, der zweite C vs C++ Flamewar innerhalb weniger Tage!
Jupp und die Moderation mischt wieder mit.
Mir geht es nicht darum ein Thema C vs. C++ zu eröffnen, sondern eher darum, mein Ziel mit meinen beschriebenen Kenntnissen zu PHP, den Einstieg zielsicherer und schneller zu gestalten.
Und da mein Ziel anfangs ist, mit MC's zu arbeiten, nunja, Gründe wurden wegen der Compiler-Geschichte schon genannt. Also nicht falsch verstehen
-
Ontopic: Ich habe auch zuerst C gelernt. Es hatte mir nicht geschadet (die Lehrbücher für C++ waren schlimmer), es hatte mir wohl gezeigt wie einfacher triviale Sachen in C++ doch sind (strings die dynamisch wachsen, wie geil ist das denn bitte!).
Es hat mir allerdings auch nicht viel genützt. Man sagt, dass man mit C ein besseres Verständnis von dem Lowlevelzeugs bekommt. Das mag ja sein, nur in C++ kann man das genauso gut lernen.
Imo ist es nicht nötig C zu können um C++ zu können, schadet aber auch nicht (sofern man sich dann auf C++ einlässt und nicht immer noch C in C++ programmiert).
-
Lieber ein guter C-Coder werden als ein mittelmäßiger C++-Coder.
-
Nun ich denke, dass ich doch zuerst wegen meiner Zielausrichtung C lernen werde.
Ich habe mir gerade das Buch gekauft: "Einstieg in C: Für Programmiereinsteiger geeignet" (ISBN: 3836227932) Da in dem Buch auch Raspberry behandelt wird.
Ich habe mir noch das Buch "C von A bis Z: Das umfassende Handbuch" (ISBN: 3836214113) angesehen, jedoch denke ich, dass ich für den Einstieg mit dem anderen Buch schneller erste Erfolge erzielen werde. Danach kann ich immer noch das Nachschlagewerk kaufen. Für den Anfang bin ich jedoch mit dem anderen Buch gut bedient.
Ich hoffe, es war eine gute Wahl
-
C von A bis Z hat leider keine so gute Kritik
-
Asyl-Dämon schrieb:
C von A bis Z hat leider keine so gute Kritik
Das lese ich jedoch auch bei dem Buch was ich gekauft habe. Irgendwo gibt‘s immer was auszusetzen.
-
Asyl-Dämon schrieb:
C von A bis Z hat leider keine so gute Kritik
Wieso "leider"? Es ist doch gut, wenn die Kritiken der Qualität entsprechen und keinen Schrott in den Himmel loben.
-
@Bashar Das "leider" war auf web-codex Aussage bezogen "Ich hoffe es war eine gute Wahl"
-
Der TE hat doch sogar explizit gesagt dass er auch MC programmieren will.
Huch, total überlesen. Ich dachte das Lernen hätte keinen speziellen Kontext.
Kommt halt drauf an was man machen will und auf MC kommt man um C eben meistens nicht rum (nicht das ich das gut finden würde)...
Ich habe einen MC in C++ programmiert, per AVR-GCC. Das lief auch völlig einwandfrei. Die API für die ganzen anderen Teile war aber leider in C.
-
Erst einmal Glückwunsch zu der Wahl der Programmiersprache C. Ich finde die auch um Längen einfacher zu handhaben als C++ und du kannst damit wirklich portable und auch alles programmieren. Vom kleinsten Mikrocontroller bis zum großen Betriebssystem, Compiler, VM oder was auch immer.
Die Buchwahl ist wohl nicht so toll, aber dass musst du am besten selbst raus finden. Diese Max bei Amazon ist eventuell auch nur so ein armer kranker Geist und er würde auch gut hier in der Forum passen, denn viele Fehler die der ankreidet sind oft nur extreme Spezialfälle. Ein paar üble Fehler hat er aber auch in deinem Buch gefunden. Man macht z.B. kein fclose wenn fopen nicht geklappt hat.
Ein richtig gutes Buch ist zum Beispiel C Primer Plus. Allerdings ist das in Englisch, denn Deutsche können keine Fachbücher schreiben und haben auch kaum wirklich Ahnung von Materie. Das ist auch ein Grund warum gute deutsche Bücher meist nur Übersetzungen von einem englischen Buch sind.
-
Asyl-Dämon schrieb:
@Bashar Das "leider" war auf web-codex Aussage bezogen "Ich hoffe es war eine gute Wahl"
Die Wahl war aber auf das andere Buch gefallen, er hat sich ja den Jürgen Wolf nur angesehen und nicht auch gekauft.
-
Nun, ich war mir nicht ganz sicher, was gut und was schlecht ist an Büchern und kann es auch noch nicht einschätzen. Ich habe aber Kontakt zu jemand und sie hat das Buch auch, dass ich gekauft habe (hatte ich erst danach erfahren).
Ich denke, ich werde dann schon meine Erfahrungen sammeln. Das Buch "C von A bis Z" habe ich nicht gekauft - noch nicht. Es gibt zwar auch online allmögliche Nachschlagewerke, jedoch ziehe ich es trotzdem in Erwägung mir dieses danach zu zulegen, weil ich zum Lernen auch sehr gern Bücher verwende.
Ein Buch reicht jedoch vorerst mal. Auch wenn diese Bücher diverse Fehler aufweisen, nun ja: "Perfect is better, but nobody is perfect"
Mir geht’s erst einmal um die ersten Schritte, um danach, wenn ich das Buch durchstudiert habe, denke ich kann ich mir auch durch Meinungen von euch oder andere mir ein Bild für saubere Codeentwicklung einholen.
Jedenfalls haben mir eure Impulse sehr geholfen und bedanke mich bei jedem für die Kommentare.
Bis demnächst und nochmal schöne Weihnachtsfeiertage
-
@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.