Je suis un étudiant en informatique et, honnêtement, je ne comprends pas les livres de Knuth [fermé]

52

Je suis tombé par hasard sur cette citation de Bill Gates: "Vous devriez absolument m'envoyer un CV si vous pouvez tout lire." Il parlait des livres The Art of Programming . Donc j'étais assez curieux et je veux tout lire. Mais honnêtement, je ne le comprends pas.

Je ne suis vraiment pas intellectuelle. Donc, cela devrait être la raison pour laquelle je ne peux pas le comprendre, mais je suis désireux d'apprendre. Je lis actuellement le volume 1 sur les algorithmes fondamentaux. Existe-t-il des livres qui soient conviviaux pour les novices / les gens lents comme moi, qui pourraient m'aider à approfondir mes connaissances et me permettre de lire facilement le livre de Knuth à l'avenir?

Rho
la source
Humm, disons que je comprendrais (et vous aussi, je suppose), mais cela prendrait beaucoup de temps et il existe des livres plus faciles de nos jours.
Nils Le
22
Ils peuvent être difficiles à lire, et il peut y avoir des livres plus faciles, mais vous devriez les lire quand même. Jusqu'ici, je n'ai parcouru que le premier livre et je n'y comprends pas tout! mais ça en vaut la peine. L'informatique est difficile . Plus tôt vous vous rendrez compte que vous n'êtes pas assez intelligent pour le comprendre, plus vite vous pourrez commencer à apprendre à l'apprendre.
Michael K
2
Ils sont enclins aux mathématiques pour les programmeurs en mathématiques. CS a évolué au cours des dernières années et de nombreux domaines bénéfiques ne sont pas mathématiques. Dans quelle direction voulez-vous aller plus loin? Si ce sont des algorithmes et autres, ils sont probablement bons à lire, si ce sont d'autres domaines, ils élargiront votre horizon, mais tout autant que la lecture d'un livre sur un sujet de biologie. Donc, selon votre région, ils peuvent être n'importe où, de la mission essentielle à presque inutile.
Coder
1
Depuis quand les programmeurs considèrent-ils Bill Gates comme faisant autorité?
Giorgio
2
Coursera propose 6 cours gratuits sur les algorithmes (algorithmes parties 1 et 2, conception et analyse d'algorithmes parties 1 et 2, et combinatoire analytique parties 1 et 2).
Anthony

Réponses:

39

Même moi, je pense que le livre de Knuth est un peu avancé et difficile à comprendre. Ces livres sont définitivement destinés aux algorithmistes de niveau recherche, IMHO.

Alors, y a-t-il des livres qui conviennent aux novices / personnes lentes comme moi?

Introduction aux algorithmes par CLRS est beaucoup plus simple.

EDIT :

Néanmoins, si vous voulez lire le livre de Knuth, vous devez commencer par les mathématiques concrètes . Knuth souhaite que ses étudiants connaissent la partie mathématique de base de l'analyse par algorithmes.

Prasoon Saurav
la source
5
Le manuel de conception d'algorithmes est encore plus facile / plus accessible - il est presque amusant à lire
Martin Beckett
Introduction aux algorithmes est un excellent livre. Nous l'avons utilisé pour notre premier cours d'algorithmes CSE et j'ai adoré. Bien que je dois dire que j'ai passé beaucoup d'itérations en passant par les mêmes exemples pour vraiment dire que je les comprends.
Chris
4
@SidCool: Il existe une 3ème édition de la CLRS avec une douzaine de nouvelles sections.
Bill the Lizard
10
Les livres de Knuth sont War & Peace of programming. Ils sont bons, mais sont surtout utilisés pour rendre les étagères impressionnantes.
Gaurav
6
"Même moi, je pense que le livre de Knuth est un peu avancé"? modestie hein :)
occulus
57

Assurez-vous de lire toute la citation de Gates, y compris ceci:

"Cela a pris une discipline incroyable, et plusieurs mois, pour que je le lise. J'ai étudié 20 pages, je l'ai rangé pendant une semaine et je suis revenu pour 20 pages de plus. Si quelqu'un est si téméraire qu'il pense tout savoir, Knuth aidez-les à comprendre que le monde est profond et compliqué. "

Ce ne sont pas des livres faciles et ils ne sont pas destinés à l'être. Rappelez-vous que l'un des objectifs de Knuth était d' apporter de la rigueur mathématique à l'informatique . C'est très bien si vous voulez prouver quelque chose à propos d'un algorithme, mais pas si bon si vous voulez juste savoir comment il fonctionne.

Michael Dorfman a quelques bons conseils pour lire les livres dans sa réponse à la question (maintenant supprimée) sur Stackoverflow sur «Que puis-je obtenir de la lecture du lot? . Si vous n'avez pas de représentant 10k, vous pouvez toujours voir la question et sa réponse sur la machine de retour .

Que recevrez-vous de la lecture du lot? Une excellente base en informatique. Vous comprendrez le fonctionnement des ordinateurs, des portes logiques aux compilateurs. Vous penserez à des problèmes que vous n'avez jamais vraiment connus (c.-à-d. Quel est le moyen le plus rapide de se multiplier?) Et vous verrez des connexions algorithmiques entre des choses que vous n'auriez jamais pensé liées (lits de rivière, ARN et parenthèses imbriquées, par exemple).

Je suis complètement en désaccord avec les gens qui disent "construisez un logiciel au lieu de lire sur la construction de logiciel" - il existe une différence entre les disciplines du génie logiciel et de l'informatique. TAOCP est à propos de ce dernier.

Si vous n'avez pas encore commencé, j'ai quelques recommandations.

Tout d’abord, vous voudrez peut-être commencer par le volume 4. Il s’agit d’un contenu passionnant, très actuel, et le sens de l’humour de Knuth transparaît. De plus, il y a des vidéos disponibles (sur le site du Stanford SPCD ou sur le Stanford iTunes) où Knuth discute de différentes sections. Ces vidéos sont fortement recommandées. Les fascicules 0, 1, 2, 3 et 4 du volume 4 sont disponibles en versions séparées. Ensemble, le matériau V4 publié est plus volumineux que l'un des 3 premiers volumes, mais découpé en friandises. (Je me demande si les volumes 1 à 3 sembleraient moins terrifiants si chaque volume avait été publié sous forme de livre de poche à chapitre unique ...)

En fonction de vos connaissances en mathématiques, je vous recommanderais de parcourir le chapitre 1 pour la première fois et d'y revenir au besoin. En fait, vous voudrez probablement lire chaque section (au moins) deux fois - rapidement la première fois, simplement pour comprendre l'intuition et l'essentiel des arguments, puis lentement, soigneusement, en comprenant chaque étape.

Assurez-vous de lire le Volume 1, Fascicule 1 sur MMIX au lieu des anciennes sections sur MIX. Le MMIX est meilleur à bien des égards, et vous feriez mieux de convertir le MIX dans le texte au format MMIX au fil du temps plutôt que d'essayer de chevaucher les deux mondes.

Une règle générale: ne sautez pas les exercices. Il y a beaucoup de bonne matière dans les questions (et les réponses). Faites autant d'exercices que vous pouvez; mais lisez-les tous (et lisez les réponses, une fois que vous avez résolu le problème ou décidé de le laisser passer).

Enfin, si vous attrapez vraiment le bogue: lisez l'index. Beaucoup de bonnes blagues cachées là-bas.

Naturellement, StackOverflow serait un bon endroit pour poser des questions spécifiques sur le texte, si elles devaient se produire ....

Pour d’autres ressources, j’ai trouvé utile de consulter les programmes d’écoles de sciences informatiques réputées. Par exemple, les manuels pour commencer les classes d’algorithmes:

Corbin March
la source
Le lien vers SO était cassé, mais j'ai trouvé un message que j'imagine est similaire: stackoverflow.com/questions/1022167/…
asjohnson
+1 pour le message original sur Way Back Machine et la liste de livres de ces universités
Anthony,
+1 pour recommander de commencer par le volume 4, Fascicules 0, 1, 2, 3 et 4, ainsi que pour la lecture de MMIX au lieu de MIX. En conséquence, je vais commencer par Volumn 1, Fascicule 1, car il couvre MMIX.
Shaun Luttin
En tant que programmeur Java / c, j'estime que <la structure de données et l'analyse d'algorithme en Java> est très facile à comprendre et à pratiquer.
Eric Wang
29

Knuth est l'auteur de l'informatique le plus respecté, cité, discuté et très respecté de l'histoire. Ses livres ornent les étagères de tous les développeurs de logiciels sérieux et font l’objet du même respect que les gens qu’ils accordent à la Bible et à Art of War.

J'ai même entendu dire que certaines personnes avaient lu des extraits des livres de Knuth.

La plupart des gens ont juste l' intention de le faire.

Personnellement, je les garde pour ma retraite

Steven A. Lowe
la source
22
C'est pourquoi les exemplaires usés usés valent plus que les nouveaux!
Martin Beckett
13
Si vous comprenez The Art of War, vous réaliserez qu'il ne vous reste plus qu'à faire croire aux gens que vous comprenez Knuth, et inversement, que vous ne comprenez pas Knuth lorsque vous comprenez. Si non, vous ne le faites pas. Et si vous comprenez le livre 5 du Livre des Cinq Anneaux, vous n'aurez même pas besoin de parler de Knuth. Et si vous avez lu The Art of Unix Programming d'ESR et que vous comprenez les koans, vous n'aurez même pas besoin de Knuth, car vous aurez transcendé la barrière de la complexité.
Christopher Mahan
20

Les livres de Knuth ont changé le domaine des algorithmes pour toujours. Il a lui-même déclaré que "deux pages de mon livre représentent le travail de carrière de quelqu'un" et que ses livres étaient difficiles à lire. Le livre contient de la matière condensée d'années de travail en informatique.

Vous ne devriez pas vous sentir mal si vous ne pouvez pas le comprendre.

Comme Prasoon l'a dit, CLRS est un livre plus simple à lire.

Vous avez également des algorithmes de Rajasekaran, Sahni et autres faciles à comprendre.

Arjun J Rao
la source
c'est incroyable d'entendre .. je pensais que j'étais le seul à avoir du mal à lire ce livre .. merci beaucoup
Rho
7
@Raymond Ho: Je pense que personne n'aime vraiment lire les livres de Knuth. Je connais au moins une personne qui les a sur l'étagère juste pour rendre cette étagère impressionnante.
FrustratedWithFormsDesigner
12

Quand j'ai eu mon premier diplôme, j'ai pris les trois premiers volumes de TAOCP comme cadeau de remise des diplômes et essayé de les lire directement. Jamais réussi. Ces jours-ci, j’ai passé au moins peut-être un tiers des trois premiers volumes (pensé sans ordre particulier). Le matériau est vraiment dense, mais j'ai appris trois trucs qui m'ont beaucoup aidé.

Tout d'abord, n'essayez pas de lire d'un bout à l'autre. TAOCP est vraiment un ouvrage de référence, mais j’ai trouvé qu’il était préférable de lire une section quand elle concerne un problème que vous essayez de résoudre. Comme beaucoup de choses dans le monde, il est beaucoup plus facile de comprendre les solutions une fois que vous avez rencontré les problèmes qu’ils essaient de résoudre.

Ensuite, l’organigramme qui se trouve au début du livre indique non seulement un peu d’humour, mais aussi un conseil utile. Lisez les sections sur lesquelles vous travaillez de manière itérative, en commençant par les concepts généraux, puis en approfondissant les mathématiques.

Enfin, gardez du bon vieux papier et un crayon à portée de main pour parcourir les algorithmes tels qu'ils sont décrits, et résolvez quelques-uns des problèmes simples. Cela contribue grandement à renforcer ce que vous lisez.

Cercerilla
la source
10

Ne vous inquiétez pas, la plupart des gens ne comprennent pas l'Art de la programmation informatique (TAOCP). Alors ne vous croyez pas lent ou novice pour ne pas comprendre - vous êtes comme les 99,99% d’autres qui ne l’ont pas.

Vous êtes assez ambitieux si vous voulez atteindre le niveau où vous pouvez lire facilement le TAOCP . J'ai moi-même parcouru les livres avant de les ranger. Il n'y a probablement qu'une poignée de personnes sur cette planète qui comprennent le TAOCP.

Découvrez l'article: Les programmeurs de livres ne sont pas vraiment lus par Bill le lézard.

Il y a beaucoup d'autres livres énumérés ici qui sont assez lisibles , compréhensibles et dont vous pouvez bénéficier immédiatement .

J'aime personnellement:

éponge
la source
8

Je suis tombé sur cette citation de Bill Gates: "Vous devriez absolument m'envoyer un CV si vous pouvez lire le tout." Il parlait l'art de livres de programmation .. Je suis assez curieux et que vous voulez lire tout cela , mais honnêtement, je ne comprends pas du tout .. I'm really not that highly intellectual being.. Donc , cela devrait être la raison pour laquelle je ne peux pas le comprendre , mais j’ai hâte d’apprendre… Je lis actuellement le tome 1 sur l’algorithme fondamental. Y at-il des livres qui soient conviviaux pour les novices ou les personnes lentes comme moi? Je peux donc me construire et espérer pouvoir lire le livre de Knuth à l’avenir.

si vous vous définissez vous-même, not a highly intellectual beingvous vous fixez de faibles attentes. Vous devez briser cette mentalité si vous voulez faire quelque chose qui vaille la peine. Il ne devrait y avoir aucun doute dans votre esprit que vous pouvez réaliser quelque chose. En outre, cela ne signifie pas que vous y parviendrez facilement.

Les choses qui valent la peine d’être poursuivies sont celles qui sont difficiles… et ce n’est pas un cliché. En logiciel, en ingénierie, dans la vie en général, si vous voulez réaliser quelque chose, vous devez rechercher les choses difficiles, les choses que les gens évitent et ne pas se contenter des plus petits dénominateurs communs.

Premièrement, vos antécédents de CS ne sont pas clairs. Le livre de Knuth exige un certain degré de maturité. Peu de personnes ayant un diplôme en informatique peuvent le passer facilement. Je ne m'attendrais pas à ce qu'un étudiant en informatique qui vient de terminer son premier cours d'algorithme soit en mesure de parcourir le moindre livre de Knuth. La maturité nécessaire pour l'obtenir n'est tout simplement pas au rendez-vous et cela n'a rien à voir avec la capacité mentale de l'élève.

Vous devez maîtriser les bases de vos algorithmes, et vous avez besoin de pas mal de programmation (travail et / ou scolastique) à votre actif - je dirais au moins 40 crédits en programmation. Vous devez également maîtriser les mathématiques CS.

Vous ne pouvez pas aller très loin sans avoir une bonne compréhension des mathématiques discrètes (et éventuellement de la théorie du calcul).

Ce n'est pas que vous ayez besoin de cette connaissance pour résoudre les problèmes de Knuth, mais vous avez besoin d'une maturité suffisante pour pouvoir parcourir ce type de matériel.

Choisissez d’abord un livre et un seul livre (le livre de la CLRS comme suggéré précédemment), et travaillez-le du début à la fin. Lorsque cela est possible, les programmes implémentant les algorithmes. N'utilisez pas Java ou C #, pas même C ++. Allez jusqu'à l'os nu C et obtenez le sentiment de construire des objets à partir de déchets de métal sans os.

Obtenez également le livre de Knuth sur "Les mathématiques concrètes" si vous n'avez pas suivi de cours de mathématiques discrètes et de théorie de l'informatique. Ce serait bien que vous parcouriez ce livre également.

Ensuite, abordez l'encyclopédie de Knuth, un livre, un chapitre à la fois. N'entrez pas dans un autre chapitre sans avoir une bonne compréhension du premier.

Je vous suggère de commencer par le volume I (algorithmes fondamentaux), puis le volume III (recherche et tri). Celles-ci devraient être vos objectifs immédiats. Puis, plus tard (beaucoup plus tard), abordez le volume IV (algorithmes combinatoires), puis le volume II (algorithmes semi-numériques).

Ne vous sentez pas mal si vous ne l'obtenez pas au début. J'essaie de traverser les volumes I et III depuis des années (10 ans maintenant).

Et vous ne devriez pas mettre autant de poids dessus non plus. Ne le faites pas pour prouver quelque chose à quelqu'un ou à vous-même. Faites-le parce que vous êtes intellectuellement intéressé à le faire. Vous pouvez devenir compétent dans les algorithmes en utilisant simplement le livre du CLRS (ou n'importe lequel des livres de niveau supérieur disponibles).

Soyez pragmatique et accordez-vous une pause. Traitez le livre de Knuth comme une ambition personnelle à long terme et non comme une preuve immédiate que vous êtes un matériau CS;)

Il y a d'autres choses plus importantes (en termes de carrière) pour lesquelles on se tue;)

luis.espinal
la source
2
Remarque: vous vous référez au volume III deux fois et jamais au volume II, en nommant le volume III sous deux noms différents.
alternative le
Merci de me le faire savoir (+1). L’ordre que j’entendais était le suivant: premier volume I (algorithmes fondamentaux), puis volume III (recherche et tri), puis volume IV (algorithmes combinatoires), puis volume II (algorithmes semi-numériques.)
luis.espinal
6
+1 Ce n’est pas parce que les choses sont difficiles que nous n’osons pas; c'est parce que nous n'osons pas qu'ils sont difficiles. - Sénèque
mouviciel
4

Avant même de commencer Knuth, je devais parcourir quatre livres différents. Les deux premiers sont les livres de Sedgewick sur les algorithmes. Celles-ci donnent un aperçu de la plupart des algorithmes et des structures de données sous une forme implémentée réelle, afin que vous puissiez voir ce qu’ils sont et comment ils fonctionnent. Ces livres sont disponibles dans différentes versions linguistiques. Je lis celles en C, mais elles ont été écrites à l'origine en Pascal. Il existe des versions C ++ et Java.

Après cela, j'ai parcouru une bonne partie du livre de Cormen sur les algorithmes et ai utilisé l' introduction à l'analyse des algorithmes de Sedgewick et Flajolet comme complément, car il s'inscrit davantage dans la rigueur mathématique de Knuth que le livre de Cormen. Je n'ai pas encore terminé l'une ou l'autre de ces tâches, principalement en sélectionnant les pièces dont je sens le besoin.

Après avoir lu ces ouvrages et obtenu un diplôme en mathématiques, je peux en lire quelques extraits, mais c'est une lecture difficile. Cela ne veut pas dire que ce n'est pas utile. TAOCP est l’un des meilleurs manuels de référence en matière d’algorithmes, mais il est quelque peu problématique de les utiliser pour "comprendre" complètement tout.

Justin Hamilton
la source