it-swarm.dev

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

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. Also war ich ziemlich neugierig und möchte alles lesen. Aber ehrlich gesagt verstehe ich es 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 Bücher, die für Anfänger/langsame Leute wie mich geeignet sind und dazu beitragen, mein Wissen zu erweitern, damit ich in Zukunft problemlos Knuths Buch lesen kann?

52
Rho

Sogar ich denke, Knuths Buch ist etwas fortgeschritten und schwer zu verstehen. Diese Bücher sind definitiv für Forscher auf Forschungsebene IMHO.

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

Einführung in Algorithmen durch CLRS ist viel einfacher.

[~ # ~] edit [~ # ~] :

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

39
Prasoon Saurav

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

"Es hat unglaubliche Disziplin und mehrere Monate gedauert, bis ich es gelesen habe. Ich habe 20 Seiten studiert, es für eine Woche weggelegt und bin 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 es funktioniert.

Michael Dorfman hat ein paar gute Tipps zum Lesen der Bücher in seiner Antwort auf die (jetzt gelöschte) Frage zu Stackoverflow über Was kann ich durch das Lesen des Loses erreichen? . Wenn Sie keine 10.000 Wiederholungen haben, können Sie die Frage und seine Antwort immer noch auf der Wayback-Maschine anzeigen.

Was bekommen Sie, wenn Sie das Los lesen? Eine hervorragende 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 sie Probleme sind (d. H. Wie lässt sich am schnellsten multiplizieren?), Und algorithmische Verbindungen zwischen Dingen erkennen, von denen Sie nie gedacht haben, dass sie miteinander zusammenhängen (z. B. Flussbetten, RNA und verschachtelte Klammern).

Ich bin völlig anderer Meinung als die Leute, die sagen "Software erstellen statt über das Erstellen von Software lesen" - es gibt einen Unterschied zwischen den Disziplinen Software Engineering und Informatik. Bei TAOCP geht es um Letzteres.

Wenn Sie noch nicht begonnen haben, habe ich einige Empfehlungen.

Zunächst möchten Sie vielleicht mit Band 4 beginnen. Es ist ein aufregendes Material, sehr aktuell, und Knuths Sinn für Humor scheint durch. Außerdem sind Videos verfügbar (auf der Stanford SPCD-Website oder in Stanford iTunes), in denen Knuth verschiedene Abschnitte behandelt. Diese Videos werden dringend empfohlen. Die Faszikel 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, aber in mundgerechte Leckereien geschnitten. (Ich frage mich, ob die Bände 1-3 den Menschen weniger furchterregend erscheinen würden, wenn jeder Band in Form eines Taschenbuchs mit einem Kapitel veröffentlicht worden wäre ...)

Abhängig von Ihrem mathematischen Hintergrund würde ich empfehlen, Kapitel 1 beim ersten Mal zu überfliegen und bei Bedarf darauf zurückzukommen. In der Tat möchten Sie wahrscheinlich jeden Abschnitt (mindestens) zweimal lesen - schnell beim ersten Mal, nur um die Intuition und den Kern der Argumente zu erhalten, und dann langsam, sorgfältig, um jeden Schritt zu verstehen.

Lesen Sie unbedingt Band 1, Fascicle 1 unter MMIX anstelle der alten Abschnitte unter MIX. MMIX ist in vielerlei Hinsicht besser, und Sie sollten den MIX im Text im Laufe der Zeit besser in MMIX konvertieren, als zu versuchen, beide Welten zu überspannen.

Eine allgemeine Regel: Überspringen Sie die Übungen nicht. Die Fragen (und Antworten) enthalten viel gutes Material. Mach so viele Übungen wie möglich; Aber lesen Sie sie alle (und lesen Sie die Antworten, sobald Sie das Problem ausprobiert oder beschlossen haben, es zu testen).

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

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

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

57
Corbin March

Knuth ist der am meisten verehrte, zitierte, diskutierte 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 Menschen der Bibel und der Kunst des Krieges entgegenbringen.

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

Die meisten Leute nur beabsichtigen zu.

Persönlich speichere ich sie für meinen Ruhestand

29
Steven A. Lowe

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 Karriere eines Menschen sind" und dass seine Bücher schwer zu lesen waren. Das Buch enthält komprimiertes 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.

20
Arjun J Rao

Als ich meinen Abschluss machte, nahm ich die ersten drei Bände von TAOCP als Abschlussgeschenk für mich und versuchte, sie direkt 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 genauso ein Nachschlagewerk wie alles andere, 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 es viel einfacher, die Lösungen zu verstehen, wenn Sie auf die Probleme gestoßen sind, die sie zu lösen versuchen.

Als nächstes ist dieses Flussdiagramm am Anfang des Buches nicht nur ein bisschen Humor, sondern auch ein nützlicher Tipp. Lesen Sie die Abschnitte, an denen Sie iterativ arbeiten, und beginnen Sie zunächst mit den übergreifenden Konzepten, bevor Sie sich sanft mit der Mathematik befassen.

Halten Sie zum Schluss 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.

12
Cercerilla

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

Du bist ziemlich ehrgeizig wenn du auf das Niveau kommen willst, auf dem du The TAOCP lesen kannst mit Leichtigkeit. Ich selbst habe nur die Bücher durchgesehen, bevor ich sie weggelegt habe. Es gibt wahrscheinlich nur eine Handvoll Menschen auf diesem Planeten, die TAOCP verstehen.

Schauen Sie sich den Beitrag an: Bücher, die Programmierer nicht wirklich lesen von Bill the Lizard.

Dort sind viele andere Bücher aufgelistet, die gut lesbar , verständlich sind , und Sie können sofort davon profitieren.

Ich persönlich mag:

10
spong

Ich stolperte über dieses Zitat von Bill Gates: "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 also der Grund sein Ich kann es nicht verstehen, aber ich bin gespannt darauf zu lernen. Ich lese gerade Band 1 über grundlegende Algo. Gibt es also Bücher, die für Anfänger/langsame Leute wie mich freundlich sind? So kann ich mich aufbauen und hoffentlich in Zukunft Knuths Buch entspannt lesen.

wenn Sie sich als not a highly intellectual being definieren, setzen Sie sich auf niedrige Erwartungen. Sie müssen diese Mentalität brechen, wenn Sie etwas tun wollen, das die Mühe wert ist. Es sollte keinen Zweifel daran geben, dass Sie etwas erreichen können. Das 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. Wenn Sie in der Software, im Engineering oder im Leben im Allgemeinen etwas erreichen wollen, müssen Sie sich für die Dinge entscheiden, die schwierig sind, die Dinge, die Menschen vermeiden, und sich nicht mit den kleinsten gemeinsamen Nennern der Dinge zufrieden geben.

Erstens ist nicht klar, welchen CS-Hintergrund Sie haben. Knuths Buch erfordert einen gewissen Reifegrad. Nur wenige Menschen mit einem CS-Abschluss können dies problemlos durchgehen. Ich würde nicht erwarten, dass ein CS-Student, der gerade seinen ersten Kurs in Algorithmen abgeschlossen hat, tatsächlich auch nur ein einziges Buch von Knuth durchgehen kann. Die Reife, die nötig ist, um es zu bekommen, ist einfach nicht da, und das hat nichts mit der geistigen Leistungsfähigkeit des Schülers zu tun.

Sie müssen Ihre grundlegenden Algorithmen kalt und klar haben, und Sie müssen eine angemessene Menge an Programmierung (Arbeit und/oder Schulbildung) im Griff haben - ich würde sagen, mindestens 40 Credits für die Programmierung. Sie müssen auch Ihre CS-Mathematik auf festem Boden haben.

Sie können nicht weit kommen, 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 an Knuths Problemen zu arbeiten, aber Sie brauchen eine Reife, um diese Art von Material durchgehen zu können.

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, implementieren Programme die Algorithmen. Verwenden Sie nicht Java oder C #, nicht einmal C++. Gehen Sie zu Bare Bones C und bekommen Sie das Gefühl, Dinge aus Bare-Bone-Metallabfällen zu bauen.

Holen Sie sich auch Knuths Buch über "Konkrete Mathematik", wenn Sie noch keinen Kurs in diskreter Mathematik und Berechnungstheorie absolviert haben. Es wäre gut für Sie, auch dieses Buch durchzugehen.

Dann packe Knuths Enzyklopädie an, ein Band, ein Kapitel nach dem anderen. Gehen Sie nicht zu einem anderen Kapitel, ohne das erste gut zu verstehen.

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 (seminumerische Algorithmen) angehen.

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 jemandem oder sich selbst 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 besten Bücher für Hochschulabsolventen) verwenden.

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

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

8
luis.espinal

Bevor ich überhaupt mit Knuth anfing, musste ich mich durch vier verschiedene Bücher bewegen. Die ersten beiden sind die Sedgewick-Bücher über Algorithmen. Diese geben 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 da draußen).

Danach habe ich einen guten Teil des Cormen-Buches über Algorithmen durchgearbeitet und Sedgewick und Flajolets Einführung in die Analyse von Algorithmen als ergänzenden Text verwendet, da er eher Knuths mathematischer Strenge entspricht als der Cormen Buch. Beides muss ich noch fertigstellen, meistens die Teile, die ich für nötig halte.

Nachdem ich diese gelesen und einen Abschluss in Mathematik gemacht habe, kann ich einige von TAOCP durchlesen, aber es ist eine schwierige Lektüre. Das heißt nicht, dass es nicht nützlich ist. TAOCP sind einige der besten Referenzhandbücher für Algorithmen, aber es ist etwas problematisch zu denken, dass Sie sie verwenden können, um alles "vollständig" zu verstehen.

4
Justin Hamilton