web-dev-qa-db-fra.com

Je suis un étudiant CS, et honnêtement, je ne comprends pas les livres de Knuth

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

Je ne suis vraiment pas si intellectuel. Cela devrait donc être la raison pour laquelle je ne peux pas le comprendre, mais j'ai hâte d'apprendre. Je lis actuellement le volume 1 sur les algorithmes fondamentaux. Y a-t-il des livres qui sont sympathiques pour les novices/les gens lents comme moi, qui aideraient à développer mes connaissances afin que je puisse lire le livre de Knuth avec facilité à l'avenir?

52
Rho

Même moi, je pense que le livre de Knuth est un peu avancé et difficile à comprendre. Ces livres sont certainement pour les algorithmes de niveau de recherche à mon humble avis.

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

Introduction aux algorithmes par CLRS est beaucoup plus simple.

[~ # ~] éditez [~ # ~] :

Pourtant, si vous voulez pour lire le livre de Knuth, vous devez d'abord passer par Concrete Mathematics . Knuth veut que ses élèves soient conscients de la partie mathématique de base de l'analyse des algorithmes.

39
Prasoon Saurav

Assurez-vous de lire toutes les citations de Gates, y compris ceci:

"Il m'a fallu une discipline incroyable, et plusieurs mois, pour que je le lise. J'ai étudié 20 pages, l'ai mis de côté pendant une semaine, et je suis revenu pour 20 autres pages. Si quelqu'un est si impétueux qu'il pense tout savoir, Knuth les aider à comprendre que le monde est profond et compliqué. "

Ce ne sont pas des livres faciles et ils ne sont pas censés l'être. N'oubliez pas que l'un des objectifs de Knuth était de apporter une rigueur mathématique à l'informatique . C'est génial si vous voulez prouver quelque chose à propos d'un algorithme, mais pas si bien si vous voulez simplement savoir comment cela fonctionne.

Michael Dorfman a quelques bons conseils pour lire les livres dans sa réponse à la question (maintenant supprimée) sur Stackoverflow sur ce que je peux obtenir en lisant le 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 .

Qu'obtiendrez-vous en lisant le lot? Une excellente base en informatique. Vous comprendrez le fonctionnement des ordinateurs, des portes logiques aux compilateurs. Vous penserez à des problèmes que vous ne saviez pas vraiment être des problèmes (c'est-à-dire, quel est le moyen le plus rapide de se multiplier?) Et verrez des connexions algorithmiques entre des choses que vous n'auriez jamais pensé être 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 "construire un logiciel au lieu de lire sur la construction de logiciels" - il y a une différence entre les disciplines du génie logiciel et de l'informatique. TAOCP concerne 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 de matériel passionnant, très à jour, et le sens de l'humour de Knuth transparaît. De plus, des vidéos sont disponibles (sur le site Stanford SPCD ou 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 sous forme de livres de poche distincts. Ensemble, le matériel V4 publié est plus grand que n'importe lequel des 3 premiers volumes, mais découpé en friandises de la taille d'une bouchée. (Je me demande si les volumes 1-3 sembleraient moins terrifiants aux gens si chaque volume avait été publié sous forme de livre de poche en un seul chapitre ...)

Selon votre formation en mathématiques, je vous recommande de parcourir le chapitre 1 pour la première fois et d'y revenir si nécessaire. En fait, vous voudrez probablement lire chaque section (au moins) deux fois - rapidement la première fois, juste pour obtenir l'intuition et l'essentiel des arguments, puis lentement, attentivement, comprendre chaque étape.

Assurez-vous de lire le Volume 1, Fascicule 1 sur MMIX au lieu des anciennes sections sur MIX. MMIX est meilleur à bien des égards, et vous feriez mieux de convertir le MIX dans le texte en MMIX au fur et à mesure que d'essayer de chevaucher les deux mondes.

Une règle générale: ne sautez pas les exercices. Il y a beaucoup de bon matériel dans les questions (et réponses). Faites autant d'exercices que possible; mais lisez-les toutes (et lisez les réponses, une fois que vous avez tenté de résoudre le problème ou décidé de le laisser passer).

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

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

Pour d'autres ressources, j'ai trouvé que parcourir les programmes des écoles d'informatique réputées est utile. Par exemple, les manuels pour commencer les classes d'algorithmes:

57
Corbin March

Knuth est l'auteur en informatique le plus vénéré, cité, discuté et le plus respecté de l'histoire. Ses livres ornent les étagères de tous les développeurs de logiciels sérieux et sont mentionnés avec le même niveau de respect que les gens accordent à la Bible et à Art of War.

J'ai même entendu dire que certains les gens ont en fait l des parties des livres de Knuth.

La plupart des gens ont l'intention de.

Personnellement, je les garde pour ma retraite

29
Steven A. Lowe

Les livres de Knuth ont changé à jamais le domaine des algorithmes. Il a lui-même dit que "2 pages de mon livre sont le travail de carrière de quelqu'un" et que ses livres étaient difficiles à lire. Le livre contient du matériel condensé d'années de travail en informatique.

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

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

Vous avez également des algorithmes de Rajasekaran, Sahni et al qui sont faciles à comprendre.

20
Arjun J Rao

Lorsque j'ai obtenu mon diplôme, j'ai pris les trois premiers volumes de TAOCP comme cadeau de remise de diplôme et j'ai essayé de les lire directement. Jamais réussi. Ces jours-ci, je l'ai fait à travers peut-être 1/3 des trois premiers volumes (pensé dans aucun ordre particulier). Le matériel est certainement dense, mais j'ai appris trois astuces qui m'ont beaucoup aidé.

Tout d'abord, n'essayez pas de lire d'un bout à l'autre. TAOCP est vraiment autant un ouvrage de référence que n'importe quoi, et j'ai trouvé qu'il était préférable de lire une section lorsqu'elle est pertinente pour 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'elles tentent de résoudre.

Ensuite, cet organigramme au début du livre, ce n'est pas seulement un peu d'humour, mais en fait un conseil assez utile. Lisez les sections sur lesquelles vous travaillez de manière itérative, en commençant d'abord par les concepts globaux, puis en approfondissant doucement les mathématiques.

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

12
Cercerilla

Ne vous inquiétez pas, la plupart des gens ne comprennent pas L'art de la programmation informatique (TAOCP). Alors ne vous pensez pas lent ou novice pour ne pas comprendre - vous êtes comme les 99,99% d'entre nous qui ne comprennent pas.

Vous êtes assez ambitieux si vous voulez arriver au niveau où vous pouvez lire Le TAOCP avec facilité. Je n'ai moi-même paginé à travers les livres avant de les ranger. Il n'y a probablement qu'une poignée de personnes sur cette planète qui comprennent TAOCP.

Consultez la publication: Les programmeurs de livres ne lisent pas vraiment par Bill the Lizard.

Il y a beaucoup d'autres livres énumérés qui sont assez lisibles , compréhensibles , et vous pouvez en profiter tout de suite.

J'aime personnellement:

10
spong

J'ai trébuché cette citation de Bill Gates: "Vous devriez certainement m'envoyer un CV si vous pouvez lire le tout." Il parlait des livres sur l'Art de la programmation .. Donc j'étais assez curieux et je veux tout lire mais honnêtement, je ne le 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 volume 1 sur l'algo fondamental .. Alors y a-t-il des livres qui sont sympathiques pour les novices/des gens lents comme moi? Je peux donc me construire moi-même et j'espère qu'à l'avenir je pourrai lire le livre de Knuth à l'aise.

si vous vous définissez comme not a highly intellectual being alors vous vous fixez de faibles attentes. Vous devez briser cette mentalité si vous voulez faire quelque chose qui en vaille la peine. Il ne devrait y avoir aucun doute dans votre esprit que vous pouvez réaliser quelque chose. De plus, l'atteindre ne signifie pas que vous l'atteindrez facilement.

Les choses qui méritent d'être poursuivies sont celles qui sont difficiles ... et ce n'est pas un cliché. Dans le logiciel, l'ingénierie, dans la vie en général, si vous voulez réaliser quelque chose, vous devez opter pour les choses difficiles, les choses que les gens évitent et ne pas se contenter des plus petits dénominateurs communs des choses.

Tout d'abord, il n'est pas clair quel est votre arrière-plan CS. Le livre de Knuth nécessite une certaine maturité. Peu de personnes titulaires d'un diplôme CS peuvent y accéder facilement. Je ne m'attendrais pas à ce qu'un étudiant CS qui vient de terminer son premier cours d'algorithmes soit capable de parcourir même un seul livre de Knuth. La maturité nécessaire pour l'obtenir n'est tout simplement pas là, et cela n'a rien à voir avec la capacité mentale de l'élève.

Vous devez avoir votre base d'algorithmes froide et claire, et vous devez avoir une bonne quantité de programmation (travail et/ou scolastique) à votre actif - je dirais, 40 crédits sur la programmation au moins. Vous devez également avoir vos mathématiques CS sur un terrain ferme.

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

Ce n'est pas que vous aurez besoin de ces connaissances pour travailler sur les problèmes de Knuth, mais vous avez besoin d'une maturité pour pouvoir passer par ce type de matériel.

Choisissez d'abord un livre et un seul livre (livre CLRS comme suggéré précédemment), et travaillez-le du début à la fin. Lorsque cela est possible, les programmes implémentent les algorithmes. N'utilisez pas Java ou C #, pas même C++. Allez dans les os nus C et obtenez la sensation de construire des choses à partir de chutes métalliques nues.

Procurez-vous é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 des calculs. Ce serait bien pour vous de parcourir ce livre également.

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

Je vous suggère de parcourir d'abord le volume I (algorithmes fondamentaux), puis le volume III (recherche et tri). Tels devraient être vos objectifs immédiats. Ensuite, 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 y mettre autant de poids. 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 l'un des meilleurs livres de niveau universitaire disponibles.)

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

Il y a d'autres choses plus importantes (au niveau de la carrière) pour lesquelles vous vous tuez;)

8
luis.espinal

Avant même de commencer sur Knuth, j'ai dû parcourir quatre livres différents. Les deux premiers sont les livres de Sedgewick sur les algorithmes. Ils présentent la plupart des algorithmes et des structures de données sous une forme réellement implémentée, afin que vous puissiez voir ce qu'ils sont et comment ils fonctionnent. Ces livres sont disponibles dans différentes versions de langage - j'ai lu ceux en C, mais iirc ils ont été initialement écrits en Pascal, et il existe des versions C++ et Java là-bas).

Après cela, j'ai travaillé sur une bonne partie du livre Cormen sur les algorithmes et j'ai utilisé Sedgewick et Flajolet Introduction to the Analysis of Algorithms comme texte complémentaire, car c'est plus dans la veine de la rigueur mathématique de Knuth que Livre de Cormen. Je n'ai pas encore fini de terminer l'un ou l'autre, principalement la cueillette des pièces dont je pense avoir besoin.

Après avoir lu ceux-ci et obtenu un diplôme en mathématiques, je peux lire certains de TAOCP, 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 d'algorithmes, mais penser que vous pouvez les utiliser pour comprendre "pleinement" tout est quelque peu problématique.

4
Justin Hamilton