Ergebnisse eines zweijährigen Studiums "Struktur und Interpretation von Computerprogrammen"





Das Original wurde am 07/11/2020 in meinem Blog veröffentlicht. Wenn ich richtig verstanden habe, ist dies kein Problem.



Ich glaube, dass es bei der Softwareentwicklung sehr um die Programmierung im Pseudocode geht. Wenn Sie einen Pseudocode angegeben haben, übersetzen Sie ihn in Python, C, was auch immer kein Problem ist. Die Hauptschwierigkeit liegt in dieser konzeptuellen Aktivität, nicht in der Codierung. Sie müssen wissen, wie Sie bestimmte Probleme angehen können. Modularität, Abstraktion. Flexibilität, Zuverlässigkeit, Einfachheit. Designmuster. Unit Testing. Du weißt schon.



Es gibt weltweit einen Kurs "Struktur und Interpretation von Computerprogrammen" (im Folgenden: CICP), der als Einführung in die Informatik dient und zuvor am MIT zum Unterrichten von Studienanfängern verwendet wurde. Vor zwei Jahren habe ich gerne einen Kurs darüber gehalten. und nahm das Buch auf. Zuerst erzähle ich Ihnen von dem Guten.



Der Text erzählt von Dingen, die sehr weit von meiner täglichen Arbeit entfernt sind, und ermöglichte mir einen neuen Blick auf die Programmierung. Funktionalität ist eine ganze Welt, die nach ihren eigenen Gesetzen lebt. Die Lisp-Sprache unterscheidet sich stark von der C-Sprache, die ich gewohnt bin, durch verrückte Flexibilität aufgrund dynamischer Eingabe, automatischer Speicherverwaltung und der Möglichkeit, alles zur Laufzeit neu zu definieren. Ich habe eine vielseitigere Idee entwickelt, wie Sie im Prinzip verschiedene Probleme lösen können. Ich spreche in einer Schachsprache und habe mein Repertoire an Hausaufgaben, die für meine Arbeit nützlich sind (wenn auch nicht jeden Tag), erheblich erweitert. Durch Übung arbeitete mein Gehirn (manchmal sehr intensiv), überlegte und systematisierte früheres Wissen. Im Allgemeinen hat mich das Studium von SIKP zu einem besseren Entwickler gemacht und meinen Horizont erweitert. ich bin mir sicherIch begann verschiedene Dinge mit einer systematischeren und reiferen Sichtweise zu betrachten.



Das Buch hat mich ständig zum Nachdenken angeregt, dafür verbeugt sie sich tief. Ich habe zutiefst Dinge erkannt, die jeder zu wissen scheint, die aber deshalb zu faul sind, um sie zu erwähnen. Zum Beispiel, dass die gesamte Software zunächst einfach gemacht wird und dann unweigerlich komplexer wird, um die Leistung zu verbessern. Dem Benutzer ist es egal, wie viele Zeilen Quellcode sich darin befinden, aber die Geschwindigkeit ist wichtig.



Was ist mit bestimmten Effekten, mit denen gearbeitet werden soll? Ich konnte Mängel bei der Codeüberprüfung besser erkennen (vor allem meinen eigenen Code). Liebte kleine Funktionen, vorzugsweise so allgemein wie möglich. Ich fing an, den sorgfältigen und angemessenen Umgang mit Makros zu üben - manchmal kann man in C vorsichtig etwas tun, das nicht den Regeln entspricht, und jeder wird nur davon gewinnen. Die Erfahrung, die ich mit den Übungen im Buch gemacht habe, hat mir bei einigen meiner Arbeitsprobleme geholfen.



Aber das ist eine Seite der Medaille. Ein weiterer Grund ist, dass der Lernansatz dieses Kurses in der englischen Spracheinheit "sinken oder schwimmen" ausgedrückt werden kann. Vor Ihnen befindet sich eine Querlatte, daneben die Aufgabe: 10 Mal hochziehen. Im Prinzip reicht dies aus, um die Aufgabe zu erledigen, aber dieser Ansatz kann nicht als angenehm bezeichnet werden. Ich würde sagen, er ist ziemlich anstrengend! Sie werden halb vorbereitet in den Kampf geworfen und lernen einen Teil des Materials nicht aus Erklärungen, sondern aus Ihren Fehlern. Wahrscheinlich ist dies eine akzeptable Art, hochmotivierte Menschen zu unterrichten, aber er hat mich als faulen Menschen herausgequetscht. Ich konnte es kaum ertragen für 3 von 5 Kapiteln (manchmal habe ich einige Monate Pause gemacht!), Habe die Übungen in ihnen von Anfang bis Ende gemacht, aber es scheint, dass meine Geduld erschöpft ist.



Zum Beispiel sagt das Buch kein Wort darüber, wie Sie Ihren Workflow organisieren können. Konzepte wie "Debugging" (hier spezifisch), "IDE" (hier spezifisch), "Unit-Tests" und "Aufteilung in Dateien zur Wiederverwendung" werden nicht einmal grob berücksichtigt. Es gibt Fragmente, in denen ein bestimmtes komplexes System entwickelt wird, das erst am Ende des Kapitels vollständig fertig sein wird, und Aufgaben erscheinen nach jedem Absatz des Textes. Jene. Genau genommen können Sie nach dem Lesen von Seite N in einigen Fällen das Problem auf dieser Seite nicht lösen, ohne den Code von den nachfolgenden Seiten zu ziehen. Der Code muss vorsichtig gezogen werden, da in den Notizen nicht offensichtliche Feinheiten besprochen werden können und manchmal ein Code als Beispiel für eine kaputte Idee angegeben wird. Das ist nervig! Ja, es ist wie im wirklichen Leben - Sie müssen die Aufgabe selbst definieren, im Internet nach etwas suchen,aber verdammt ... das ist ein Tutorial! Ich bin voller schwieriger Aufgaben bei der Arbeit, und vielleicht hätten die Autoren den Text pedantischer angehen sollen? Okay, ich bin ein professioneller Pogromist mit schnellem Internetzugang, aber was ist mit einem MIT-Neuling in den achtziger Jahren? Ich bin sicher, es ist nicht süß ...



Lassen Sie mich die Hauptvorteile des Buches hervorheben: Es ermöglicht Ihnen, persönliche Erfahrungen zu sammeln, Ihre eigenen Köpfe zu bekommen und über komplexe Probleme allgemein nachzudenken. Die Nachteile hängen direkt mit ihnen zusammen: Es ist komplex und gibt Ihnen oft nur wenige Hinweise, um etwas zu verstehen. Wenn Sie beispielsweise Kampferfahrung haben, wissen Sie, dass Code ohne Komponententests nicht als Lösung bezeichnet werden kann, aber das Buch wird Ihnen nichts darüber erzählen. Sie müssen selbst dazu kommen! Was haben Sie gedacht? Nun, oder ich lüge, das Buch wird Ihnen davon erzählen, aber auf die sadistischste Weise. Sie haben die nächste Aufgabe basierend auf der vorherigen (diese ist oft da). Wenn Sie zuvor einen Testfall verdient haben und sich für „Ok, lass uns weiter gehen!“ Entschieden haben, werden Sie um die Ecke gerne die Lösungen von zwei Aufgaben gleichzeitig debuggen. Wenn dies mehrmals passiert, werden Sie wahrscheinlich feststellen, dass Sie etwas falsch machen. Die Hauptsache,damit Sie in solchen Momenten den Kurs nicht aufgeben, sondern verstehen, dann wird alles gut!



Ein weiteres ärgerliches Merkmal des Textes: Aufgaben (wieder wie im wirklichen Leben) sind manchmal nicht genau definiert. Ich machte neulich eine Übung, in einer halben Stunde entwarf ich eine Lösung und begann, die Problemstellung erneut zu lesen. Es stellte sich heraus, dass ich, wenn Sie pedantisch denken, es zu 95% erfüllte und ungefähr 40% des Aufwands ausgab. Die meisten Jungs, mit denen ich gesprochen habe, haben dasselbe getan. Einer hat es vollständig gemacht, aber einen Hack von einem anderen Lisp-Interpreter verwendet. Ich war verärgert und spuckte aus, weil ich die Motivation verloren hatte, in naher Zukunft weiterzumachen. Ich werde Ihnen noch einmal das Wesentliche des Problems erläutern: Es gibt Aufgaben, bei denen alles einfach und logisch gelöst wird, aber nur, wenn Sie nicht streng mit sich selbst sind. Im wirklichen Leben verstehe ich das, aber ich hatte andere Erwartungen als das Lehrbuch. Wenn Sie in Ihrer Freizeit eine Übung machen und sich selbst überprüfen, möchten Sie das Problem zu 100% lösen.nicht "gut genug für die aktuelle Iteration".



Das Problem bei Unit-Tests ist eigentlich das gleiche. Manchmal muss man ein wenig schwitzen und nachdenken, um sie einfach in das System zu implementieren. Ich weiß, dass es keinen ohne sie gibt, aber einfachere Leute skizzieren einfach Lösungen, ohne sie zu überprüfen und weiterzumachen! Je strenger, aufmerksamer und erfahrener Sie sind, desto schwieriger werden die Aufgaben für Sie. Manchmal nur manchmal! Dies ist demotivierend, weil sie hier im Gegensatz zur Arbeit nicht loben oder dafür bezahlen und der iterative Ansatz schlecht anwendbar ist. Kenntnisse und Fähigkeiten, die im wirklichen Leben nützlich sind, verletzen die Hände bei der Lösung von Schülerproblemen!



Es ist erwähnenswert, dass das Buch viel Mathematik enthält. Als ich die Übungen löste, verstand ich die Schönheit und Kraft dieser Wissenschaft, aber manchmal fiel es mir gerade wegen dieser spezifischen Probleme schwer, die nur indirekt mit den zu lösenden Problemen zusammenhängen. Es ist nur so, dass die Autoren beschlossen haben, etwas mit einem Beispiel für Integration zu zeigen, also denken Sie daran und Botay!



Im Allgemeinen bereue ich nicht, dass ich in dieses Abenteuer gepasst habe, es war nützlich für mich. Ich empfehle jedoch anderen Menschen, nach etwas Besserem zu suchen. Zum Beispiel wurde auf der Grundlage des SIKP unter Berücksichtigung seiner Fehler (wie sie sagen, habe ich nicht überprüft) kürzlich der Kurs "Wie man Programme entwirft" durchgeführt. Ich nehme an, ich hätte ihn auch begehren sollen, aber Sie werden keine Zeit verlieren.



PS Peter Norvig hat eine wundervolle Rezension von SIKP geschrieben .



All Articles