Die Kunst der Computerprogrammierung - Lesen oder nicht lesen? [geschlossen]

63

Es gibt viele Bücher über das Programmieren, und Code Complete steht anscheinend ganz oben auf der Liste der meist gelesenen Programmierbücher, aber was ist mit der Kunst der Computerprogrammierung von Donald Knuth? Ich bin ein vielbeschäftigter Mensch, zwischen Arbeit und einer jungen Familie. Ich habe nicht viel Freizeit. Deshalb muss ich wählerisch sein, wie ich damit umgehe.

Ich frage mich - hat hier jemand 'TAOCP' gelesen? Wenn ja, lohnt es sich, sich Zeit zum Lesen zu nehmen, oder würde ein anderes Buch oder mehr On-the-Side-Programmierung wie Haustierprojekte oder der Beitrag zu Open Source meine Zeit besser für die berufliche Entwicklung nutzen?

HAFTUNGSAUSSCHLUSS - Für diejenigen unter Ihnen, die T-Shirts mit der Aufschrift "Knuth ist mein Homeboy" tragen, verstehen Sie mich nicht falsch - ich möchte sie lesen, frage mich aber nur, ob sie ganz oben auf meiner Prioritätenliste stehen sollten oder nicht wenn etwas anderes zuerst kommen sollte.

Zannjaminderson
quelle
Ich möchte es lesen, aber es ist verdammt teuer, also bekomme ich es, wenn ich mit der Uni fertig bin und anfange, etwas Geld zu verdienen. Außerdem brauche ich ein großes Bücherregal.
gablin
Ich habe es auf Seite 3 geschafft und es mit Eselsohren versehen. Verkauft das Set bei Amazon 6 Monate später.
kirk.burleson

Antworten:

72

TAOCP ist eine äußerst wertvolle Referenz, um zu verstehen, wie die Datenstrukturen und -algorithmen, die wir täglich verwenden, funktionieren und warum die Arbeit, aber es wäre eine außerordentliche Investition Ihrer Zeit, sie vollständig durchzulesen.

Verbringen Sie als Familienvater die Zeit mit Ihren Kindern.

Adam Crossland
quelle
34
+1 für Kinder - Computer sind notorisch gut zum Warten. Sie können warten, bis die Kinder älter sind.
3
+1 für Kinder, während Sie das Buch zu jeder Zeit Ihres Lebens lesen können, können Sie mit Ihrem 4-jährigen Kind nur 1 Jahr lang spielen. Und mit Ihrem 5 Jahre alten Kind für nur 1 Jahr auch ...
3
Gute Antwort. Es gibt eine Menge Dinge, die uns zu besseren Programmierern machen würden, aber wir müssen klug darüber sein, wo wir unsere Zeit investieren und uns auch daran erinnern, dass es mehr im Leben gibt, als ein großartiger Programmierer zu sein.
Jon Hopkins
5
Ich habe noch keine Kinder und möchte es unbedingt lesen, bevor ich sterbe. Soll ich keine Kinder haben?
sank
1
@sank du denkst wie ein Programmierer ... :)
Angelin Nadar
23

Ersetzen Sie "die Enzyklopädie" in Ihrer Frage durch jeden Verweis auf TAOCP, und ich denke, die Antwort sollte offensichtlich sein. Denn genau das ist TAOCP in vielerlei Hinsicht.

Es gibt eine (möglicherweise apokryphe) Geschichte über Steve Jobs Treffen mit Knuth. Das erste, was Jobs zu ihm sagte, war "Es ist eine Freude, Sie kennenzulernen, Dr. Knuth. Ich habe alle Ihre Werke gelesen!". Knuths Antwort lautete "Du bist voller Scheiße": http://www.folklore.org/StoryView.py?project=Macintosh&story=Close_Encounters_of_the_Steve_Kind.txt

Jason Baker
quelle
1
Die Enzyklopädie enthält eine Unmenge von Dingen, die zumeist nicht allzu interessant oder relevant für Menschen mit einem breiten Spektrum von Interessen sind. Die Inhalte von TAOCP sind für jeden Softwareentwickler zumindest ein wenig relevant.
David Thornley
4
Re: the Jobs story: Es ist eine apokryphe Geschichte. Das sagte Knuth bei Randall Munroes Google Tech Talk.
greyfade
4
Die "Geschichte" brachte mich trotzdem zum Lächeln. :)
MetalMikester
Ich kann Dr. Knuths Humor bestätigen. Ich habe eine E-Mail an seine veröffentlichte Adresse gesendet. Ich war überrascht, dass er antwortete. Seine Antwort war eine markierte Kopie meiner E-Mail, in der er mir höflich sagte, ich solle den Rest des Abschnitts in TAOCP lesen. In meiner E-Mail-Signatur geht es darum, aus Missouri zu kommen (zeig es mir), worauf er eine Bemerkung über einen dummen MO-Politiker machte. Er schloss dann mit den Worten: "Nur ein Scherz, beschuldige mich nicht für Gouverneur Schwarzenegger."
Dbasnett
21

Nein, es sollte nicht ganz oben auf Ihrer Prioritätenliste stehen. Ich habe einen vollständigen Satz und habe NICHT die ganze Sache gelesen. Ich habe es (bis jetzt) ​​als Referenz für bestimmte Probleme verwendet (es war von unschätzbarem Wert für mein Verständnis der Zufälligkeit und das Testen von Zufallsgeneratoren). Immer wenn ein CS-Thema auftaucht, mit dem ich mich nicht wirklich auskenne, neige ich dazu, das relevante Stück TAOCP als einen guten Schritt in meinem Verständnis zu nehmen.

Wenn Sie sich dazu entschließen, es zu lesen, haben Sie mehr Kraft, und ich empfehle auf jeden Fall, es in kleinen Stücken einzunehmen. Haben Sie keine Angst, sich zuerst das anzuschauen, was am interessantesten ist.

Michael Kohne
quelle
1
Du triffst den Nagel auf den Kopf.
kirk.burleson
9

TOACP ist eine wichtige Lektüre - irgendwann. Je nachdem, was Sie täglich tun, ist dies möglicherweise nicht die dringendste.

Es ist eines dieser Bücher (naja, Sammlungen von Büchern), das sich gut zu Beginn Ihrer Karriere lesen lässt, weil es Ihnen wirklich gute Einsichten gibt, die Sie normalerweise erst später erhalten, aber es ist nicht wesentlich, um zu überleben, bis Sie diesen Teil abgeschlossen haben In Ihrer Karriere entscheiden Sie sich nicht nur für Code, sondern auch für die Toolbox. Dies ist der Punkt, an dem Sie wirklich Algorithmen studieren, hoffentlich das Sprachdesign bereits ein wenig verstehen und ein sehr breites Verständnis dafür haben möchten, welche Tools, Sprachen und Systeme es gibt und wie jedes einzelne in das Ökosystem der Dinge passt, die Sie können für ein bestimmtes Projekt ziehen.

Mit anderen Worten: Es ist Lernen im großen Stil. Wenn Sie also wie ich besessen davon sind, lesen Sie es jetzt. Wenn Sie es nicht sind, können Sie es aufschieben, bis Sie sich danach sehnen, die Leiter hinaufzusteigen und ein Mann im großen Stil zu werden.

HedgeMage
quelle
6

Nachdem ich vor kurzem genau diese Aufgabe übernommen habe, kann ich sagen, dass die Art und Weise, wie er schreibt, sehr angenehm ist und die Probleme (je nach Schwierigkeitsgrad) sehr treffend benannt sind. Holen Sie sich den ersten Band, lesen Sie die Kapitel 1 und 2 und sehen Sie, wie es Ihnen gefällt.

sova
quelle
6

TAOCP ist eine großartige Arbeit, aber es wäre eine schreckliche Zeitinvestition für einen praktizierenden Softwareentwickler. Wenn Sie es tun, werden Sie einige Jahre (so lange wird es dauern) Ihres professionellen Budgets für die Selbstverbesserung opfern, um zu viel über zu wenig zu lernen.

Ich würde empfehlen, ein oder mehrere weniger "ultimative" Bücher über Algorithmen durchzuarbeiten. Mein Favorit in diesem Bereich ist das Algorithm Design Manual von Steven S. Skiena

Wenn Sie dann das Gefühl haben, dass Sie mehr brauchen / wollen, steigen Sie auf den Knuth auf.

Gleichzeitig können Sie ein oder mehrere Bände TAOCP kaufen, es durchsehen, um zu verstehen, welche Bereiche Knuth abdeckt, und es in Ihrer Bibliothek aufbewahren, falls Sie in Ihrem Alltag tatsächlich einige Informationen benötigen Arbeit. Meine Vermutung ist, dass Sie es nicht tun würden und das ist ein weiterer Grund, warum ich nicht raten würde, zu versuchen, zu lesen. Wenn Sie jedoch feststellen, dass Sie häufig genug darauf verweisen, dann wissen Sie, dass es sich lohnt, es vollständig durchzulesen.

kdubinets
quelle
6

Knuth brechende Arbeit ist die beliebteste Referenz , dass Programmierer der Absicht zu lesen, oder Finish Lesen. Irgendwann mal.

Steven A. Lowe
quelle
2
Es ist wie Hawkings "Eine kurze Geschichte der Zeit" für Programmierer.
Jon Hopkins
1
Ich habe ABHIT gelesen. Hawking-Strahlung kommt mir komisch vor. Ein Schwarzes Loch schrumpft, weil noch mehr Material hineinfällt? Ich bekomme die Erhaltung der Masse und die zwei Hälften von jedem virtuellen Paar können sich nie treffen, um etwas zu zerstören, aber die Idee ist immer noch verrückt.
Steve314
@ Steve314: Was noch seltsamer ist, dass sehr kleine Schwarze Löcher heftig explodieren. Theoretisch.
Steven A. Lowe
2
ABHOT ist kurz und für die breite Öffentlichkeit bestimmt. TAOCP ist keines dieser Dinge.
Sean McMillan
3

+10 auf die Familie / Kinder Kommentar. Ich versuche, das meiste zu lesen, während ich auf Rotaugenflügen zu Kunden bin.

Aber ... ja, sehr lesenswert. Kein Grund, linear zu lesen, stattdessen überfliegen und ein paar interessante Themen auswählen.

Jé Queue
quelle
3

Ich bin fest in dem Lager der Leute, die der Meinung sind, dass jeder Entwickler die Investition in das Erhalten der Bücher irgendwann tätigen sollte (und es wird jetzt einfacher, da es so aussieht, als würden sie in einem Taschenbuch nachgedruckt ), aber aus dem gleichen Grund würde ich Es ist auch schwer zu glauben, dass sich jemand hinsetzt und sie alle von vorne bis hinten liest.

Der beste Ansatz für sie - wenn Sie keinen Weg zur Arbeit haben, wo Sie Zeit zum Sitzen und Lesen haben - ist es, genug von ihnen zu lesen, um zu wissen, wo sich Dinge in ihnen befinden, und dann, wann immer Sie wollen, ein vollständiges Kapitel zu lesen Verwenden Sie sie als Nachschlagewerke für ein bestimmtes Problem. Bei Google und Stack Overflow ist es nicht so üblich, nach Nachschlagewerken zu suchen. In einigen Fällen können Sie jedoch feststellen, dass die Bücher einen Einblick bieten, nach dem Sie zusätzliche Zeit im Internet suchen müssen.

rjzii
quelle
1
Ein ganzes Kapitel lesen? Das ist ungefähr ein halbes Volumen und es sind keine kleinen Volumina. Ich denke, Sie meinen vielleicht eine kleinere Texteinheit.
David Thornley
3

Vergiss nicht, dass Knuth am Anfang etwas darüber schreiben wollte, wie man einen Compiler schreibt.

Sie können zum Beispiel mit Wikipedia eine Menge Informationen im Internet erhalten, aber wenn Sie kein Forscher sind, lesen Sie einfach die Zusammenfassung, Sie werden zufrieden sein.

Sie können immer noch den ersten Band bekommen, damit Sie ihn lesen können, wenn Sie sich langweilen ...

jokoon
quelle
2

Es ist wahrscheinlich wichtiger, dass Sie diese Probleme in dem Buch lösen, als es nur zu lesen. Das wird viel Zeit erfordern.

Er mag bis zu 4 Bände und 5 Faszikel (was auch immer das sein mag), also wäre das Vervollständigen der Bücher wahrscheinlich besser als ein Universitätskurs in den Grundlagen der Informatik und macht Sie fast zum besten Programmierer aller Zeiten.

Da du eine junge Familie hast, wie ich, hast du mir eine ziemlich gute Idee gegeben. Ich kaufte die Bücher nacheinander und unterrichtete Ihre Kinder durch sie.

Peter Turner
quelle
1
"Es wäre also wahrscheinlich besser, die Bücher zu vervollständigen als einen Universitätskurs." - Die Bände 1-3 wurden als Lehrbücher in mehreren Kursen verwendet, als ich meinen CS-Abschluss erhielt, und wir haben einen ganzen Kurs für nur die Hälfte eines der Bände ausgegeben zB "Volume 3 Sorting and Searching" wurde in zwei Kursen unterrichtet.
Tcrosley
2
Kleinigkeit, aber im Moment gibt es nur drei veröffentlichte Bände, von denen der vierte in Bearbeitung ist. Die Faszikel sind ein Vorabdruck des vierten Bandes. www-cs-faculty.stanford.edu/~uno/taocp.html
rjzii
1

Wenn Sie neugierig sind, dann tun Sie es, aber die Verdauung nimmt einige Zeit in Anspruch, sodass Sie sich Zeit nehmen müssen.

Haben Sie einen Pendler, auf dem Sie lesen können - das wäre perfekt.


BEARBEITEN: Diese Vorschau eines kleinen Teils von Band 4 könnte Sie interessieren: http://www-cs-faculty.stanford.edu/~uno/fasc1a.ps.gz

(Anmerkung: komprimiertes Postscript)

user1249
quelle
1
Leider (in diesem Fall - sehr glücklich, sonst) telecommute ich, so ist das keine Option.
Zannjaminderson
1

Es ist nicht etwas, was die meisten Leute sich hinsetzen und von vorne bis hinten lesen wollen, nein. Es ist eine unglaublich wertvolle Referenz, und es ist auf jeden Fall gut, sie aufzugreifen, einen interessanten Abschnitt auszuwählen, darüber zu lesen und einige Übungen zu machen. Aber die oben gemachten Enzyklopädie-Vergleiche sind ziemlich zutreffend ... es ist groß, umfangreich und detailliert. Und einige der "Übungen" sind Forschungsprobleme, deren Lösung Jahre dauern kann.

Wenn Sie sich nur besser mit Low-Level-Algorithmen auskennen möchten, ist es möglicherweise besser, mit den Robert Sedgewick-Büchern zu beginnen (z. B. "Algorithmen in C", "Algorithmen in Java" usw.).

Geisteskriminalität
quelle
1

Wenn du die Welt verändern willst, dann lies sie. Wenn Sie neue Hacks lernen möchten, lesen Sie es nicht.

sehr dumm
quelle
1

Knuths TAOCP ist ein Meisterwerk. Aber genau wie bei jedem Meisterwerk (wie "Illiad", "War and Peace" oder Prousts "Auf der Suche nach der verlorenen Zeit"), ist es nicht für jedermann oder jede Zeit geeignet.

Das Buch ist sehr gut geschrieben und sehr gut recherchiert. Die Probleme sind groß und die Erklärung der Algorithmen ist gut gemacht.

Das große Problem des Buches ist die Tatsache, dass Knuth Code für eine fiktive Assemblersprache für einen fiktiven Computer zeigt. Ich verstehe, warum er es getan hat, aber die Tatsache ist, dass es scheiße ist.

Ich empfehle, dieses Buch als Bibel zu verwenden. Wenn Sie Hilfe brauchen, suchen Sie danach. Sie finden die Antwort. Es ist mir mehr als einmal passiert!

Eduardo
quelle
3
Wäre es hilfreich, wenn Sie den tatsächlichen Assembler für IBM360 oder PDP8 verwendet hätten?
Martin Beckett
1
Mit einer nicht fiktiven Assemblersprache hätte es diese 50 Jahre niemals ertragen können. Das benachteiligt alle gleichermaßen!
Luser Droog