web-dev-qa-db-fra.com

L'art de la programmation informatique - Lire ou ne pas lire?

Il y a beaucoup de livres sur la programmation, et il semble que Code Complete soit à peu près en tête de la liste des "livres de programmation à lire" de la plupart des gens, mais qu'en est-il de The Art of Computer Programming by Donald Knuth? Je suis une personne occupée, entre le travail et une jeune famille, je n'ai pas beaucoup de temps libre, donc je dois être pointilleux sur la façon dont je l'utilise.

Je me demande - est-ce que quelqu'un ici a lu 'TAOCP'? Dans l'affirmative, cela vaut-il la peine de prendre du temps pour lire ou un autre livre ou une programmation supplémentaire comme des projets pour animaux de compagnie ou contribuer à l'open source serait-il une meilleure utilisation de mon temps en termes de développement professionnel?

AVERTISSEMENT - Pour ceux d'entre vous qui portent des t-shirts "Knuth est mon homeboy", ne vous méprenez pas - je veux le lire, mais je me demande simplement s'il devrait figurer en haut de ma liste de priorités ou si quelque chose d'autre venait en premier.

65
Zann Anderson

TAOCP est une référence tout à fait inestimable pour comprendre comment les structures de données et les algorithmes que nous utilisons quotidiennement fonctionnent et pourquoi le travail, mais entreprendre de le lire de bout en bout serait un investissement extraordinaire de votre temps.

En tant que père de famille à un autre, passez du temps avec vos enfants.

72
Adam Crossland

Remplacez "l'encyclopédie" dans votre question par toute référence à TAOCP, et je pense que la réponse devrait être évidente. Parce qu'à bien des égards, c'est ce qu'est le TAOCP.

Il y a une histoire (peut-être apocryphe) sur la rencontre de Steve Jobs avec Knuth. La première chose que Jobs lui a dit était "C'est un plaisir de vous rencontrer Dr Knuth. J'ai lu tous vos travaux!". La réponse de Knuth était "Vous êtes plein de merde": http://www.folklore.org/StoryView.py?project=Macintosh&story=Close_Encounters_of_the_Steve_Kind.txt

23
Jason Baker

Non, il ne devrait pas figurer en haut de votre liste de priorités. J'ai un ensemble complet et je n'ai pas lu le tout. Je l'ai utilisé (jusqu'à présent) comme une bonne référence sur certains problèmes (c'était inestimable dans ma compréhension du caractère aléatoire et du test de générateurs aléatoires, par exemple). Chaque fois qu'un sujet CS apparaît sur lequel je n'ai pas vraiment une bonne poignée, j'ai tendance à saisir le bit pertinent de TAOCP comme une bonne étape dans ma compréhension.

Si vous décidez de le lire, plus de pouvoir pour vous, et je recommande vraiment de le prendre en petits morceaux. N'ayez pas peur de sauter et de regarder ce qui est le plus intéressant en premier.

22
Michael Kohne

TOACP est une lecture essentielle - à un moment donné. Selon ce que vous faites quotidiennement, ce n'est peut-être pas le plus urgent.

C'est l'un de ces livres (enfin, des collections de livres) qu'il est bon de lire au début de votre carrière, car il vous donne vraiment de bonnes idées auxquelles vous n'auriez normalement pas accès avant, mais ce n'est pas essentiel à la survie jusqu'à ce que vous obteniez votre diplôme. de votre carrière où vous ne vous contentez pas de coder, vous choisissez la boîte à outils. C'est le point où vous voulez vraiment étudier les algorithmes, j'espère déjà comprendre un peu la conception du langage, et avoir une compréhension très large des outils, des langages et des systèmes qui existent, et de la façon dont chacun s'intègre dans l'écosystème des choses que vous pouvez tirer parti d'un projet particulier.

En d'autres termes: c'est un apprentissage global, donc si vous êtes obsessionnel comme moi, lisez-le maintenant, si ce n'est pas le cas, vous pouvez le reporter jusqu'à ce que vous commenciez à vouloir gravir les échelons et devenir un grand gars.

9
HedgeMage

Ayant récemment entrepris cette tâche, je peux dire que la façon dont il écrit est très agréable et les problèmes sont très bien étiquetés (selon la difficulté). Obtenez le premier volume et lisez les chapitres 1 et 2 et voyez comment vous l'aimez.

6
sova

TAOCP est un excellent travail, mais sa lecture serait un investissement de temps terrible pour un développeur de logiciels pratiquant. Si vous le faites, vous sacrifiez quelques années (c'est combien de temps cela prendra) de votre budget de perfectionnement professionnel pour en apprendre trop sur trop peu.

Je recommanderais de parcourir un ou plusieurs livres moins "ultimes" sur les algorithmes, mon préféré dans ce domaine est The Algorithm Design Manual by Steven S. Skiena

Ensuite, si vous sentez que vous avez besoin/voulez plus, montez au Knuth.

Dans le même temps, vous pouvez acheter un ou plusieurs volumes de TAOCP, le parcourir pour comprendre les zones couvertes par Knuth et le conserver dans votre bibliothèque au cas où vous en auriez réellement besoin dans votre quotidien. travail. Je suppose que vous ne le feriez pas et c'est une autre raison pour laquelle je ne conseille pas d'essayer de lire. Mais si vous vous y référez assez souvent, vous saurez que cela vaut la peine de le lire de bout en bout.

6
kdubinets

Le travail fondateur de Knuth est la référence la plus populaire que les programmeurs ont l'intention pour lire ou terminer la lecture. Un jour.

6
Steven A. Lowe

+10 sur le commentaire famille/enfants. J'essaie de faire la plupart des lectures tout en supportant les vols aux yeux rouges vers les clients.

Mais ... oui, ça vaut vraiment la peine d'être lu. Aucune raison de lire de façon linéaire, mais plutôt de parcourir et de choisir quelques sujets d'intérêt.

3
Jé Queue

N'oubliez pas qu'au début, Knuth voulait écrire quelque chose sur la façon d'écrire un compilateur.

Vous pouvez obtenir beaucoup d'informations sur le net avec wikipedia par exemple, mais si vous n'êtes pas une sorte de chercheur, lisez simplement le résumé, vous obtiendrez satisfaction.

Vous pouvez toujours obtenir le premier tome pour pouvoir le lire quand vous vous ennuyez ...

3
jokoon

Je suis fermement dans le camp des gens qui pensent que chaque développeur devrait investir dans l'obtention des livres à un moment donné (et cela devient plus facile maintenant qu'il semble qu'ils soient réimprimé en livre de poche ) mais dans le même ordre d'idées, j'aurais également du mal à croire que quelqu'un s'asseyait et les lisait d'un bout à l'autre.

La meilleure approche pour eux - si vous n'avez pas de trajet pour aller au travail où vous avez du temps libre pour vous asseoir et lire - est de lire suffisamment d'entre eux pour savoir où y trouver des choses, puis de lire un chapitre complet chaque fois que vous vous les utilisez comme livres de référence pour un problème donné. Avec Google et Stack Overflow, il n'est pas aussi courant de rechercher des ouvrages de référence, mais dans certains cas, vous constaterez peut-être que les livres fournissent des informations que vous devrez envoyer du temps supplémentaire à rechercher sur Internet.

3
rjzii

Il est probablement plus important que vous fassiez ces problèmes dans le livre que vous ne le lisez. Cela demandera beaucoup de temps.

Il aime 4 volumes et 5 fascicules (quels qu'ils soient), alors compléter les livres seraient probablement meilleurs qu'un cours universitaire sur les principes fondamentaux de l'informatique et feraient de vous presque le meilleur programmeur de tous les temps.

Puisque tu as une jeune famille, comme moi, tu m'as donné une jolie idée de houle. J'achèterais les livres un par un et les enseignerais à vos enfants.

2
Peter Turner

Si vous voulez changer le monde, lisez-le. Si vous voulez apprendre de nouveaux hacks, ne le lisez pas.

1
veryfoolish

Si vous êtes curieux, faites-le, mais cela prend un certain temps à digérer, vous devez donc prendre votre temps.

Avez-vous un trajet où vous pouvez lire - ce serait parfait.


EDIT: Vous pourriez trouver cet aperçu d'une petite partie du volume 4 intéressant: http://www-cs-faculty.stanford.edu/~uno/fasc1a.ps.gz

(note: postscript compressé)

1
user1249

Ce n'est pas quelque chose que la plupart des gens voudront s'asseoir et lire de couverture en couverture, non. C'est une référence incroyablement précieuse, et il est certainement bon de la ramasser, de choisir une section intéressante, de la relire et de faire quelques exercices. Mais les comparaisons d'encyclopédie faites ci-dessus sont assez appropriées ... c'est grand, étendu et détaillé. Et certains des "exercices" sont des problèmes de recherche qui peuvent prendre des années à résoudre.

Si vous voulez juste une meilleure connaissance des algorithmes de bas niveau, il pourrait être préférable de commencer avec les livres de Robert Sedgewick (par exemple, "Algorithms in C", "Algorithms in Java," etc.).

1
mindcrime

Le TAOCP de Knuth est un chef-d'œuvre. Mais, comme tout chef-d'œuvre (comme "Illiad", "War and Peace" ou "In Search of Lost Time" de Proust), ce n'est pas pour tout le monde ou pour chaque heure.

Le livre est très bien écrit et très bien documenté. Les problèmes sont grands et l'explication des algorithmes est bien faite.

Le grand problème du livre est le fait que Knuth montre du code pour un langage d'assemblage fictif pour un ordinateur fictif. Je comprends pourquoi il l'a fait, mais le fait est que ça craint.

Je recommande d'utiliser ce livre comme une bible. En cas de besoin, recherchez-le. Vous trouverez la réponse. Cela m'est arrivé plus d'une fois!

1
Eduardo