Ist das Buch „Struktur und Interpretation von Computerprogrammen“ eine gute Lektüre für Java-Programmierer? [geschlossen]

14

Dies mag subjektiv sein und wahrscheinlich abgeschlossen sein, aber ich wollte immer noch wissen, ob es wirklich hilfreich ist, Struktur und Interpretation von Computerprogrammen zu lesen.

Struktur und Interpretation von Computerprogrammen

Das Buch verwendet kein Java. Nicht, dass ich Java lernen wollte. Ich bin nur neugierig zu wissen, ob es nützlich sein wird, ein besserer Programmierer zu sein, und was kann ich aus dem Buch ziehen, oder sind andere Alternativen zu diesem Buch besser für Java-Programmierer geeignet?

ashishjmeshram
quelle
32
Versuchen Sie zunächst, sich nicht als "Java-Programmierer" zu positionieren. Oder als "Programmierer in jeder Sprache". Es ist eine Sackgasse. Sei stattdessen nur ein Programmierer. Und dann wird SICP äußerst nützlich sein. Wahrscheinlich die nützlichste Lektüre da draußen.
SK-logic,
3
Es ist sehr schwer, deshalb liest du es.
Jonathan Henson
4
Beginnen Sie mit Kapitel eins, gehen Sie Seite für Seite, bearbeiten Sie alle Beispiele und machen Sie erst Fortschritte, wenn Sie jede Seite und jedes Beispiel verstanden haben. Der Antwortschlüssel ist online.
Jonathan Henson
2
@JonathanHenson und wenn du am Ende bist, hör auf
jk.
3
Ja, Sie müssen Schema lernen. Einer der Gründe, warum in diesem Buch Schema verwendet wird, besteht darin, dass Sie das gesamte Schema in etwa einem Tag lernen können, wenn Sie noch nie zuvor programmiert haben, oder in etwa 10 Minuten, wenn Sie programmiert haben. Schließlich ist SICP ein Buch für Anfänger, das keinerlei Programmierkenntnisse voraussetzt.
Jörg W Mittag

Antworten:

23

Nun, ich weiß nicht, ob dieses Buch Ihnen helfen wird, aber als ich mich vor etwa 20 Jahren mit diesem Buch befasste, verbesserte es definitiv meine Programmierkenntnisse (unabhängig von einer Programmiersprache). Und ich denke, besonders ein Java-Programmierer wird einige neue Einsichten bekommen, die er / sie nicht bekommt, wenn er sich nur an Java hält.

Joel Spolsky 2005 hat einen schönen Artikel über Java und SICP geschrieben, der für Sie von Interesse sein könnte:

http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html

Doc Brown
quelle
+1 Die bestmögliche Antwort auf eine Frage, die beinahe einer Buchempfehlung gleichkommt.
Joshua Drake
13

Ich denke, die Struktur und Interpretation von Computerprogrammen ist ein großartiges Buch zum Lesen. Es gibt jedoch ein paar Probleme damit.

Das größte Problem in meiner Erfahrung ist , dass, während das Buch Wissen absolut keine Programmierung erfordert, und ist komplett Neulinge ausgerichtet, es ist darauf ausgerichtet, komplette Neulinge , die Studie am MIT . Und so, während es keine Programmierkenntnisse übernimmt, ist es nicht übernehmen ziemlich viel Domain Wissen, zB in den Bereichen Elektrotechnik, Physik und Mathematik. Hinweis: Diese haben nichts mit den gelehrten Konzepten zu tun , sondern dienen lediglich zum Verständnis der Übungen und Beispiele .

Größere Leute als ich haben es in einem Artikel mit dem Titel Die Struktur und Interpretation des Informatik-Lehrplans viel besser erklärt . Zum Glück sind sie nicht nur Nörgler, sondern haben stattdessen ein eigenes Buch geschrieben: How to Design Programs . Wenn Sie über das Lesen von SICP nachdenken, möchten Sie vielleicht zuerst HtDP lesen: Es deckt ungefähr den gleichen Bereich ab wie SICP, setzt jedoch nur durchschnittliches Domänenwissen auf High-School-Ebene voraus. (Tatsächlich ist es geschrieben, um High-School-Kindern beigebracht zu werden.)

Nachdem Sie HtDP beendet haben, können Sie immer noch zurückgehen und SICP lesen, da jetzt ein fehlender Teil des Domänenwissens nicht mehr so ​​schädlich ist, weil Sie das Konzept zuvor gesehen haben.

Hinweis: Es gibt einen Entwurf für eine zweite Ausgabe von HtDP , den Sie möglicherweise anstelle der ersten Ausgabe lesen möchten. Das Material zur imperativen Programmierung wurde entfernt und wird im noch ungeschriebenen zweiten Band " How to Design Components" behandelt . Sie können es jedoch entweder aus der ersten Ausgabe oder von SICP oder beiden übernehmen.

Jörg W. Mittag
quelle
Könnte ich eine Alternative zu SICP vorschlagen: Konzepte, Techniken und Modelle der Computerprogrammierung
Eden
@Eden: CTM ist sehr gut, da stimme ich zu. Ich halte es jedoch nicht für ein Programmierbuch wie SICP, HtDP und Concrete Abstractions. Aber es gehört definitiv auf die "Bücher, die Sie zu einem besseren Programmierer machen" -Liste!
Jörg W Mittag
5

Nach meinem Verständnis konzentriert sich SICP mehr auf Bereiche der funktionalen Programmierung, einschließlich der rekursiven Programmierung und der starken Einführung in CS - was für neue Programmierer etwas schwer zu verstehen ist . Ein weiterer Punkt, der für das MIT vorbereitet und unterrichtet wird, sind einige gute Grundlagen in den Bereichen Ingenieurwesen, Mathematik und Physik erforderlich, um dieses Buch nützlich zu finden.

Ich würde eine gute Reihe von Büchern empfehlen, bei denen jeder Schwerpunkt auf verschiedenen Aspekten der Softwareentwicklung liegt:

  • Code Complete 2 - konzentriert sich auf die Prozesse der Softwareentwicklung.
  • Clean Code - konzentriert sich auf das Codieren im Kleinen. Wie man Klassen und Funktionen schreibt.
  • Pragmatischer Programmierer - konzentriert sich auf die Arbeit in einem Team, das Software produziert.

Eine detailliertere Beschreibung der oben genannten und anderer Bücher kann aus den folgenden Quellen entnommen werden:

  1. Wie man ein Programmierer mit 10 einfachen Büchern ist
  2. Beste Bücher für Programmieranfänger

Fühlen Sie sich bitte frei, der Liste etwas hinzuzufügen, da dies nicht ideal ist :)

Bearbeiten: Bei der Auswahl der oben genannten Bücher und der Festlegung der Priorität beim Lesen kommt es wirklich auf den Zweck an, was Sie primär versuchen zu tun oder zu lernen.

Yusubov
quelle
7
Ich stimme den Vorschlägen im (impliziten) Kontext zu - aber Ihre Antwort wäre noch besser, wenn tatsächlich erwähnt würde, was Ihnen an SICP nicht gefällt (oder gefällt).
Joris Timmermans
4
Vergleich von Äpfeln und Orangen - alle Bücher, die Sie erwähnen, sind ausgezeichnete Bücher über Software-Engineering. SICP befasst sich mehr mit Informatik - was Computerprogrammierung konzeptionell ist.
Nate
1
Diese Antwort fühlt sich zu sehr wie eine Antwort auf eine empfohlene Leselistenfrage an. Was meiner Meinung nach nicht gut zum Ziel der Stack Exchange-Sites passt: meta.stackexchange.com/questions/113678/…
Joshua Drake
@Nate, es ist nicht Äpfel und Orangen zu vergleichen, es geht nur um CS. Jedes der Bücher hat jedoch einige gemeinsame Themen.
Yusubov
2
@ MadKeithV, ich stimme Ihren Kommentaren zu. Ich habe meine Gedanken zu SICP in die erste Zeile gesetzt.
Yusubov
4

Ich werde hier auf die Sprünge gehen und sagen - für die meisten Leute wahrscheinlich keine gute Lektüre - welche Sprache auch immer.

Wie Knuth ist es ein gutes Buch, gelesen zu haben. Aber selbst wenn Sie ein heißes MIT ugrad sind, wird es immer noch den größten Teil eines Jahres dauern, um richtig zu lesen, und das mit Dozenten und TAs, die helfen.

Gibt es andere Bücher über Softwareentwicklung, die Sie in dieser Zeit lesen konnten und die von größerem Wert wären? Gibt es andere Sprachen, die Sie in der Zeit lernen könnten?

edit Nur um ein wenig zu erweitern:
Software-Engineering ist Engineering, es dreht sich alles um Optimierung. Ihre Aufgabe ist es, Ihr Wissen für ein bestimmtes Zeit- und Kostenbudget zu maximieren.
SICP ist eine Einführung in die Programmierung in einer funktionalen Sprache. Der Grund für die Verwendung einer funktionalen Sprache ist, dass es einfacher ist, viele mathematische Konzepte der Programmierung in funktionalen Sprachen als in prozeduralen zu beschreiben und viel einfacher zu lesen als formale Logik.

Es gibt auch ein gewisses Maß an Haltung, dh. "Sie sind nicht wirklich ein Programmierer, es sei denn, Sie lesen SICP" oder Knuth oder können in Lisp oder C oder x86 Assembler programmieren. Das ist normalerweise leicht zu widerlegen. dh Sie können kein echter Programmierer sein, wenn Sie Cantors Arbeit zur Mengenlehre und zu Maxwells Gleichungen nicht kennen und mit der Lochmobilität in Halbleitern vertraut sind.

Martin Beckett
quelle
Es gab andere Bücher auf meiner Wunschliste, wie Code Complete 2, Clean Code, Pragamatic-Programmierer, Refactoring usw. Aber diese waren im Gegensatz zu SICP mehr auf Java oder zumindest OOP-zentriert.
Ashishjmeshram
5
Deshalb habe ich sie zuerst gelesen
Martin Beckett,
7
Ich habe über das Abwerten dieser Antwort diskutiert, aber festgestellt, dass nur ein Kommentar besser ist: Ich stimme zu, dass SICP für die meisten Menschen keine gute Lektüre ist, besonders früh, aber ich glaube, dass ein großartiger Entwickler in der Lage sein sollte, mit diesem Buch umzugehen, und lernen wird sehr viel davon. Großartige Entwickler sind nicht "die meisten Leute". Es ist ein gutes Filterbuch.
Joris Timmermans
4
Ich stimme dem nicht zu (bis zu einem gewissen Punkt) - ein runder Entwickler, der SICP im Griff hat, kann immer noch etwas über die Unix-Umgebung usw. lernen. Ich würde lieber einen Entwickler ohne Plattformerfahrung als SICP beauftragen und sie neu schulen, als jemanden, der dies nicht tut bekomme kein SICP.
Joris Timmermans
1
@MadKeithV - Ja und aus dem gleichen Grund stelle ich Doktoranden der Mathematik / Physik ohne Programmiererfahrung ein. Wenn Sie jedoch hauptberuflich als Programmierer und vor allem als Anfänger arbeiten, gibt es einfachere Bücher, die vielleicht besser sind (Wert / Zeit) als Knuth oder SICP oder das Lesen von Turings Zeitungen.
Martin Beckett
1

Planen Sie, für den Rest Ihres Lebens ein "Java-Programmierer" zu sein? Dann gibt es wahrscheinlich bessere Bücher zum Lesen. Wenn Sie im Allgemeinen ein guter Programmierer sein möchten, ist es eine ausgezeichnete Lektüre. Hier ist warum. Es gibt bestimmte Werkzeuge, die jeder gute Programmierer in seiner Toolbox benötigt. Eine davon ist eine gründliche Kenntnis der Datenstrukturen und -algorithmen (wenn Sie mir nicht glauben, machen Sie ein Interview bei Microsoft, Google, Amazon usw.). Begleitende Algorithmen sind Komplexitätsanalysen, Rekursionen und ein solides Verständnis von Zeigern, das nicht der Fall ist verletzt. Wenn es um Algorithmenanalyse, rekursive Prozesse und das Funktionsparadigma im Allgemeinen geht, kann ich mir kein besseres oder herausfordernderes Buch als SICP vorstellen.

Jonathan Henson
quelle