L'art de la programmation informatique - Lire ou ne pas lire? [fermé]


63

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

Je me demande si quelqu'un ici a lu 'TAOCP'? Si oui, vaut-il la peine de prendre le temps de lire ou un autre livre ou une programmation plus parallèle, 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 qui portent les t-shirts "Knuth est mon petit ami", ne vous méprenez pas - je veux le lire, mais je me demande si cela devrait figurer en tête de ma liste de priorités ou si quelque chose d'autre doit venir en premier.


Je veux le lire, mais c'est très cher, alors je le recevrai quand j'aurai terminé mes études et commencé à gagner de l'argent. En outre, j'ai besoin d'une grande bibliothèque.
Gablin

Je l'ai fait à la page 3 et je l'ai boudiné. Vendu le jeu sur Amazon 6 mois plus tard.
Kirk.burleson

Réponses:


72

TAOCP est une référence inestimable pour comprendre comment les structures de données et les algorithmes que nous utilisons tous les jours et pourquoi, mais s'engager à le lire intégralement constituerait un investissement extraordinaire de votre temps.

En tant que père de famille, passez le temps avec vos enfants.


34
+1 pour les enfants - les ordinateurs sont bien connus pour attendre. Ils peuvent attendre que les enfants soient plus âgés.

3
+1 pour les enfants, alors que vous pourrez lire le livre à tout moment de votre vie, vous ne pourrez jouer avec votre enfant âgé de 4 ans que pendant 1 an. Et avec votre enfant de 5 ans, pour seulement 1 an aussi ...

3
Très bonne réponse. Il y a une foule de choses qui feraient de nous de meilleurs programmeurs, mais nous devons être intelligents sur les endroits où nous investissons notre temps et aussi nous rappeler que la vie est plus que d'être un grand programmeur.
Jon Hopkins

5
Je n'ai pas encore d'enfants et je veux vraiment finir de le lire avant de mourir. Est-ce que je n'aurai pas d'enfants?
Coulé

1
@sank tu penses comme un programmeur ... :)
Angelin Nadar

23

Dans votre question, remplacez «l'encyclopédie» par chaque référence au TAOCP, et je pense que la réponse devrait être évidente. Parce qu’à bien des égards, c’est ce que le TAOCP est.

Il y a une histoire (peut-être apocryphe) de Steve Jobs rencontrant Knuth. La première chose que Jobs lui ait dite était "C'est un plaisir de vous rencontrer, Dr Knuth. J'ai lu toutes vos œuvres!". 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


1
L'encyclopédie contient une quantité énorme de choses, la plupart du temps pas très intéressantes ou pertinentes pour des personnes ayant un large éventail d'intérêts. Le contenu de TAOCP est au moins quelque peu pertinent pour tout développeur de logiciel.
David Thornley

4
Re: l’histoire de Jobs: c’est une histoire apocryphe. Knuth l'a dit lors de l'entretien technologique de Randall Munroe sur Google.
Greyfade

4
Le "récit" m'a néanmoins fait sourire. :)
MetalMikester

Je peux témoigner de l'humour du Dr Knuth. J'ai envoyé un email à son adresse publiée. J'ai été surpris qu'il ait répondu. Sa réponse était une copie papier annotée de mon courrier électronique, s'il m'avait poliment dit de lire le reste de la section de TAOCP. Ma signature électronique concerne le Missouri (montre-moi), à propos de laquelle il a fait une remarque à propos d'un politicien fou de MO. Il a ensuite conclu en disant: "Je plaisante, ne me blâmez pas pour le gouverneur Schwarzenegger".
dbasnett

21

Non, cela ne devrait pas être 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 (par exemple, il m'a été très utile pour comprendre l'aléatoire et tester les générateurs aléatoires). À chaque fois qu'un sujet de CS sur lequel je ne suis pas vraiment au courant survient, j'ai tendance à saisir le morceau pertinent de TAOCP comme un pas en avant dans ma compréhension.

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


1
Vous frappez le clou sur la tête.
Kirk.burleson

9

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 (bien sûr, des recueils de livres) qu’il est bon de lire au début de votre carrière car il vous donne de bonnes idées que vous n’auriez normalement pas apprises plus tard, mais ce n’est pas essentiel à la survie avant d’être diplômé. de votre carrière où vous ne codez pas, vous choisissez la boîte à outils. C’est le point où vous voulez vraiment étudier les algorithmes, si tout va bien comprendre un peu la conception du langage, et avoir une compréhension très large des outils, langages et systèmes existants, et de la manière dont chacun s’intègre dans l’écosystème de choses que vous pouvez. s'appuyer sur un projet particulier.

En d’autres termes: c’est un apprentissage global, donc si vous êtes obsédé comme moi, lisez-le maintenant, sinon, vous pouvez le reporter jusqu’à ce que vous souhaitiez gravir les échelons et devenir un grand type.


6

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


6

TAOCP est un excellent travail, mais le lire serait un investissement de temps terrible pour un développeur de logiciels en exercice. Si vous le faites, vous sacrifierez quelques années (c'est le temps que cela prendra) de votre budget d'amélioration personnelle pour en apprendre trop sur trop peu.

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

Ensuite, si vous sentez que vous avez besoin / désirez plus, rendez-vous au Knuth.

Dans le même temps, vous pouvez acheter un ou plusieurs volumes de TAOCP, y jeter un coup d'œil pour comprendre quelles zones sont couvertes par Knuth et le conserver dans votre bibliothèque au cas où vous auriez besoin de quelques informations dans votre travail quotidien. travail. Mon hypothèse est 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 retrouvez à le référencer assez souvent, alors vous saurez que votre lecture en vaut la peine.


6

Le travail séminal de Knuth est la référence la plus populaire que les programmeurs ont l' intention de lire ou de finir de lire. Un jour.


2
C'est comme "Une brève histoire du temps" de Hawking pour les programmeurs.
Jon Hopkins

1
Bit je ne lu ABHIT. Le rayonnement Hawking me semble étrange. Un trou noir rétrécit parce que d'autres objets y tombent? J'obtiens la conservation de la masse et de la chose-deux-moitiés-de-chaque-paire-virtuelle-peut-jamais-se-rencontrer-à-détruire-, mais l'idée est toujours freak.
Steve314

@ Steve314: Ce qui est encore plus inquiétant, c'est que de très petits trous noirs explosent violemment. Théoriquement.
Steven A. Lowe

2
ABHOT est court et destiné au grand public. TAOCP n'est ni l'un ni l'autre.
Sean McMillan

3

+10 sur le commentaire famille / enfants. J'essaie de lire le plus souvent tout en continuant de voler les yeux rouges des clients.

Mais ... oui, ça vaut vraiment la peine d'être lu. Aucune raison de lire de manière linéaire, au lieu de feuilleter et de choisir quelques sujets d'intérêt.


3

Je suis résolument dans le camp des personnes qui estiment que chaque développeur devrait investir dans l'obtention des livres à un moment donné (et cela devient de plus en plus facile maintenant qu'il semble qu'ils soient réimprimés en livre de poche ), mais je le ferais également. De plus, ayez du mal à croire que quelqu'un s'assoirait et les lirait de bout en bout.

La meilleure façon de les aborder - si vous n’avez pas le temps de vous rendre au travail où vous avez du temps libre pour vous asseoir et lire - consiste à en lire suffisamment pour savoir où trouver quelque chose en eux, puis à lire un chapitre complet chaque fois que vous le souhaitez. trouvez-vous de les utiliser comme ouvrages de référence pour un problème donné. Avec Google et Stack Overflow, il est moins courant de rechercher des ouvrages de référence, mais dans certains cas, vous constaterez peut-être que ces ouvrages donnent une idée de la nécessité de passer plus de temps à chercher sur Internet.


1
Lire un chapitre complet? C'est à peu près la moitié d'un volume, et ce ne sont pas de petits volumes. Je pense que vous pourriez vouloir dire une plus petite unité de texte.
David Thornley

3

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 Wikipédia par exemple, mais si vous n’êtes pas un chercheur, il suffit de lire le résumé pour obtenir satisfaction.

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


2

Il est probablement plus important de résoudre ce problème dans le livre que de le lire. Cela demandera beaucoup de temps.

Il est capable de 4 volumes et 5 fascicules (quels que soient ceux-ci), donc terminer les livres serait probablement mieux qu’un cours universitaire sur les bases de l’informatique et ferait de vous le meilleur programmeur de tous les temps.

Depuis que tu as une jeune famille, comme moi, tu me as donné une bonne idée de la houle. J'achèterais les livres un à un et les enseignerais à vos enfants.


1
"Donc, terminer les livres serait probablement mieux qu'un cours à l'université" - les volumes 1 à 3 ont été utilisés comme manuels dans plusieurs cours lorsque j'ai obtenu mon diplôme de CS, et nous consacrions tout un cours à la moitié de l'un des volumes. par exemple, "Volume 3 Trier et Rechercher" a été enseigné en deux cours distincts.
Tcrosley

2
Point mineur, mais pour l’instant, il n’ya que trois volumes publiés, le quatrième est en cours. Les fascicules sont une pré-impression de ce qui deviendra le quatrième volume. www-cs-faculty.stanford.edu/~uno/taocp.html
rjzii

1

Si vous êtes curieux, faites-le, mais comme il faut un certain temps pour le digérer, vous devez 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: post-scriptum compressé)


1
Malheureusement (dans ce cas - TRES chanceux sinon), je travaille à distance, ce n'est donc pas une option.
Zannjaminderson

1

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

Si vous souhaitez simplement mieux connaître les algorithmes de bas niveau, commencez par les livres de Robert Sedgewick (par exemple, "Algorithms in C", "Algorithms in Java", etc.).


1

Si vous voulez changer le monde, lisez-le. Si vous voulez apprendre de nouvelles techniques, alors ne le lisez pas.


1

Le TAOCP de Knuth est un chef-d'œuvre. Mais, tout comme n'importe quel chef-d'œuvre (comme "Illiad", "Guerre et Paix" ou "À la recherche du temps perdu" de Proust), ce n'est pas pour tout le monde ni pour les heures supplémentaires.

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

Le grand problème de ce livre est le fait que Knuth affiche le code d’un langage assembleur 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. Lorsque vous en avez besoin, cherchez-le. Vous trouverez la réponse. Cela m'est arrivé plus d'une fois!


3
Cela aiderait-il si vous aviez utilisé l'assembleur réel pour IBM360 ou PDP8?
Martin Beckett

1
Il n'aurait jamais pu supporter ces 50 années avec un langage d'assemblage non fictif. Cela désavantage tout le monde!
luser droog
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.