Après avoir lu une question sur les livres que tous les programmeurs devraient lire , je me demande si ce qui suit devrait être considéré comme obsolète:
- Code complet : 1ère édition en 1993; 2e édition en mai 2004
- Introduction aux algorithmes (Cormen, Leiserson, Rivest, Stein) : 1ère édition en 1990; 2e édition en septembre 2001; 3ème édition en 2009
- Le programmeur pragmatique : octobre 1999
- Structure et interprétation des programmes d'ordinateur : 1re édition en 1984; 2e édition en septembre 1996
- Le langage de programmation C : 1ère édition en 1978; 2e édition en avril 1988
Tous ces livres semblent très vieux. N'y a-t-il pas une différence entre l'informatique moderne et l'actualité de l'écriture de ce livre?
Par exemple, mon professeur de 61 ans explique très bien les choses mais oublie de prendre en compte tout ce qui a été fait entre le moment où il a commencé à enseigner il y a 25 ans et maintenant.
N'est-ce pas la même chose pour ces livres? N'y a-t-il pas de livres plus modernes qui enseignent des principes et des technologies plus proches des pratiques actuelles? Ou les considérez-vous comme utiles et pertinents même aujourd'hui?
books
software-obsolescence
Olivier Pons
la source
la source
Réponses:
Ce livre traite des principes de développement. Ces principes sont, par nature, agnostiques au langage, et pour certains même au paradigme (programmation orientée objet, programmation fonctionnelle, langages impératifs).
Ils expliquent la théorie et les bons moyens de développement car, au final, un logiciel consiste toujours à obtenir des données, à les traiter, puis à les restituer. Facebook, Twitter, 3D, traitement par lots de la comptabilité, gestion du trafic ferroviaire, lancement de fusées, etc.
Les livres qui parlent d’une langue, par exemple
"How to learn XXXXX in YY days"
XXXXX est une langue et YY, un chiffre qui finira par devenir (et parfois même très rapidement) obsolète, car, par nature, il s’agit de choses qui évoluent ou qui sont remplacées et deviennent dépassé.Code Complete , de l’impressionnant Steve McConnell, est peut-être le livre qui m’a fait comprendre cela. Et le programmeur pragmatique a totalement changé ma vision du développement logiciel. En lisant de tels livres, vous réalisez que 95% du problème auquel vous êtes confronté au quotidien ont déjà été résolus et que 95% d'entre nous réinventons encore la roue.
Le "nuage" n'est pas l'avenir du développement logiciel, c'est une façon d'utiliser les logiciels développés.
Ne tombez pas dans le piège des mots à la mode et des conneries, concentrez-vous sur la façon dont vous pouvez améliorer vos compétences d'artisan en logiciels.
Concentrez-vous sur l'apprentissage de ce que d'autres esprits brillants ont inventé et appris avant nous, car c'est le seul moyen de devenir un développeur accompli.
la source
"Learn Javascript in 15 seconds"
et seulement un demi-bazillion de"Learn PHP on 17 secsonds"
Psychologie-Informatique-Programmation (1971) - Avec un million de fois plus de programmeurs qu'en 1970, la psychologie de la façon dont ils conçoivent les programmes, de leurs erreurs et de la façon de les éviter est plus importante que jamais.
Outils logiciels (1976) - Le Web étant un ensemble de cadres, d’utilitaires, de scripts et de plug-ins, les idées présentées dans les outils logiciels n’ont jamais été aussi pertinentes.
EDIT: Aborder la question générale de - les anciens livres de programmation sont-ils pertinents?
Les principes généraux du génie logiciel n'ont pas tellement changé, il existe de nouvelles technologies OO, TDD, etc. Mais en général, les utilisateurs et les problèmes n'ont pas changé - et réfléchir à la façon de diviser un problème est la même chose maintenant. a toujours été.
Ces livres plus anciens ont généralement été écrits par des experts dans le domaine. De nombreux livres de programmation modernes ont pour but de créer une barrière de 2000 pages pour le dernier mot à la mode tant qu'il est toujours d'actualité.
Les ouvrages sur les langages et les technologies qui ne sont plus utilisés ne sont probablement pas pertinents - aucun manuel d'assembleur Vax ne figure sur la liste. Mais 'C' est toujours très utilisé et 'The C programming language' n'est pas seulement le meilleur livre sur 'C', c'est aussi un modèle pour rédiger un tutoriel concis et une référence à votre langue.
Y a-t-il de nouveaux algorithmes? Oui. Mais tous les anciens algorithmes sont toujours pertinents et la plupart des nouveaux sont situés dans des zones obscures que vous ne rencontrerez probablement pas. Personne n'a mis au point un meilleur type ou FFT récemment. Bien que d'autres personnes aient tenté de mieux les expliquer, rien ne justifie que les livres d'algorithmes de cette année soient meilleurs que ceux du CLRS.
ps. Votre nouvel iWhatsit fonctionne sous BSD, développé en 1977. Maintenant, vous les enfants, sortez de ma pelouse!
la source
IMHO, il n'est pas surprenant que les très bons livres restent populaires au fil des décennies - cela montre à quel point ils sont bons. Mais je pense pouvoir vous dire quelque chose pour chacun des candidats que vous avez énumérés:
En fait, la première édition de "Code complete" date de 1993, elle est donc vraiment un "classique". Il s'agit d'un style de base, utilisant des exemples qui s'appliquent à presque tous les langages de programmation de la famille C, qui contient les langages les plus populaires de nos jours (C / C ++ / Java / C # / Objective-C / D / ...). Donc oui, ce livre est à jour.
En fait, je n'ai en fait pas lu ce livre (mon manuel d'algorithmes provenait de "Sedgewick"), mais l'apprentissage des algorithmes et de la construction d'algorithmes est vraiment indépendant du langage. Bien sûr, ce métier est de moins en moins connu ces dernières années, car on trouve aujourd'hui de nombreux algorithmes de base dans les bibliothèques standard, mais à mon humble avis, chaque programmeur professionnel devrait avoir des connaissances de base dans ce domaine.
C'est un très bon livre sur la programmation en tant qu'artisanat. Langage agnostique et très, très actuel, tant que la programmation est effectuée manuellement par les programmeurs, à l'aide d'éditeurs de texte, d'EDI, de contrôle de version, etc.
Ceci est mon préféré, même si (ou peut-être parce que) le livre utilise Scheme pour vous apprendre les différences entre différents paradigmes de programmation. Je ne connais aucun autre livre qui consacre une telle importance à la construction d'abstractions. Et construire des abstractions est une capacité clé qui fait la différence entre un programmeur médiocre et un programmeur de haut niveau - cela n’a pas changé depuis les dernières décennies, alors vraiment, ce livre est intemporel. En outre, les langages fonctionnels et les éléments de langage sont devenus plus populaires récemment, alors les idées présentées dans ce livre ont connu une renaissance.
Eh bien, ce livre n’est peut-être pas aussi intemporel que les quatre autres. Mais puisque C est quelque chose qui ressemble à la "mère" de tous les langages populaires que j'ai énumérés ci-dessus, il serait peut-être une bonne idée de lire ce livre non plus - je ne pense pas qu'il existe des livres "C" modernes qui sont vraiment meilleurs. Et si vous devez effectuer une programmation de maintenance du code C ++ écrit par quelqu'un qui connaissait mieux le C que le C ++, alors ce livre est un must.
Enfin, vous demandiez des livres qui tiennent davantage compte de la "réalité actuelle", sans être trop spécifiques à la technologie. Quelle est donc la "réalité actuelle" et qu'est-ce qui a changé du côté de la "non-technologie"? Voici quelques points de la dernière décennie, sans dire que cette liste est complète ou a les bonnes priorités.
(Je ne liste ici rien sur le développement Web ou App, car je pense que cette technologie est spécifique).
Il existe de bons livres pour les sujets 1 et 2, en particulier "Clean Code" de 2008 et "Travailler efficacement avec du code hérité" de 2004. Peut-être que ce sont les "nouveaux" livres que vous recherchez?
la source
Parmi ceux que vous avez mentionnés comme "Code complet", "Le programmeur pragmatique" et "SICP" figurent sur ma liste de lecture recommandée pour tous les nouveaux développeurs qui commencent ici dans mon entreprise et souhaitent passer à un niveau supérieur.
Ils ne sont pas obsolètes, car la science fondamentale en informatique n’a pas changé.
la source
Je n'ai pas lu tous ces livres, mais je possède Code Complete et The Pragmatic Programmer. Ces livres sont loin d'être obsolètes. Ils ont peut-être quelques paragraphes un peu rouillés mais la majeure partie du contenu est toujours d'actualité.
Le progrès en informatique et en programmation est un processus évolutif . De nouvelles abstractions sont introduites par-dessus d'anciennes, mais ces nouvelles choses ne rendent pas nécessairement l'ancienne obsolète.
Une analogie ... Que vous soyez étudiant en chirurgie traumatologique ou spécialiste en transplantation cardiaque, vous devez toujours savoir comment fonctionne le corps humain, la chimie cellulaire, les systèmes organiques, comment ouvrir rapidement la poitrine et comment s'ouvrir. arrêtez de saigner si cela se produit, etc ... Ce n'est pas parce qu'ils ont inventé le matériel endoscopique et des techniques moins invasives que vous êtes prêt à tout pour apprendre les bases. Cela signifie seulement que vous devez en apprendre davantage.
la source
Le "nuage" n'est pas un facteur. Le "nuage" est en réalité beaucoup plus ancien que la plupart des livres que vous avez énumérés. la plupart de ces livres traitent de principes de base, ils ne changent pas vraiment souvent. Les frameworks et les bibliothèques changent tout le temps, mais la structure de votre code ne change pas beaucoup. De même, un pointeur est toujours un pointeur, il ne commence pas à faire des choses différentes simplement parce que. Le seul livre spécifique à une langue que vous avez répertorié concerne C, auquel cas ce livre est beaucoup plus utile que tout nouveau, car il a probablement été écrit plus proche de la période de développement du code C avec lequel vous travailleriez.
la source
La liste que vous avez citée, non, ils ne sont pas obsolètes. Un livre n'est obsolète que lorsque le sujet a suffisamment changé pour ne pas être utile. La nature de la programmation et le langage C ont très peu changé depuis la publication
la source
Une des choses que vous devez comprendre est qu’il existe des principes sous-jacents qui sont essentiellement intemporels et des implémentations qui vont et viennent.
Les principes sous-jacents sont essentiellement toute la théorie ennuyeuse sur laquelle l'informatique a tendance à passer beaucoup de temps, et cela reste valable même si le monde change autour. Ceci par opposition à des choses comme "Comment utiliser Win32s sous Windows 3.11" qui est très ancien et obsolète.
Pour mettre les choses en perspective, le texte canonique sur la géométrie a deux mille ans. La plupart des mathématiques enseignées jusqu'au niveau universitaire ont au moins 300 ans. La seule raison pour laquelle les livres CS ne sont pas anciens, c'est parce que le champ est toujours nouveau.
la source
Certains livres sont intemporels car ils abordent des idées qui sont si fondamentales pour la pratique du développement logiciel qu’ils seront toujours appliqués.
Prenons, par exemple, le mois de l'homme mythique , quand je lisais ce livre, j'oubliais qu'il avait été écrit en 1975. Quand il se mêle de temps en temps à la référence d'IBM System 360, il m'emballe toujours parce que c'est le seul contenu datant de la livre. Tout le reste s'applique ici et maintenant. Je conserve toujours mon exemplaire de Patterns of Enterprise Application Architecture de Martin Fowler , maintenant âgé de 9 ans mais encore intemporel et toujours applicable au travail que je fais aujourd'hui.
Mon livre préféré en ce moment est La modélisation Java en couleur avec UML (1999) de Peter Coad, même si je suis un développeur C # et évite UML, car les techniques et les concepts font de moi un meilleur codeur.
Nous ferions bien d'apprendre de la première génération de développeurs, car ils ont parcouru le sol que nous connaissons actuellement et leur sagesse durement acquise peut nous aider à prendre une longueur d'avance sur ce que nous faisons / apprenons aujourd'hui.
la source
Les principes de base du logiciel n'ont pas changé au cours des 20 dernières années. Une pile, un arbre et une liste chaînée fonctionnent toujours comme auparavant. "XOR" signifie toujours la même chose. Un octet a encore 8 bits.
Etes-vous sérieusement en train de suggérer que le "développement multiplateforme" est une nouvelle idée? Pourquoi pensez-vous que C a été inventé?
"Cloud" est un mot à la mode marketing. Cela voulait dire quelque chose de spécifique, mais il a été dégradé par la surutilisation. De nos jours, chaque fois que vous communiquez avec un serveur distant via un réseau, les spécialistes du marketing y apposent l'étiquette «nuage». Il est donc inutile de parler de cela, car c'est un mot dénué de sens.
Je ne connais pas votre professeur de 61 ans, je ne peux donc pas le garantir. De votre côté, vous n’êtes clairement pas aussi intelligent que vous le pensez. Écoutez le professeur, il est possible que vous appreniez quelque chose.
"Tu ne deviens pas vieux en étant pas dupe. Beaucoup de jeunes hommes sages, ils sont morts en enfoirés." - Richard Pryor
la source
Voici quelques livres très anciens et obsolètes:
L'art de la programmation informatique, vol. 1-3 par D. Knuth. Celles-ci ont été publiées entre 1968 et 1981! Nous n'utilisons plus de tubes à vide, les gens! Tout dans ces livres sont boiteux. Où est la discussion sur Python et Ruby?
Computers and Intractability: Un guide sur la théorie de la NP-Complétude par MR Garey et DS Johnson, 1979. Super boiteux! Tous ces problèmes ont probablement déjà été résolus.
Si aucun livre n’a été écrit au cours des trois dernières années en Python, sa lecture ne vaut pas la peine.
la source
Ces livres ne sont pas obsolètes, ces livres sont des classiques.
Pour citer Kaplansky , " passez chaque jour tous les jours à apprendre quelque chose de nouveau et qui ne correspond pas au problème sur lequel vous travaillez actuellement (souvenez-vous que la disjonction peut être temporaire) et lisez les maîtres . "
la source
Je sais ce que vous voulez dire, quand nous avons des avancées (LINQ me vient à l’esprit) qui changent la lisibilité et l’utilisation du code, mais le fait que ces livres soient anciens ne signifie pas qu’ils n’offrent pas d’excellentes leçons au lecteur.
Bien que les langages de programmation qu'ils utilisent puissent ne plus être à la mode, la théorie qui les sous-tend encore est vraie aujourd'hui. La plupart de ces livres insistent sur le fait de bien couvrir les bases, et les bases n'ont pas tellement changé.
la source
L'industrie informatique est encore très jeune. Les livres écrits il y a 30 ans me paraissent toujours précieux et nécessaires à une compréhension complète. Les concepts abstraits prennent parfois un certain temps à digérer.
la source
Certaines parties mineures sont obsolètes dans tous ces livres, mais 99% est toujours aussi bon.
Les livres d'algorithmes vont vieillir lentement. Les algorithmes sont des maths, et les maths ne changent pas rapidement. Bien sûr, il existe encore des recherches sur de nouveaux algorithmes supérieurs dans certaines circonstances (par exemple, l'algorithme de Furer (2007) de Schonhage-Strassen pour la multiplication de plus de 40000 chiffres), mais l'introduction vous oblige à apprendre les bases (diviser pour mieux vaincre / Programmation dynamique / Programmation linéaire / etc) afin que vous puissiez apprendre à penser raisonnablement aux algorithmes.
L'apprentissage de la norme C de K & R reste la meilleure source. bien que je ne sois pas sûr de pouvoir faire confiance à leurs sections sur la configuration de votre environnement.
SICP est un livre merveilleux et enseigne les fondements de la société de l'information moderne en enseignant le lisp, une langue merveilleuse. Cependant, lisp n'est sans doute pas la langue la plus utile de nos jours; Lisp est l'arme secrète de certains, mais l'apprentissage de langages comme Java ou Python est d'abord un très mauvais programmeur qui n'a jamais besoin d'apprendre à implémenter des listes de tri, des listes chaînées ou des tableaux ou la notation Big-O pour finalement faire des choses très inefficaces.
Certains programmeurs Code Complete ou Pragmatic sont moins pertinents, en particulier si vous programmez dans des langages plus récents (par exemple, python / ruby / C ++ 11), car il est souvent centré sur la manière de faire quelque chose en C ou donne des solutions recommandées en utilisant le meilleur outils disponibles à l’époque (comme CVS / RCS pour le contrôle de version plutôt qu’un outil moderne comme git / bzr / hg / svn). Mais il est toujours bon de penser que le contrôle de version est indispensable et qu’il doit être transparent, s’auto-documenter et comprendre la logique de la raison pour laquelle il s’agit d’un impératif absolu.
Ou encore les recommandations de PP contre les IDE pour les outils de base éditeur / éditeur unix - cela ne veut pas dire que vous ne devriez pas apprendre à utiliser find / awk / local / grep / sed, mais un bon IDE peut souvent vous faire gagner beaucoup de temps. Par exemple, emacs peut mettre en évidence la syntaxe ou compléter le code simplement; mais disons qu'un bon IDE dira de donner des info-bulles avec les déclarations de fonction lorsque vous les saisissez, d'analyser du code et de marquer des variables inutilisées, de simplifier la réduction de sections de code, etc.
la source
Oui, oui et oui.
Cela ne rend pas ces livres obsolètes. "Informatique moderne" est un terme incroyablement large. Cependant, il inclut la programmation C, de sorte que "Le langage de programmation C" est toujours un livre pertinent. Il comprend des algorithmes, de sorte que "Introduction aux algorithmes" est toujours un livre pertinent. Etc., etc.
La plupart des applications de l'App Store (pour utiliser la plate-forme mobile la plus populaire à titre d'exemple) sont écrites en Objective C, un langage du début des années 80 qui est un sur-ensemble de C. Donc, encore une fois, le langage C reste pertinent.
C'est notre présent.
Mais qu'est ce que ça veut dire?
Il existe trop de langues, d'API, de cadres, de plates-formes, d'outils, de stratégies de collaboration, etc. pour que l'école vous prépare à un travail spécifique . L’école ne peut que jeter les bases en vous fournissant un modèle de travail de base sur le fonctionnement de la machine, sur les algorithmes, les structures de données, la construction de code, les stratégies de décomposition, certains outils, etc.
Un "vrai développeur" n'est pas quelqu'un qui sait tout, mais quelqu'un qui a la capacité de faire ce genre de travail, qui a des bases théoriques et pratiques et qui sait apprendre , car votre éducation ne se termine jamais.
la source
Ok, je vais donc proposer une réponse beaucoup plus théorique. Je suis d’accord avec tous ceux qui ont répondu à la question, ce qui est assez évident à mon avis, c’est la base de ce que nous faisons en tant que programmeurs et tous ces nouveaux cadres reposent sur ces mêmes piliers.
Voici mes deux cents - pas vraiment les miens, je l'ai appris de Saint-Aquinas et d'Aristote avant lui.
La mécanique d'un ordinateur n'a pas changé depuis von-neumann. De même, les détails dont vous avez besoin pour apprendre à être un bon programmeur resteront les mêmes jusqu'à ce que le modèle de von-neumann soit obsolète. L’assemblage, c’est le langage informatique… apprenez-le, pas d’excuses.
C est la langue maternelle de Windows et Unix. Apprenez-le ou trouvez un nouveau métier. Si vous êtes un de ces types qui sont passés directement à JAVA ou à C #, vous pouvez être un bon programmeur, mais vous seriez un meilleur programmeur si vous appreniez C - un point.
Les algorithmes et les structures de données sont la base des programmes informatiques, apprenez-les.
Tout le reste est une abstraction de ces disciplines fondamentales. Les abstractions sont merveilleuses lorsqu'elles sont utilisées correctement-- sérieusement, j'utilise C # pour 75% de tous mes projets. Cependant, ils vous rendent stupide si vous ne prenez pas le temps de comprendre comment ils fonctionnent et comment fonctionner sans eux. Vous passerez un temps infini à créer des logiciels à traverser le trou carré proverbial lorsqu'il existe de bien meilleures approches et que des bugs auraient pu être évités. Le développement de logiciels est un métier qu'il faut maîtriser et, au bout du compte, les outils changent rarement. C'est pourquoi ces livres sont si importants.
Tous ces programmeurs JAVA et C #, tsk, je parie que la plupart d’entre eux n’ont même jamais vu un épisode de Star Trek!
la source
J'ai entendu un dicton d'un mentor:
"Un bon conseil vient avec une raison pour que vous sachiez quand ce n'est plus un bon conseil." Donc, dans les termes du livre, un livre qui explique pourquoi faire X sur Y vous permettra de savoir quand cet avis n’est plus valable. Un livre "Fais-le toujours, fais-le", comme certains des cours intensifs du langage X n’est pas si bon.
J'en ai vu un appelé "learn unix in 24 hours", eh bien le livre faisait environ 8 cm d'épaisseur, je doute que beaucoup de gens puissent même lire chaque page en 24 heures :)
Rappelez-vous que ce qui est en vogue aujourd'hui pourrait être bafoué demain. Tous les éléments suivants ont déjà été considérés comme courants (en vogue hier), mais ne le sont plus:
Et il y a quelques choses qui étaient autrefois complètement anathèmes mais qui sont maintenant acceptées:
Sachez pourquoi, et vous saurez quand d'anciennes hypothèses ont été remplacées par une nouvelle réalité, de même que les conseils.
la source