2008-04-15 digital life C angekommen Worte über meine Entwicklung bezüglich Programmiersprachen. Vor ein paar Jahren suchte ich einen richtigen Compiler (nicht wie VBasic) und Oberflächen zum Zusammenklicken (RAD). Dies fand ich dann in Delphi. Nicht viel später stellte ich fest, dass ``richtiges Programmieren'' nicht meine Welt sei und mir dynam- ische Typisierung viel mehr zusagt als der ganze low-level Stuff. So codete ich mit PHP für's Web. Anschließend (als ich PHP hinter mir gelassen hatte) war ich dann erst mal auf der Suche. Ich konnte mich für keine der bekannten Sprachen begeistern, aber weil ich schon lange dachte, dass man mal C/C++ lernen sollte, tat ich das. An sich war mir die Sprache aber viel zu low-level, viel zu streng und viel zu kom- pliziert. Mir war eher nach Programmieren wie mit PHP (dynam- ische Typisierung und fertige Funktionen für alle Belange), al- lerdings ohne die Strukturlosigkeit durch die PHP-Code schlecht wird und ohne die Umständlichkeiten des Web. Ruby war für mich immer so das Traumbild einer Sprache. (Jetzt würde ich sagen: ``Ruby ist die Sprache die mich am meisten beeindruckt.'') Es ist für mich einfach nur logisch, dass man z.B. soetwas wie "some_string".explode("_").first.ucase schreiben kann und dann ``SOME'' zurückgeliefert bekommt. Dass dies in Java oder PHP nicht geht, habe ich nie verstanden. Mehr als kleine Lern- und Testprogrämmchen habe ich mit Ruby aber nicht gemacht. Python hätte meine damalige Vorstellung meiner Wunschsprache vielleicht am besten getroffen, jedoch hätte ich stattdessen sowieso Ruby gewählt. Als ich dann C und C++ (parallel) gelernt habe, waren die größten Probleme Pointer und die statische Typisierung. Wenn man aus der ``sloopy-coding'' Welt der Scriptsprachen kommt, wo man mit Vari- ablen macht was einem gefällt und sich einen Dreck um Typisierung (oder gar Speicherverwaltung) schert, ist das am Anfang die Hölle. Ständig bräuchte man Typumwandlungen weil man halt immer noch so denkt, wie beim Scripting. Von Pointern habe ich schon damals, zu Dephi-Zeiten, gelesen, sie jedoch immer als nicht notwendig abgetan. Ich habe sie sowieso nicht verstanden. Beim Lernen von Programmiersprachen, bin ich bisher drei Mal an einen Punkt gekommen, an dem ich ohne fremde Hilfe nur sehr schwer weitergekommen wäre. Da erste Mal war die Ereignisorien- tierte Programmierung in VBasic, wo plötzlich nicht mehr alles so schön sequentiell ablief. Die zweite HÜrde war die Objektorien- tierte Programmierung, wo ich durchaus das Konzept von Klassen und Objekten verstanden habe, die Umsetzung des Konzepts und entsprechendes Denken aber lange ein Problem waren. Und dann waren da noch die Pointer, bei denen ebenfalls die reine Verständnis nicht das Problem war, wohl aber das Programmieren mit ihnen (und ihr Sinn). So war es ganz geschickt, dass ich C/C++-Wahlfächer im Studium belegte und auf diese Weise die Hürde einfacher überwinden konnte. C/C++ lesen ist eine Sache die nach ein bisschen Syntax-Studie und dem Verständnis von Zeigern schon kein Problem mehr ist. Schreiben von eigenem Code dagegen eine ganz andere. Und da war die strenge Struktur der Sprache anfangs auch eher hinderlich. Dass C++ nichts für mich ist, wurde mir schnell klar: viel zu kompliziert und eine unschöne Objektorientierung -- Wer Ruby gesehen hat findet schon Javas Objektorientierung schlecht. C++ ist dagegen ja nur notdürftig zusammen gezimmert, einigermaßen objektorientiert. Wenn Objektorientierung, dann müsste sie schon auch vollständig, schön und konsistent/konsequent sein. C dagegen sagte mich schon deshalb zu, weil Unix damit geschrieben ist und der größte Teil der Programme für dieses Be- triebssystem ebenso. Mit C würde ich also zukünftig zwangsläufig Kontakt haben. Zudem ist C verfügbar, portabel und gut um kleine Programme zu schreiben (was ich dank Unix-Philosophie ja wollte). So lernte ich C, setzte es aber kaum ein, weil es mir zu aufwen- dig und zu streng war. Stattdessen schrieb ich haufenweise Shellscripte. Die Shell gab mir war ich wollte: unzählige Programmideen die man ganz schnell mal umsetzten konnte. Das Aufwand-Nutzen-Verhältnis ist optimal. Natürlich ist Shell-Programmierung nicht allzu schön, und zum Teil recht umständlich ... und dann ist da ja auch noch das Prob- lem der Portabilität. (Das erinnert doch an Web-Programmierung ...) C lag bei mir ein bisschen brach, und in meinem Kopf war da ir- gendwie immer noch das Gefühl, ich sei ja eh kein richtiger Pro- grammierer, sondern viel mehr Sysadmin und Scripter. So beschränkte sich mein C darauf kleinere Programme zu modi- fizieren. Die entscheidende Wendung kam dann, als ich mich entschied, mein zweites Praxissemester dazu zu verwenden, richtig C-Programmieren zu lernen -- praktisch. Mein erstes Praxissemster habe ich mit Intranet-Programmierung verbracht und dadurch PHP und MySQL erschöpfend gelernt. (Das hat mich dann auch von PHP abgebracht, denn bei dem intensiven Gebrauch lernt man die Grenzen einer Sprache kennen.) Es war ein ``Vom PHP-Fortgeschrittenen zum PHP-Profi in sechs Monaten''. Ein ähnliches Ergebnis wollte ich nun mit C erreichen. Mein Startpunkt war allerdings eher der des Anfängers, denn die praktische Grundlage fehlte mir. Als feststand, dass ich tatsächlich die nächsten Monate C pro- grammieren würde, wollte ich dann doch mein Theoriewissen im Vor- feld noch ein bisschen aufpolieren und selbst mal ein etwas größeres C-Programm schreiben. Passenderweise hatte ich mit Ju da diese Diskussion über esoterische Programmiersprachen und die Idee mit dieser Baum-basierten Sprache. Das war der optimale An- satzpunkt. Ich war fasziniert, hatte Lust das Konzept zu im- plementieren und musste nur noch entscheiden welche Sprache ich dazu verwenden wollte. Auch wenn mir C nicht ganz optimal für dieses Problem erschien, wählte ich sie aus und begann (mit dem K&R neben der Tastatur) `baum' zu coden. Das war optimal. Ich hatte ein kleines überschaubares und erweiterbares Konzept und konnte mich so mit C daran hocharbeiten. Erst dadurch lernte ich die Sprachfeatures richtig und fühlte mich dann auch bereit für das bevorstehende halbe Jahr C-Programmierung. Inzwischen habe ich den ersten Monat in der Firma hinter mir, auch privat einiges an C programmiert, nebenbei AWK gelernt (das mit als Ergänzung zur Shell und C ganz gut gefällt) und auch ein näheres Kennenlernen mit Ruby gehabt. Bei letzterem wurde mir dann etwas Grundlegendes klar. Ich programmierte (scriptete) so an einem kleinen Programm rum, indem ich fremdem Code veränderte. Aber irgendwie war mir alles viel zu kompliziert. Der Codeumfang war zwar gering, aber ständig musste ich nachlesen weil so viele verschiedene Sprachfeatures verwendet waren. Einfache Anpas- sungen waren für mich als Neuling nur mit größerem Aufwand möglich ... und immer mit einer Unsicherheit, weil ich das bisschen Code halt nicht ganz verstand. Und da wünschte ich, es wäre halt C-Code! Ein überschaubarer Werkzeugkasten an Sprachfeatures, die man einfach selbst kom- biniert. Statt tausend Dinge merken zu müssen, weiß man nur hun- dert und baut die anderen 900 daraus. C ist handhabbar -- ein kontrollierbares Werkzeug, das man ver- stehen kann. C ist ein Buch mit 250 Seiten. C ist die Unix-Philosophie. C ist mein Ziel! Und ich bin angekommen! http://marmaro.de/apov/ markus schnalke