Ist das Buch "Structure and Interpretation of Computer Programs" zu empfehlen?

Peter_2498

Lieutenant
Registriert
Apr. 2018
Beiträge
559
Hallo zusammen,

ich bin Student und beginne im nächsten Semester mein Masterstudium in Mathematik. Hier soll es aber nicht um Mathematik gehen, sondern um mein Nebenfach Informatik.

Im Studium musste ich schon mit C++, Python, R, Matlab, Sage programmieren und damit bin ich mit dem Programmieren an sich schon gut vertraut. Würde mich zwar nicht als fortgeschrittenen Programmierer bezeichnen aber ich hab zumindest schon ein gutes Stück an Programmiererfahrung.

Im Nebenfach habe ich halt das gemacht was wohl jeder irgendwie macht, wenn es nur ein Nebenfach ist:
  • Datenstrukturen und Algorithmen
  • Theoretische Informatik (Komplexitätstheorie + Formale Sprachen und Berechenbarkeit)
  • 2 Programmierkurse (einmal Python, einmal C++)
Nun wechsle ich zum Master an eine andere Uni (ebenfalls mit Nebenfach Informatik) und da ich dort ja nicht mehr die "Anfänger"-Informatikvorlesungen besuche, habe ich mal geschaut, was die Leute dort so in den Anfangsvorlesungen so machen und da habe ich gesehen, dass sich deren Programmierkurse zum Teil nach dem oben genannten Buch richten.

Kannte das Buch davor nicht, scheint aber, nach meiner Recherche, ein Standardwerk in dem Gebiet zu sein. Ich habe jetzt etwas Zeit und habe mich gefragt, ob ich dem Buch, als jemand, der kein absoluter Anfänger ist, noch was Wertvolles entnehmen kann.

Mir zumindest scheint das Buch, nachdem ich es bisschen überflogen habe, irgendwie anders zu sein, als die Programmierbücher, die ich sonst daheim habe wie "C++ Primer" oder "Python Crash Course".
 
Zuletzt bearbeitet:
Ich kannte das Buch nicht, aber es scheint vom rein schauen her sehr sinnvolle Lektüre zu sein, soweit es das Thema "Was ist Programmieren eigentlich" jenseits von Syntax betrifft. Als Mathe-Student wirst du dich da offenbar auch sehr zuhause fühlen.
Es wirkt auf mich wie ein gutes theoretisches Fundament um sich später praxisnähere Standardwerke rein zu ziehen. Das muss man sicherlich auch nicht komplett verschlingen, da ist ja offenbar viel zu Compilerbau und Co. geschrieben. Ich finde aus heutiger Sicht ist es ganz gut, wenn man schon Programmier-Erfahrung hat und dann so ein Buch liest, für dich ist es vermutlich genau richtig, wenn es auch ein krasser Kulturschock wird, wenn du gewohnt bist, Konzepte nur auf relativ niedrigem Level erklärt zu bekommen "Bei OOP geht es um Klassen und Objekte" und ansonsten vor allem Fragen der Syntax im Vordergrund standen.

Peter_2498 schrieb:
Mir zumindest scheint das Buch, nachdem ich es bisschen überflogen habe, irgendwie anders zu sein, als die Programmierbücher, die ich sonst daheim habe wie "C++ Primer" oder "Python Crash Course".
Ja, das sind alles "Syntax-Lernhilfen für Einsteiger".

Um welche Uni handelt es sich? Ich bin recht begeistert, dass Programmieren dort ausnahmsweise mal nicht abgehandelt wird mit "also heute machen wir if-Verzweigung und danach die Woche for-Schleifen".
 
  • Gefällt mir
Reaktionen: Peter_2498
Peter_2498 schrieb:
Kannte das Buch davor nicht, scheint aber, nach meiner Recherche, ein Standardwerk in dem Gebiet zu sein.
Ja ist ein Standardwerk. Wirst du es brauchen? Sehr sehr unwahrscheinlich. Ggf. wirds in deiner Theoretischen Information Vorlesung mal angesprochen als Referenz für die Entwicklung einer Syntax. Ansonsten ist es eher aus historischen Gründen interessant oder wenn dich LISP interessiert. Ich hatte das vor 20 Jahren noch in der Uni genutzt. Es wird primär in der englischen Literatur noch referenziert. Du solltest dann aber auch How to Design Programs lesen, das wird an angelsächsischen Universitäten genutzt und ist im Allgemeinen weit zugänglicher als sicp.
 
  • Gefällt mir
Reaktionen: Peter_2498 und andy_m4
Peter_2498 schrieb:
Mir zumindest scheint das Buch, nachdem ich es bisschen überflogen habe, irgendwie anders zu sein, als die Programmierbücher, die ich sonst daheim habe wie "C++ Primer" oder "Python Crash Course".
Na es geht halt nicht primär um einen Programmierkurs oder ein Tutorial. Es geht schon sehr an die Grundlagen. Allerdings ist es nicht verkehrt sie zu kennen, um auch viele Hintergründe zu verstehen.
Ich kam erst relativ spät mit dem Buch in Kontakt. Da hatte ich bereits jahrelange Programmiererfahrung. Deshalb war auch nicht alles neu, aber es gab trotzdem Aspekte die ich daraus mitgenommen habe. Gerade weil es die Hintergründe beleuchtet versteht man auch besser warum bestimmte Dinge so sind, wie sie sind.

Tornhoof schrieb:
Ansonsten ist es eher aus historischen Gründen interessant oder wenn dich LISP interessiert.
Kann man so nicht unbedingt sagen. Ja. Dort wird viel anhand von Lisp erklärt aber die Themen sind eigentlich zeitlos.
Und gerade in dem Kontext des Fragestellers (Informatik Studium; also Uni-Umfeld) passt es eigentlich recht gut.

Tornhoof schrieb:
Du solltest dann aber auch How to Design Programs lesen, das wird an angelsächsischen Universitäten genutzt und ist im Allgemeinen weit zugänglicher als sicp.
Ja. Guter Hinweis, den ich noch mit einem Link zum Buch ergänze:
https://htdp.org/
 
  • Gefällt mir
Reaktionen: Peter_2498
BeBur schrieb:
Um welche Uni handelt es sich?
Das ist die TU Darmstadt. Weiß jetzt nicht genau wie die Vorlesung dann wirklich ist aber in den Literaturempfehlungen für die Vorlesung wird dieses Buch genannt.

@andy_m4
Würdest du sagen, dass dich dieses Wissen zu einem besseren Programmierer gemacht hat?
 
Also Bücher machen erst mal niemandem zu einem besseren Programmierer, wenn man das Wissen nicht auch anwendet. Und zu wissen, wie es sein sollte, heißt auch noch lange nicht, dass man es auch so macht. Beim Programmieren gibt es nur eine Sache, die Erfahrung ersetzen kann: Noch mehr Erfahrung.

Wie viel man aus einem Buch für die praktische Arbeit rausziehen kann, hängt stark vom Buch und vor allem der Arbeit zusammen.

Es gibt auch nicht den einen Programmierer. Die Skills von Programmieren sind dermaßen unterschiedlich und vielfältig. Mitnehmen wirst du auf jeden Fall was aus dem Buch. Ob es dir für die Zukunft was bringt, kann dir keiner sagen. Ich weiß auch nicht ob dir der Kunst-Unterricht in der Schule für heute was gebracht hat.
 
  • Gefällt mir
Reaktionen: breedmaster
Peter_2498 schrieb:
Würdest du sagen, dass dich dieses Wissen zu einem besseren Programmierer gemacht hat?
Grundsätzlich hilft Wissen natürlich immer.
Aber allein davon wird man kein guter Programmierer. Programmierung lebt - und da erzähle ich Dir vermutlich auch nix Neues - sehr viel vom machen. Das ist wie das lernen eines Musikinstruments oder das Malen. Da kann man auch viel drüber lesen und verschiedene Techniken kennen lernen aber letztlich kommts dann auch darauf an das korrekt anzuwenden. Insofern pflichte ich meinem Vorredner bei.
 
Ich habe das Programmieren vor paar Jahren an der TU Darmstadt gelernt, als erstes mit dem Buch "How To Design Programs". Das war die 1. Hälfte der Vorlesung. Erst in der 2. Hälfte kam Java.

Es ist schon so, dass die Sprache, mit der in HTDP gelehrt wird, auf Scheme basiert (das wiederum auf LISP basiert). Es ist eine rein funktionale Sprache. Das ist ein vollkommen anderer Ansatz als z.B. die meisten Sprachen, die in der Industrie eingesetzt werden. Es ist eine ganz andere Denkweise.
Aber man lernt mit HTDP, wie man Code gut strukturiert. Deswegen finde ich das auf jeden Fall empfehlenswert. Das würde man wahrscheinlich nicht in der Weise können, wenn man als "Hobby-Programmierer" "einfach so drauflos programmieren" würde.

Außerdem kann man neuerdings in den modernen Versionen der etablierten Sprachen wie z.B. Java, C#, JavaScript usw. auch funktionalen Code anwenden (z.B. Lambda-Funktionen).
Zu dem Zeitpunkt, wo ich HTDP gelernt habe, gab es das z.B. in Java noch gar nicht. Erst mit Java 8 wurde es eingeführt. Das war für mich ein enormer Vorteil, da ich beruflich (hauptsächlich) Java-Entwickler bin und Java 8 erst nach meinem Studium eingeführt wurde, konnte ich trotzdem sofort auf Anhieb damit umgehen, weil ich das schon von HTDP kannte.

Deswegen würde ich auf keinen Fall sagen, dass das "nur für Leute interessant ist, die sich für LISP interessieren" oder sowas.
 
Andarkan schrieb:
das wiederum auf LISP basiert
So würde ich das nicht ausdrücken. Aber ja. Es ist ein Lisp-Dialekt mit Schwerpunkt auf Minimalismus. Aber nicht in dem Sinne "so wenig Features wie möglich", sondern eher in dem Sinne das man keine Features einbaut die sich in ihrer Funktionalität überlappen, sondern mit möglichst wenig Features ein möglichst breites Spektrum abdecken.
Dieser Minimalismus macht es auch als Lernsprache so attraktiv. Da Du nicht mit hunderten Sachen erschlagen wirst.

Ein "Nachteil" ist die ungewohnte Syntax. Die aber im Grunde sogar einfacher ist als das was sonst so da draußen fabriziert wird.

Andarkan schrieb:
Es ist eine rein funktionale Sprache.
Ähm nein. Sie bevorzugt zwar eine funktionale Vorgehensweise. Aber ist eine Multiparadigmen-Sprache. Du kannst mit Scheme auch objektorientiert oder ganz klassisch strukturiert programmieren.

Wie schon angedeutet bietet ja die Sprache nur ein recht minimales Feature-Set welche aber sehr universell sind. Du kannst Dir dann daraus die Sachen bauen, die Du brauchst. Insbesondere die weitgehende Makrofunktionalität ermöglicht eine ausufernde Erweiterung der Sprache.
 
Zurück
Oben