Buchempfehlung C programmieren lernen für fortgeschrittenen Anfänger?
Guten Abend,
die Kernpunkte meiner Frage stehen eigentlich im Titel. Ich bin gerade in ein duales Studium im Bereich Embedded Systems gerutscht und möchte mich nun auch praktisch darauf vorbereiten. Nun würde ich mir gerne etwas Literatur dafür anschaffen.
So wie ich es einschätze und wie es auch in den Quellen meiner Recherche dargestellt wird, ist C wohl die sinnvollste Programmiersprache in diesem Feld. An dieser Stelle eine kleine Nebenfrage: Würdet ihr dem zustimmen oder wäre eine andere Wahl kleverer? Bis vor kurzem (aktuell mit kleiner Pause) habe ich C# gelernt, sollte ich die dort erlernten Grundprinzipien (sofern übertragbar) als Grundlage nutzen und einfach mit der für meine Zwecke passenderen Sprache C weitermachen oder sollte ich C# fortsetzen und mit dem C lernen warten?
Nun weiter mit der eigentlichen Frage :') Angenommen ich entscheide mich fürs C lernen, welches Buch könnt ihr empfehlen? Bei der Suche beschleicht mich irgendwie das Gefühl, dass es (überspitzt formuliert) zwei Arten an Büchern gibt. Einerseits die Nachschlagewerke, welche eigentlich nur hilfreich für jemanden sind, der die Sprache grundsätzlich schon beherrscht, andererseits komplette Anfängerbücher, welche Ewigkeiten grundlegende Themen wie Variablen behandeln und deren Inhalt nur sehr seicht sind.
Habt ihr eine Empfehlung für ein Buch dazwischen? Also eins, welches für das Selbststudium taugt, für jemand der mit der Materie nicht komplett unvertraut ist und das auch eine gewisse Tiefe hat, sodass nicht gleich nach einem Thema wie Rekursion Schluss ist?
Über Antworten würde ich mich sehr freuen!
5 Antworten
Auch wenn die neueren Standards nicht abgedeckt werden: K&R - The C Programming Language (Prentice Hall)
Die Änderungen/Aktualisierungen über die verschiedenen C Standards sind überschaubar, zumal einige zwischenzeitlich wieder "revidiert" wurden - genauer, es bleibt dem Compiler überlassen, ob er es unterstüzt.
K&R als ursächliche 'Macher von C' haben natürlich einen spezifischen Blick auf die Sprache . Dadurch gewinnt man einen anderen Eindruck bezüglich der Eigenheiten der Sprache.
Als Ergänzung (wegen der Unterschiede zwischen den Standards), würde man dann in Folge direkt den Standard lesen, der beseitigt auch letzte mögliche Unklarheiten und gewährt tiefere Einblicke in einige technische Aspekte, die als Programmierer eher am Rande von Interesse sind.
--------
K&R sollte in vielen Bibliotheken rumstehen, d.h. man kann sich das sicherlich auch leicht ausleihen und man ist da auch recht schnell durch.
Ein spezielles Buch kann ich nicht empfehlen aber einen Verlag.
Der O’Reilly ist eigentlich die erste Adresse wenn es um IT und Programmierung geht.
Im Bereich Embedded Systems kann man auch was anderes als C benutzen. Kommt natürlich drauf an was man macht und mit was man macht ;).
Mit C kannst du halt richtig Low-Level Sachen machen.
Ich kann jetzt nicht wirklich einschätzen welches Programmier-Level du hast. Ein Nachschlagewerk ist aufjedenfall der Klassiker "C von A bis Z" vom Rheinwerk-Verlag (gibt's Online kostenlos, kommt man früher oder später eh drauf wenn man googled😅).
Ein Taschenbuch zum Verstehen was ich sehr gut fande war "C Programmieren von Anfang an" von Helmut Erlenkötter soweit ich weiß. War aufjedenfall ein grünes Taschenbuch, sollte das also sein.
Ein Buch für alles gibt es nicht. Also würde ich einfach in die Bibliothek gehen und ein paar ausleihen. Auch nicht jeder kann mit jedem Buch was anfangen.
Würde sowieso eine Kombination aus Bücher, Webseiten/Forums, Videos und einfach Trail&Error machen.
---
Z.B. hab ich anfangs einige Probleme gehabt Pointer und Listen zu verstehen. Damals habs dazu nicht wirklich gute YouTube-Videos. Jetzt gibt's echt gute, die erklären dir in ein paar Minuten die Basics schon visualisiert. Um das Listen zu verstehen hab ich glaub 4 Tage mit meinen Kommilitonen diskutiert 😂.
---
Wichtig ist, programmier was. Die Basics verstehen ist wichtig, dann wende sie aber auch in einem eigenen Projekt an oder ändere das Tutorial ab. Gibt auch einige Unis die das C Vorlesungszeug und Praktika-Aufgaben online zur Verfügung haben. Würde auch mal auf GitHub schauen. Ein Prof von mir hat dort ~10 Beispielcodes hochgeladen (hatte den aber nicht dort). Learning by Doing ist das Ding beim Programmieren. Wenn du Fehler machst ist es gut, dann lernst du daraus :). Verzweifeln gehört auch ein bisschen dazu 😂.
---
Hab mir auch ein Arduino Starter Kit gekauft und auch mal das Tutorial durchgemacht mit dem es gekommen ist. Kann man für den Anfang auch empfehlen. Vielleicht nicht um C/C++ zu lernen (vielleicht nur die Basics), aber um einfach mal zu verstehen wie Embedded Systems grundlegend funktioniert.
Deutlich einfacher einen Arduino zu programmieren anstelle eines STM32 Microcontrollers😅. (Literatur für den STM32 Microcontrollers gibt's die 1000+ Seiten Datenblatt 😐😛)
---
Ich selber würde dir einfach C oder C++ empfehlen. C++ ist eine objektorientierte Programmiersprache. Die C++-Compiler sind voll kompatibel mit C.
Warum werden C und C++ so gerne bei Embedded Systems benutzt. Ganz einfach, sie können das Low-Level Zeug und sind, der Hauptgrund wahrscheinlich sogar: sie sind schnell.
---
Wenn du C# schon vernünftig kannst, dann ist der Umstieg auf C oder C++ nicht so schwer. Dann verstehst du ja das Prinzip von einer objektorientierten Sprache schon. Die zwei sind meist ein bisschen schwerer zu verstehen wegen der Syntax, aber sollte relativ schnell gehen. Funktionen, Variablen, usw. kannst ja grundlegend schon. Pointer und Listen und so muss man halt von C dann noch lernen.
---
Musst du aber wissen was du machen willst/welche Programmiersprache du benutzen willst. Z.B. Java, Phyton und JavaScript kann aber für bestimmte Sachen in Embedded Systems auch benutzt werden.
---
Hab dich wohl komplett verwirrt.😂 Eigentlich ist es egal welche Programmiersprache, lern einfach eine und dann ist der Umschwung nicht wirklich schwer. Du musst aber auch einfach Programmieren, ohne Praxis wird das nichts.
Danke für die ausführliche Antwort : ) Ich werde mich dann jetzt einfach an C ransetzen, die trockene Theorie hinter Listen und Pointern kann ich eigentlich auch in den Grundsätzen (musste mal Listenzugriffe mit "Pseudo-Assembler" schreiben), jetzt versuche ich das ganze einfach in der Praxis etwas zu vertiefen.
Nimm irgend ein Buch über ANSI C (den aktuellsten Standard zu C).
Sehr hilfreich finde ich https://karadev.net/uroci/filespdf/files/Programming-in-ANSI-C.pdf .
Darin ist auch die Laufzeit-Bibliothek dokumentiert (die man in Büchern eher nicht findet).
|
Antiquarisch ist das Buch noch hier zu haben: https://www.amazon.de/Programming-ANSI-C-Ray-Dawson/dp/1874152101
Alternativ dazu:
Aus Erfahrung kann ich sagen, dass dir kein Buch so viel helfen wird, als wenn du es selbst praktizierst. Du möchtest doch praktische Erfahrungen gewinnen richtig? Dann würde ich mir lieber einen Kurs bei Udemy o.ä kaufen oder Youtube Videos anschauen und nachprogrammieren.
Was die Sprache angeht, das kommt natürlich darauf an. Ich würde aber sagen, wenn es dich interessiert, dann fang doch einfach mal mit der Sprache an.
Im Gegenteil.
Udemy und Youtube sind ein Witz!
Allein der Umfang bei Udemy entspricht einem sehr dünnen Lehrbüchlein.
Gerade bei C wird man ohne Bücher nicht gut werden können!
Gute Lehrbücher sind das A und O. An den Umfang und die Tiefe kommen Videotutorials überhaupt nicht ran.
ich weiss ja nicht wie professionel du lernen willst, aber ein udemi oder youtube video ist viel zu oberflächlich . im buch wird wirklich hintergrund erklärt . und vor allem , man kann es nachschlagen . kurz mal gucken ok , aber ansonsten erzeugt man doch starke dilletanten die meinen von allem was zu verstehen ohne wirklich was zu können . sieht man ja leider ständig , ergebnis sind dann diese gerade zu einladeneden hackbaren systeme die hier sogar für geld produziert werden .
und programmierparadigmen und erklärungen für projekte ist auch nur zu erlesen , denn da steht viel weisheit drinne . es gibt halt auch da standardwerke die jeder profi gelesen hat.
Genau das ist das Problem. Ich habe es auch schon bei C# gemerkt, dass die Anfänger Playlisten häufig schon recht früh enden und danach weiß man nicht wirklich was man lernen soll. Die weiterführenden Themen findet man zwar dann schon, aber nur wenn man genau weiß wonach man suchen will und man dann jedes Thema ohne größeren Leitfaden einzeln nachschaut.
Ich möchte schon professionell lernen, da ich gerade als dualer Student im Bereich Embedded System Engineering angefangen habe.
Danke für die Antwort!
Auf jeden Fall ist es wichtig sich da auch praktisch damit auseinanderzusetzen und das habe ich auch vor, aber ich hatte vor das parallel zum Buch zu machen. Der Vorteil an Büchern ist m.M.n., dass man es einfacher hat das Tempo selbst zu regulieren, wobei ich natürlich auch schon häufig Videos als Quelle genutzt habe und es ist auf jeden Fall eine Option auf die ich in gewissem Umfang auch sicherlich zurückgreifen werde.
ja ich habe nur meine Erfahrung geschrieben. Durch Videos habe ich die Basis verstanden und erstmal versucht nachzubauen & dann selber etwas programmiert.
Natürlich sind Bücher nicht schlecht, im Endeffekt muss man es selbst entscheiden, wie man es am besten versteht und vorankommt. Mit Bücher war ich anfangs etwas langsamer.