2015-04-12 Wie ist das mit C denn bei mir gegangen? ---------------------------------------- markus schnalke [Motiviert durch eine Mail von Paedu] Ich habe mir gerade ueberlegt wie das denn bei mir war: Welche guten Buecher ueber C habe ich gelesen bzw. koennte ich dir empfehlen. Das Ergebnis ist traurig. Mein erstes Buch ueber C (eines dieser Markt-und-Technik-Buecher, glaube ich) habe ich gelesen lange bevor ich mit C angefangen habe. Dann habe ich an der Fachhochschule zwei schlechte Zusatzkurse zu C und C++ belegt. Rueckblickend gesehen waren die wirklich schlecht. Scheinbar habe ich dort aber doch irgendwie das Prinzip der Pointer verstanden. Ich bin mir nicht mehr sicher wie es genau war, ich weiss aber, dass es ein langer Prozess war, bei dem letztlich die menschliche Hilfe und die Praxis, nicht die Buecher (d.h. das Markt-und-Technik-Buch), zum Erfolg gefuehrt haben. (Das beste an dem C-Kurs war, dass ich in der dritten Stunde einen kleinen Vortrag darueber gehalten habe, welches das kuerzeste C-Programm ist. Ich habe naemlich recherchiert nachdem der Dozent dazu etwas erzaehlt hat, das nicht zu meinem Verstaendnis gepasst hat.) Aufbauend auf diesen Grundlagen, die nicht mehr waren als die Ergebnisse von schlechtem Unterricht bei einem (in dieser Zeit) guten und gewissenhaften Schueler, habe ich dann Ende 2007 angefangen irgendein Programm zu schreiben um etwas Praxis mit einem richtigen Programm, und nicht nur diesen Spielaufgaben, zu sammeln. Das war der Versuch eine esoterische Programmiersprache (baum) zu entwickeln. In dieser Zeit habe ich dann mein zweites Praxissemester bei der IBM begonnen, als C-Programmierer. :-) Ich habe mich da ein bisschen bewusst ins kalte Wasser geworfen. Das war aber genau richtig. Ich bin schnell reingekommen. In dieser Zeit habe ich sowohl den K&R als auch ``The Practice of Programming'' gelesen. Nach diesen sechs Monaten hatte ich das Gefuehl, dass ich C programmieren konnte. (Das bezog sich aber natuerlich nur auf einfache Anwendungen, nicht auf jede Art von Systemprogrammierung.) In meiner Diplomarbeit (2008/2009) habe ich mich dann mit Masqmail, einem MTA, der in C geschrieben ist, beschaeftigt. An der Uni habe ich im Wintersemester 2009/2010 die Vorlesung ``Systemnahe Software 1'' gehoert. Anschliessend habe ich in einem Semesterprojekt an Masqmail programmiert. Zu diesem Zeitpunkt wuerde ich mich tatsaechlich als C-Programmierer bezeichnen, alles davor war noch die Lernphase. In Suedamerika habe ich Ende 2010 drei Monate lang an nmh programmiert. Nach meiner Rueckkehr war ich 2011 zwei Semester lang Uebungsleiter fuer Systemnahe Software 1 und 2. Waehrend dieser Zeit habe ich ``Advanced C Programming'' von Rochkind und die Buecher von David A. Curry gelesen. Daneben habe ich regelmaessig ``C: A Reference Manual'' von Harbison und Steele konsultiert. In diesem Jahr habe ich mein C-Wissen um mindestens eine Ebene hoeher gehoben, indem ich mich mit der Sprache an sich beschaeftigt und sie nicht nur angewendet habe. 2011/2012 habe ich in meiner Masterarbeit nmh so weit bearbeitet, dass mmh herausgekommen ist. Das war ein deutlich groesseres C-Projekt und auch besserer und anspruchsvollerer C-Code als ich ihn zuvor zu bearbeiten hatte. 2014/2015 hatte ich ein paar Erlebnisse, so ich gemerkt habe, dass ich noch lange nicht alle Ecken von C kenne. Nicht, dass ich das geglaubt haette, aber ich war doch mehr ueberrascht als ich gedacht haette. * * * Ich tendiere dazu, fuer den ersten Kontakt mit C ein Einsteigerbuch der Markt-und-Technik- oder Galileo-Computing-Art zu nehmen. Diese Buecher sind zwar nicht besonders gut, aber sie machen einem die ersten Schritte einfacher. (Ob das gut ist, oder ob man hinterher nur unter den Vereinfachungen leidet, so dass ``the hard way'' der bessere gewesen waere, das kann ich nicht einschaetzen.) Dann muss man als C-Programmierer einfach das Buch von K&R lesen. Das sollte man ruhig alle paar Jahre wiederholen! Dieses Buch lehrt einem alles Wichtige ueber C. Anschliessend muss man eigentlich keine Buecher zu C mehr lesen, nur noch welche konsultieren. Das Schoene an C ist, dass die Sprache so ueberschaubar ist. Nach dem K&R kennt man die Sprache selbst. Die Standardbibliothek erkundet man ueber die Manpages. Bei der Systemschnittstelle helfen Rochkind und Co. und anschliessend ebenfalls die Manpages. Wichtig sind noch Best Practices. Dafuer gibt es eine Reihe von Buechern (``C Traps and Pitfalls'' hat mir gut gefallen) und natuerlich guten Code zum Lesen. Fuer einen weiteren Schritt vorwaerts sollte man sich die Sprachbeschreibung von C anschauen. Sie hilft dabei, die Sprache wirklich zu verstehen. Dazu gehoert auch, dass man versteht warum Funktionszeiger gar nicht so schwierig zu verstehen sind wie man dachte. Zum Schluss waeren dann noch ein paar Buecher ueber Programmiersprachen aus der Zeit vor C zu empfehlen, da man erst durch sie versteht wie grossartig C ist. ... und selbst 45 Jahre spaeter ist die Sprache noch immer elegant wie damals. Sie ist nicht mehr modern und IMO fuer die meisten Problemstellungen auch nicht die angemessenste Sprache die uns heute zur Verfuegung steht, aber sie ist weiterhin ein strahlendes Messer mit blitz-blanker Klinge, ein vortreffliches Werkzeug in den Haenden eines Meisters, und nicht zuletzt ein Beispiel erstklassigen Designs.