Ich bin ein CS-Student und ehrlich gesagt verstehe ich Knuths Bücher nicht [geschlossen]

52

Ich bin auf dieses Zitat von Bill Gates gestoßen: "Sie sollten mir auf jeden Fall einen Lebenslauf schicken, wenn Sie das Ganze lesen können." Er sprach über die Kunst des Programmierens Bücher. Ich war also ziemlich neugierig und wollte alles lesen. Aber ehrlich gesagt verstehe ich das nicht.

Ich bin wirklich nicht so intellektuell. Das sollte der Grund sein, warum ich es nicht verstehen kann, aber ich bin gespannt darauf zu lernen. Ich lese gerade Band 1 über grundlegende Algorithmen. Gibt es da draußen Bücher, die für Anfänger / langsame Leute wie mich freundlich sind, was mir helfen würde, mein Wissen aufzubauen, damit ich in Zukunft Knuths Buch mühelos lesen kann?

Rho
quelle
Humm, sagen wir, ich würde es verstehen (und Sie auch, denke ich), aber es würde viel Zeit
Nils
22
Sie sind möglicherweise schwer zu lesen, und es gibt möglicherweise leichtere Bücher, aber Sie sollten sie trotzdem lesen. Ich bin erst durch das erste Buch gekommen und verstehe nicht alles darin! aber es lohnt sich. Informatik ist schwer . Je früher Sie feststellen, dass Sie nicht klug genug sind, um es zu verstehen, desto eher können Sie lernen, wie man es lernt.
Michael K
2
Sie sind für Mathematiker und Programmierer geeignet. CS hat sich in den letzten Jahren weiterentwickelt, und es gibt eine Menge nützlicher Bereiche, die nicht mathematisch sind. In welche Richtung möchten Sie sich weiterentwickeln? Wenn es sich um Algorithmen und dergleichen handelt, sind sie wahrscheinlich gut zu lesen, wenn es sich um andere Bereiche handelt, werden sie Ihren Horizont erweitern, aber genauso wie das Lesen eines Buches über ein biologisches Thema. Abhängig von Ihrer Region können sie also überall sein, von unternehmenskritisch bis fast unbrauchbar.
Coder
1
Seit wann halten Programmierer Bill Gates für maßgeblich?
Giorgio
2
Coursera bietet 6 kostenlose Kurse zu Algorithmen an (Algorithmen Teil 1 und 2, Algorithmenentwurf und -analyse Teil 1 und 2 und Analytische Kombinatorik Teil 1 und 2).
Anthony

Antworten:

39

Auch ich denke, Knuths Buch ist etwas fortgeschritten und schwer zu verstehen. Diese Bücher sind definitiv für Algorithmen auf Forschungsniveau, IMHO.

Gibt es da draußen Bücher, die für Anfänger / langsame Leute wie mich freundlich sind?

Die Einführung in Algorithmen von CLRS ist viel einfacher.

EDIT :

Wenn Sie jedoch Knuths Buch lesen möchten , sollten Sie zuerst Konkrete Mathematik durchgehen . Knuth möchte, dass seine Schüler den grundlegenden mathematischen Teil der Algorithmenanalyse kennen.

Prasoon Saurav
quelle
5
Das Handbuch zur Algorithmenentwicklung ist noch einfacher und zugänglicher - es macht fast Spaß, es zu lesen
Martin Beckett
Die Einführung in Algorithmen ist ein großartiges Buch. Wir haben dies für unseren ersten Kurs über CSE-Algorithmen verwendet, und ich habe es geliebt. Obwohl ich sagen muss, dass ich viele Iterationen damit verbracht habe, dieselben Beispiele durchzugehen, um wirklich zu sagen, dass ich sie verstehe.
Chris
4
@SidCool: Es gibt eine dritte CLRS-Ausgabe mit einem Dutzend neuer Abschnitte.
Bill the Lizard
10
Knuths Bücher sind War & Peace of Programming. Sie sind gut, werden aber hauptsächlich verwendet, um Bücherregale eindrucksvoll aussehen zu lassen.
Gaurav
6
"Auch ich denke Knuths Buch ist ein bisschen fortgeschritten"? Bescheidenheit eh :)
Occulus
57

Lesen Sie unbedingt das gesamte Zitat von Gates, einschließlich des Folgenden:

"Es hat unglaublich viel Disziplin gekostet, und es dauerte mehrere Monate, bis ich es gelesen hatte. Ich habe 20 Seiten studiert, es für eine Woche beiseite gelegt und bin dann für weitere 20 Seiten zurückgekommen. Wenn jemand so dreist ist, dass er glaubt, alles zu wissen, wird Knuth es tun Hilf ihnen zu verstehen, dass die Welt tief und kompliziert ist. "

Sie sind keine einfachen Bücher und sollen es auch nicht sein. Denken Sie daran, dass eines von Knuths Zielen darin bestand, der Informatik mathematische Strenge zu verleihen . Das ist großartig, wenn Sie etwas über einen Algorithmus beweisen möchten , aber nicht so großartig, wenn Sie nur wissen möchten, wie er funktioniert.

Michael Dorfman hat ein paar gute Tipps zum Lesen der Bücher in seiner Antwort auf die (jetzt gelöschte) Frage zu Stackoverflow: Was kann ich aus dem Lesen des Loses machen? . Wenn Sie keine 10-k-Wiederholungen haben, können Sie die Frage und ihre Antwort weiterhin auf dem Wayback-Computer anzeigen .

Was bekommen Sie vom Lesen des Loses? Eine exzellente Grundlage in der Informatik. Sie werden verstehen, wie Computer funktionieren, von Logikgattern bis hin zu Compilern. Sie werden über Probleme nachdenken, von denen Sie nie wirklich gewusst haben, dass es sich um Probleme handelt (dh wie lässt sich am schnellsten multiplizieren?) Und algorithmische Zusammenhänge zwischen Dingen erkennen, von denen Sie nie dachten, dass sie in Beziehung stehen (z. B. Flussbetten, RNA und geschachtelte Klammern).

Ich bin völlig anderer Meinung als die Leute, die sagen "Software bauen statt über Software lesen" - es gibt einen Unterschied zwischen den Disziplinen Software-Engineering und Informatik. TAOCP handelt von letzterem.

Wenn Sie noch nicht begonnen haben, habe ich ein paar Empfehlungen.

Zunächst möchten Sie vielleicht mit Band 4 beginnen. Es ist ein aufregendes Material, das sehr aktuell ist und durch das Knuths Sinn für Humor hindurchscheint. Außerdem gibt es Videos (auf der Stanford SPCD-Website oder im Stanford iTunes), in denen Knuth verschiedene Abschnitte behandelt. Diese Videos werden dringend empfohlen. Die Fascicles 0, 1, 2, 3 und 4 von Band 4 sind als separate Taschenbücher erhältlich. Zusammen ist das veröffentlichte V4-Material größer als jedes der ersten drei Bände, jedoch in mundgerechte Stücke geschnitten. (Ich frage mich, ob die Bände 1-3 den Leuten weniger schrecklich erscheinen würden, wenn jeder Band in Einkapitel-Taschenbuchform veröffentlicht worden wäre ...)

Abhängig von Ihrem mathematischen Hintergrund empfehle ich Ihnen, Kapitel 1 beim ersten Mal zu überfliegen und bei Bedarf wieder aufzurufen. In der Tat sollten Sie wahrscheinlich jeden Abschnitt (mindestens) zweimal lesen - schnell beim ersten Mal, nur um die Intuition und den Kern der Argumente zu verstehen, und dann langsam, sorgfältig, um jeden Schritt zu verstehen.

Lesen Sie unbedingt Volume 1, Fascicle 1 unter MMIX anstelle der alten Abschnitte unter MIX. MMIX ist in vielerlei Hinsicht besser und es ist besser, den MIX im Text nach MMIX zu konvertieren, als beide Welten zu überspannen.

Eine allgemeine Regel: überspringen Sie nicht die Übungen. Es gibt viel gutes Material in den Fragen (und Antworten). Mache so viele Übungen wie du kannst; aber lesen Sie sie alle (und lesen Sie die Antworten, sobald Sie das Problem ausprobiert oder beschlossen haben, es zu bestehen).

Wenn Sie den Fehler wirklich bemerken, lesen Sie den Index. Viele tolle Witze versteckt dort.

Natürlich ist StackOverflow ein guter Ort, um bestimmte Fragen zum Text zu stellen, falls sie auftreten sollten.

Für andere Quellen habe ich herausgefunden, dass das Durchsuchen der Lehrpläne angesehener Informatikschulen nützlich ist. Zum Beispiel Lehrbücher für den Beginn von Algorithmusklassen:

Corbin March
quelle
Der Link zu SO war defekt, aber ich fand einen Post, den ich mir ähnlich vorstelle: stackoverflow.com/questions/1022167/…
asjohnson
+1 für den ursprünglichen Beitrag auf dem Weg zurück Maschine und die Buchliste von diesen Universitäten
Anthony
+1 für die Empfehlung, mit Volume 4, Fascicles 0, 1, 2, 3 und 4 zu beginnen, und für das Lesen von MMIX anstelle von MIX. Aus diesem Grund beginne ich mit Volumn 1, Fascicle 1, da es sich um MMIX handelt.
Shaun Luttin
Als Java / C-Programmierer empfinde ich die <Datenstruktur- und Algorithmusanalyse in Java> als sehr leicht verständlich und recht praktisch.
Eric Wang
29

Knuth ist der am meisten verehrte, zitierte, besprochene und hoch angesehene Informatikautor in der Geschichte. Seine Bücher schmücken die Bücherregale aller ernsthaften Softwareentwickler und werden mit dem gleichen Maß an Respekt bezeichnet, das die Menschen der Bibel und der Kunst des Krieges entgegenbringen.

Ich habe sogar gehört, dass einige Leute tatsächlich Teile von Knuths Büchern gelesen haben .

Die meisten Leute haben nur vor .

Persönlich speichere ich sie für meinen Ruhestand

Steven A. Lowe
quelle
22
Deshalb sind abgenutzte, gebrauchte Exemplare mehr wert als neue!
Martin Beckett
13
Wenn Sie die Kunst des Krieges verstehen, werden Sie feststellen, dass Sie die Leute nur dazu bringen müssen, zu glauben, dass Sie Knuth verstehen, wenn Sie dies nicht tun, und umgekehrt, dass Sie Knuth nicht verstehen, wenn Sie dies tun. Wenn nicht, tust du nicht. Und wenn Sie Buch 5 des Buches der fünf Ringe verstehen, müssen Sie nicht einmal über Knuth sprechen. Und wenn Sie ESRs The Art of Unix Programming gelesen und die Koans verstanden haben, werden Sie nicht einmal Knuth brauchen, weil Sie die Barriere der Komplexität überwunden haben.
Christopher Mahan
20

Knuths Bücher haben das Gebiet der Algorithmen für immer verändert. Er selbst hat gesagt, dass "2 Seiten in meinem Buch die gesamte berufliche Arbeit eines Menschen sind" und dass seine Bücher schwer zu lesen sind. Das Buch enthält kondensiertes Material aus jahrelanger Arbeit in der Informatik.

Sie sollten sich nicht schlecht fühlen, wenn Sie es nicht verstehen können.

Wie Prasoon sagte, ist CLRS ein einfacher zu lesendes Buch.

Sie haben auch Algorithmen von Rajasekaran, Sahni et al., Die leicht zu verstehen sind.

Arjun J Rao
quelle
das ist erstaunlich zu hören .. Ich dachte, ich bin der einzige, der Probleme beim Lesen dieses Buches hat .. Vielen Dank
Rho
7
@Raymond Ho: Ich glaube, niemand liest wirklich gerne Knuths Bücher. Ich kenne mindestens eine Person, die sie im Bücherregal hat, nur um das Regal eindrucksvoll aussehen zu lassen.
FrustratedWithFormsDesigner
12

Als ich meinen Abschluss machte, nahm ich mir die ersten drei Bände von TAOCP als Abschlussgeschenk und versuchte, sie durchzulesen. Ich habe es nie geschafft. In diesen Tagen habe ich vielleicht 1/3 der ersten drei Bände durchgearbeitet (in keiner bestimmten Reihenfolge gedacht). Das Material ist definitiv dicht, aber ich habe drei Tipps gelernt, die mir sehr geholfen haben.

Versuchen Sie zunächst nicht, von vorne bis hinten zu lesen. TAOCP ist wirklich so viel wie ein Nachschlagewerk, und ich habe festgestellt, dass es am besten ist, einen Abschnitt zu lesen, wenn er für ein Problem relevant ist, das Sie lösen möchten. Wie bei vielen Dingen auf der Welt ist das Verstehen der Lösungen viel einfacher, wenn Sie auf die Probleme gestoßen sind, die sie zu lösen versuchen.

Als nächstes ist das Flussdiagramm vorne im Buch nicht nur ein bisschen Humor, sondern auch ein nützlicher Tipp. Lesen Sie die Abschnitte, an denen Sie iterativ arbeiten. Beginnen Sie zunächst mit den übergeordneten Konzepten und vertiefen Sie sich dann sanft in die Mathematik.

Halten Sie zum Schluss ein gutes altmodisches Papier und einen Bleistift bereit, um die beschriebenen Algorithmen durchzuarbeiten und einige der einfachen Probleme zu lösen. Es ist ein langer Weg, um das, was Sie lesen, zu verstärken.

Cercerilla
quelle
10

Keine Sorge, die meisten Leute verstehen die Kunst der Computerprogrammierung (TAOCP) nicht. Denken Sie also nicht, Sie seien langsam oder ein Anfänger, wenn Sie nicht verstehen - Sie sind genau wie die anderen 99,99% von uns, die es nicht verstehen.

Sie sind ziemlich ehrgeizig , wenn Sie auf das Niveau erhalten möchten , wo Sie die TAOCP lesen kann mit Leichtigkeit . Ich selbst habe erst die Bücher durchgeblättert, bevor ich sie weggelegt habe. Es gibt wahrscheinlich nur eine Handvoll Menschen auf diesem Planeten, die TAOCP verstehen.

Lesen Sie den Beitrag: Bücher Programmierer lesen nicht wirklich von Bill the Lizard.

Es gibt viele andere Bücher , die gut lesbar und verständlich sind und von denen Sie sofort profitieren können .

Ich persönlich mag:

Schwamm
quelle
8

Ich bin auf dieses Zitat von Bill Gates gestoßen: "Sie sollten mir auf jeden Fall einen Lebenslauf schicken, wenn Sie das Ganze lesen können." Er sprach über die Kunst des Programmierens von Büchern. Also war ich ziemlich neugierig und wollte alles lesen, aber ehrlich gesagt verstehe ich es überhaupt nicht I'm really not that highly intellectual being. Das sollte der Grund sein, warum ich es nicht verstehen kann , aber ich bin sehr lernbegierig. Ich lese gerade Band 1 über fundamentales Algo. Gibt es da draußen Bücher, die für Anfänger / langsame Leute wie mich freundlich sind? So kann ich mich aufbauen und in Zukunft hoffentlich Knuths Buch gut lesen.

wenn du dich selbst definierst, dann stellst not a highly intellectual beingdu dich auf niedrige Erwartungen ein. Du musst diese Mentalität brechen, wenn du etwas tun willst, das die Mühe wert ist. Sie sollten keinen Zweifel daran haben, dass Sie etwas erreichen können. Es zu erreichen bedeutet auch nicht, dass Sie es leicht erreichen werden.

Dinge, die es wert sind, verfolgt zu werden, sind diejenigen, die schwierig sind ... und das ist kein Klischee. In der Software, im Engineering, im Leben im Allgemeinen, wenn Sie etwas erreichen möchten, müssen Sie sich für die Dinge entscheiden, die schwierig sind, die Dinge, die die Leute meiden, und sich nicht mit den kleinsten gemeinsamen Nennern der Dinge zufrieden geben.

Zunächst ist nicht klar, wie Ihr CS-Hintergrund aussieht. Knuths Buch erfordert einen gewissen Reifegrad. Nur wenige Menschen mit einem CS-Abschluss können es problemlos durchstehen. Ich würde nicht erwarten, dass ein CS-Student, der gerade seinen ersten Kurs in Algorithmen abgeschlossen hat, auch nur ein Buch von Knuth durchgehen kann. Die Reife, die benötigt wird, um es zu bekommen, ist einfach nicht da, und das hat nichts mit der mentalen Kapazität des Schülers zu tun.

Sie müssen Ihre grundlegenden Algorithmen kalt und klar haben, und Sie müssen eine Menge Programmierkenntnisse (Arbeit und / oder Gelehrsamkeit) haben - ich würde sagen, mindestens 40 Credits für Programmierkenntnisse. Sie müssen auch Ihre CS-Mathematik auf festem Grund haben.

Sie können nicht weiterkommen, ohne ein gutes Verständnis der diskreten Mathematik (und möglicherweise der Berechnungstheorie) zu haben.

Es ist nicht so, dass Sie dieses Wissen benötigen, um Knuths Probleme zu lösen, aber Sie brauchen eine gewisse Reife, um in der Lage zu sein, diese Art von Material zu durcharbeiten.

Wählen Sie zuerst ein Buch und nur ein Buch aus (CLRS-Buch wie zuvor vorgeschlagen) und bearbeiten Sie es von Anfang bis Ende. Wenn möglich Programme ausführen, die die Algorithmen implementieren. Verwenden Sie kein Java oder C #, nicht einmal C ++. Gehen Sie zu Bare Bones C und bekommen Sie das Gefühl, Dinge aus Bare-Bone-Metallschrotten zu bauen.

Holen Sie sich auch Knuths Buch "Konkrete Mathematik", wenn Sie keinen Kurs in diskreter Mathematik und Rechentheorie belegt haben. Es wäre gut, wenn Sie auch dieses Buch durchgehen würden.

Dann gehe auf Knuths Enzyklopädie ein Band, ein Kapitel nach dem anderen ein. Gehen Sie nicht zu einem anderen Kapitel, ohne das erste richtig verstanden zu haben.

Ich würde vorschlagen, dass Sie zuerst Band I (grundlegende Algorithmen) und dann Band III (Suchen und Sortieren) durchgehen. Das sollten Ihre unmittelbaren Ziele sein. Dann, später (viel später), Band IV (Kombinatorische Algorithmen) und dann Band II (Semi-Numerische Algorithmen).

Fühlen Sie sich nicht schlecht, wenn Sie es zuerst nicht bekommen. Ich habe jahrelang versucht, durch Band I und III zu kommen (jetzt 10 Jahre).

Und Sie sollten auch nicht so viel Gewicht darauf legen. Tun Sie es nicht, um sich selbst oder jemandem etwas zu beweisen. Tun Sie es, weil Sie intellektuell daran interessiert sind. Sie können sich mit Algorithmen auskennen, indem Sie einfach das CLRS-Buch (oder eines der hervorragenden Grad-Level-Bücher) verwenden.

Sei pragmatisch und gönne dir eine Pause. Betrachten Sie das Durchgehen von Knuths Buch als langfristigen persönlichen Ehrgeiz, nicht als sofortigen Beweis dafür, dass Sie CS-Material sind;)

Es gibt andere wichtigere Dinge (beruflich), für die du dich umbringen musst;)

luis.espinal
quelle
2
Hinweis: Sie beziehen sich zweimal auf Band III und niemals auf Band II, wobei Sie Band III zwei verschiedene Namen geben.
Alternative
Vielen Dank, dass Sie mich informiert haben (+1). Die Reihenfolge, die ich meinte, war wie folgt: zuerst Band I (grundlegende Algorithmen), dann Band III (Suchen und Sortieren), dann Band IV (kombinatorische Algorithmen) und dann Band II (
seminumerische
6
+1 Wir trauen uns nicht, weil es schwierig ist; es ist, weil wir es nicht wagen, dass sie schwierig sind. - Seneca
mouviciel
4

Bevor ich überhaupt mit Knuth anfing, musste ich vier verschiedene Bücher durchgehen. Die ersten beiden sind die Sedgewick-Bücher über Algorithmen. Diese bieten einen Überblick über die meisten Algorithmen und Datenstrukturen in einer tatsächlich implementierten Form, sodass Sie sehen können, was sie sind und wie sie funktionieren. Diese Bücher gibt es in verschiedenen Sprachversionen - ich habe die in C gelesen, aber sie wurden ursprünglich in Pascal geschrieben, und es gibt C ++ - und Java-Versionen.

Danach habe ich einen guten Teil des Cormen-Buches über Algorithmen durchgearbeitet und Sedgewick und Flajolets Einführung in die Analyse von Algorithmen als komplementären Text verwendet, da dies eher Knuths mathematischer Strenge entspricht als das Cormen-Buch. Beides muss ich noch erledigen. Meistens suche ich die Teile aus, die ich für nötig halte.

Nachdem ich diese gelesen habe und einen Abschluss in Mathematik gemacht habe, kann ich einiges von TAOCP durchlesen, aber es ist schwierig zu lesen. Das heißt nicht, dass es nicht nützlich ist. TAOCP sind einige der besten Algorithmus-Referenzhandbücher, aber es ist etwas problematisch, zu glauben, dass Sie sie verwenden können, um alles "vollständig" zu verstehen.

Justin Hamilton
quelle