-
Einführung in das Buch
- Es gibt ein Buch, das einem Studenten als Lektüre für den Sommer ausgeliehen wurde.
- Dieses Buch ist eines der wichtigsten Werke der Informatik und hat die persönliche Laufbahn und Forschung stark beeinflusst.
- Der Titel des Buches ist Hal Abelson und Jerry Sussmans Structure and Interpretation of Computer Programs (SICP).
-
Die Bedeutung des Buches
- Dieses Buch hat großen Einfluss, wenn man zum ersten Mal mit Informatik in Berührung kommt.
- Es stellt die grundlegenden Elemente des Programmierens vor und erforscht verschiedene Themen.
- Zu den Themen gehören Lambda-Abstraktion, höherstufige Berechnung, komplexe Datenstrukturen, Modularität, Streams, faule Auswertung, der Bau von Interpretern und Compilern sowie Speicherverwaltung.
-
Ansatz zum Sprachdesign
- Hal und Jerry betrachten alles als eine Übung in Sprachdesign.
- Es führt das Konzept ein, komplexe Systeme durch geschichtetes Design zu strukturieren.
- Jede Schicht wird aufgebaut, indem die Teile kombiniert werden, die auf dieser Schicht als primitiv gelten.
-
Das Wesen der Informatik
- Die Computerrevolution ist eine Revolution der Denk- und Ausdrucksweise.
- Es führt das Konzept einer prozeduralen Erkenntnistheorie ein, also die Untersuchung von Wissensstrukturen aus einer imperativen Perspektive.
- Die Informatik liefert ein Framework für das „Wie“.
-
Die anhaltende Relevanz des Buches
- Das 1988 gekaufte Buch ist noch immer relevant.
- Es ist eines der wenigen Bücher der Informatik, die auch im Lauf der Zeit wertvoll bleiben.
- Ähnlich wie Feynmans Lectures on Physics fängt es das Wesen der Informatik sehr gut ein.
-
Update
- Aktualisiert am 27. Januar 2024.
- Dieses Buch ist auch in einer kommentierten Lisp-Bibliografie enthalten.
1 Kommentare
Hacker-News-Kommentare
Man kann den Inhalt des Buches anhand der Vorlesungsvideos von Abelson und Sussman aus dem Jahr 1986 lernen. Ihre Erklärung zur Schichtung von Abstraktionsebenen ist für mich sowohl persönlich als auch als Mentor hilfreich.
Klassische Texte wie SICP sprechen über Programmdesign, aber ich denke, dass heute Systemdesign wichtiger ist. Verteilte Systeme sind vielleicht Teil der Informatik, aber es ist ein allgemeineres Problem, das gelöst werden muss. Man schreibt Systeme so einfach wie möglich und nutzt Observability-Tools, um Schwächen im Design zu erkennen, und löst die Probleme dann mit Datenstrukturen oder anderen informatischen Methoden. In den meisten Fällen sind Big-O-Notation und Laufzeitkomplexität nicht wichtig, und mit Arrays und schnellen CPUs lassen sich die meisten Probleme lösen. Wenn es Laufzeitprobleme gibt, sollte man das Programm profilieren, um Hotspots zu finden. Die Informatik lehrt einen nicht, wie das Memory Caching der CPU funktioniert. Ein schicker Graphalgorithmus kann zwar eine gute Laufzeitkomplexität haben, aber den CPU-Cache völlig ruinieren, während man mit Arrays schneller gewesen wäre. Die allgemeineren Probleme sind Fehlertoleranz, die Korrektheit verteilter Sperren und Queues sowie die Skalierbarkeit von Systemen. Vielleicht bin ich wegen meines Hintergrunds in Computer- bzw. Elektrotechnik voreingenommen.
Der Link zur kostenlosen Kopie ist kaputt. Um 2001 herum war nur die HTML-Version kostenlos verfügbar, und jemand hat sie in TeXinfo umgewandelt. Wenn man heute SICP studieren möchte, kann man den Code in MIT Scheme oder DrRacket ausführen.
"The Elements of Programming Style" ist es wert, dreimal gelesen zu werden, und ich habe auch bei noch mehr Durchgängen viel daraus gezogen. Man kann sich auf die Rezension von 2010 beziehen.
Ich wollte SICP mögen, aber Lisp fühlte sich schwierig an. Haskell und Standard ML mag ich. Ich frage mich, ob andere ähnliche Erfahrungen gemacht haben. Es wäre interessant, ein Buch mit ähnlichem Geist wie SICP in einer anderen Sprache zu lesen. Ich möchte SICP nicht in JavaScript machen.
Mich würde interessieren, was ihr von "Software Design for Flexibility: How to Avoid Programming Yourself into a Corner" haltet.
SICP hat mir geholfen zu verstehen, dass es verschiedene Programmiermodelle gibt. Das Buch hilft dabei, die Dokumentation von Sprachen, Bibliotheken und Frameworks zu lesen und sich darin zu orientieren.
Ich programmiere seit 25 Jahren und besitze das Buch seit etwa 10 Jahren. Kürzlich habe ich mit Dr. Racket angefangen. Ein Vorteil von Dr. Racket ist, dass man beim Darüberfahren mit der Maus über eine Variable visuell die Verbindungen zu anderen Stellen im Code sehen kann. Ein wenig unzufrieden war ich aber damit, dass es nicht VS Code ist. Deshalb habe ich eine Umgebung eingerichtet, in der ich die Übungsaufgaben mit VS Code (genauer gesagt Cursor) lösen kann. Die LLM-Integration ist großartig, und man kann den Code und die von einem selbst geschriebene Erzählung bereitstellen und um Feedback bitten. Ich habe ein paar Übungen bearbeitet, aber den konvertierten Code, meine geschriebenen Antworten und das Feedback vom LLM in eine statische Website verwandelt. Es war eine unterhaltsame Art, Zeit zu verbringen. Ich würde nicht sagen, dass ich SICP ohne Hilfe von LLMs vollständig verstehe, aber es ist interessant zu sehen, wie man LLMs in das Üben integrieren kann.
Beim zweiten Lesen begann ich, den Fußnoten und Literaturhinweisen nachzugehen, und entdeckte, dass dort eine wunderbare Welt steckt. Es gibt eine Arbeit darüber, wie Sussman und sein Team einen maßgeschneiderten programmierbaren Prozessor entworfen haben, um die Eigenschaften von Himmelskörpern zu berechnen. Immer wieder erstaunlich.
Hier sind Links zur Originalversion und zur JavaScript-Version.