Peter Norwig: apprendre la programmation en ... 10 ans

Note du traducteur: cet article a été publié par Peter Norvig en 2001. Selon la version de 2001, une traduction en russe a été effectuée. En 2014, l'article a été mis à jour, mais la traduction n'a pas été mise à jour. J'ai donc terminé ma traduction de l'article sur sa version moderne de 2014. Je pense que l'article n'a pas perdu sa pertinence, bien qu'il soit quelque peu dépassé. Si vous trouvez des erreurs de traduction, écrivez-en un personnel.

Où est tout le monde si pressé?


Allez dans n'importe quelle librairie et vous verrez immédiatement un livre sur la façon d'apprendre Java en 24 heures, ainsi que des options infinies sur la façon d'apprendre C, SQL, Ruby, des algorithmes et ainsi de suite en quelques jours ou quelques heures. Amazon Advanced Search [ title: teach, yourself, hours, since: 2000 ] répertorie 512 livres. Parmi les dix premiers, neuf sont des livres sur la programmation (un seul concerne la comptabilité). Vous obtiendrez les mêmes résultats en remplaçant «apprenez vous-même» par «apprendre» et «heures» par «jours».

Cela mène à la conclusion: soit les gens sont pressés d'apprendre la programmation, soit d'une manière fabuleuse, il est plus facile d'apprendre la programmation qu'autre chose. Felleisen et al. mentionné dans leur livre Comment concevoir des programmes , quand ils ont écrit: «Une mauvaise programmation est facile. "Les idiots peuvent apprendre cela en 21 jours, même s'ils sont pleins de nerds." Le site de bande dessinée Abtruse Goose a également abordé ce sujet ( voici le lien ).

Voyons ce que le titre du livre Teach Yourself C ++ in 24 Hours peut signifier:

  • Enseignez-vous: en 24 heures, vous n'aurez pas le temps d'écrire des programmes importants et de tirer des conclusions de vos succès et de vos échecs. Vous n'aurez pas le temps de travailler avec un programmeur expérimenté et de comprendre quelle est l'idéologie du C ++. En bref, dans ce court laps de temps, vous n'apprendrez pas beaucoup. Le livre n'a donc en tête qu'une connaissance superficielle, mais pas une compréhension profonde. Comme l'a dit Alexander Pope: " Peu de connaissances sont une chose dangereuse ."
  • C ++: En 24 heures, vous êtes tout à fait capable d'apprendre quelque chose de la syntaxe C ++ (si vous connaissez déjà un langage de programmation différent), mais vous ne savez pas beaucoup comment utiliser ce langage. En bref, si vous, par exemple, un programmeur de base, vous apprenez à écrire des programmes de style basique en utilisant la syntaxe C ++, mais vous ne comprendrez pas pour quelles tâches C ++ est vraiment bon (ou mauvais). Alors quoi, vous dites? Comme l'a dit Alan Perlis : " Si un langage ne change pas votre compréhension de la programmation, l'apprendre est inutile ." Eh bien, sauf que vous devez apprendre un peu de C ++ pour comprendre comment utiliser une sorte de bibliothèque pour une tâche spécifique. Mais dans ce cas, nous ne parlons pas d'enseigner la programmation dans la langue; vous apprenez simplement à accomplir une tâche spécifique.
  • en 24 heures: Malheureusement, comme je le montre ci-dessous, ce temps n'est pas suffisant.

Apprenez la programmation en 10 ans


Des études ( Bloom (1985) , Bryan et Harter (1899) , Hayes (1989) , Simmon et Chase (1973) ) ont montré qu'il faut environ dix ans pour maîtriser des compétences dans un domaine spécifique, par exemple dans jouer aux échecs, composition musicale, travailler avec le télégraphe, dessiner, jouer du piano, nager, tennis, neurophysiologie et topologie. Le secret réside dans une pratique réfléchie : non seulement la répétition mécanique, mais la recherche de tâches supérieures à votre niveau actuel, les résoudre, analyser vos actions pendant leur solution et après leur résolution, corriger les erreurs commises. Et encore. Et encore. Il n'y a pas de voie plus courte: même Mozart, qui à 4 ans est devenu un enfant miracle musical, a mis 13 ans avant de commencer à créer une musique de classe mondiale. Les Beatles en 1964 ont fait irruption sur la scène avec un tas de tubes et ont joué dans le spectacle d'Ed Sullivan. Mais avant cela, ils jouaient dans les petits clubs de Liverpool et de Hambourg depuis 1957. Et malgré leur renommée mondiale auprès des fans, leur premier succès auprès des critiques musicaux est venu avec la sortie du sergent Pepper en 1967.

Cette idée a été popularisée par Malcolm Gladwell dans son livre, bien qu'il y parle de 10 000 heures, pas de 10 ans. Le célèbre photographe Henri Cartier-Bresson (1908-2004) a exprimé cette idée comme suit: « Les 10 000 premières photographies seront les pires » (il ne soupçonnait même pas qu'avec l'aide d'un appareil photo numérique certains parviennent à atteindre ce chiffre en une semaine). La vraie expérience vient avec la vie: Samuel Johnson (1709-1784) a écrit: «L' expérience dans n'importe quel domaine ne peut être acquise que par le travail d'une vie; il n'y a pas de prix inférieur »; Chaucer (1340-1400) s'est plaint: " Si peu à vivre, tant à apprendre ." Hippocrate (400 avant JC) est célèbre pour sa déclaration «la vie est courte, la science est vaste », qui ressemble complètement à ceci: «Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile», et dans la traduction russe «Life Bref, la science est vaste, le cas des tremblements, l'expérience est trompeuse, le jugement est difficile. » Bien sûr, pas un seul numéro ne peut être la réponse exacte: il n'y a aucune raison de supposer que toutes les compétences (programmation, jeu d'échecs, pions, instrument de musique) nécessitent exactement le même temps pour les maîtriser, ainsi que ce dont les différentes personnes ont besoin exactement en même temps. Comme l'a dit le professeur K. Anders Ericsson : « Dans la plupart des domaines, il est tout simplement incroyable de voir combien de temps il faut même aux plus talentueux pour maîtriser. Le nombre «10 000 heures» vous aide simplement à comprendre que nous parlons de plusieurs années de dur labeur de 10 à 20 heures par semaine pour atteindre le plus haut niveau, même pour les talents les plus doués de la naissance »

Vous voulez donc devenir programmeur


Voici ma recette du succès en programmation:

  • Intéressez- vous à la programmation et créez quelque chose juste pour le plaisir. Cela devrait être si intéressant pour vous qu'il ne serait pas dommage d'y consacrer les 10 prochaines années / 10 000 heures.
  • Programme . La meilleure formation est la pratique . En termes techniques, «le niveau maximum de performance d'un individu dans un certain domaine n'est pas automatiquement atteint avec l'expérience, au contraire, le niveau de productivité peut être augmenté même chez les individus les plus expérimentés en raison d'un désir conscient d'amélioration» ( p. 366 ) et «pour la formation la plus efficace, il faut bien la tâche avec le niveau de complexité approprié pour un individu particulier, une évaluation compréhensible de sa mise en œuvre et la possibilité de sa mise en œuvre répétée et la correction des erreurs Ibok »(pp. 20-21) Le livre Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life est une lecture très instructive de cette pensée.
  • Parlez à d'autres programmeurs; lire d'autres programmes. C'est beaucoup plus important que n'importe quel livre ou cours de formation.
  • Si vous le souhaitez, consacrez quatre ans à vos études à l'université (ou aux études supérieures). Cela vous donnera accès à des travaux qui nécessitent des titres et des titres éprouvés. Mais si vous n'aimez pas étudier, vous pouvez (avec un certain zèle) acquérir les mêmes connaissances par vous-même ou directement au travail. En tout cas, apprendre des livres seuls ne suffit pas. « L'enseignement de l'informatique ne fera de personne un expert en programmation, tout comme l'étude des pinceaux et des pigments colorés ne peut faire de personne un maître artiste », écrit Eric Raymond , auteur du New Hacker's Dictionary. Le meilleur programmeur que j'ai jamais eu à embaucher n'avait qu'un cours scolaire complet derrière lui, et il a créé d' excellents programmes , a modéré la liste de diffusion de ses fans et a gagné assez d'argent sur les options pour acheter sa propre discothèque .
  • Travaillez sur des projets avec d' autres programmeurs. Soyez le meilleur programmeur dans un projet; être le pire des autres. Lorsque vous êtes le meilleur, vous testez votre capacité à diriger un projet et à inspirer les autres avec votre vision. Quand vous êtes le pire, vous apprenez des maîtres ce qu'ils font et ce qu'ils n'aiment pas faire (c'est ce qu'ils vous demandent de faire).
  • Travaillez sur des projets après d' autres programmeurs. Essayez de comprendre un programme écrit par quelqu'un d'autre. Examinez de plus près ce qui est nécessaire pour comprendre le code et corrigez-le lorsqu'il n'y a aucun programmeur à proximité qui l'a écrit. Réfléchissez à la façon de concevoir vos programmes afin qu'ils soient plus faciles à soutenir pour ceux qui travailleront avec eux après vous.
  • Apprenez au moins une demi-douzaine de langages de programmation . Choisissez une langue d'apprentissage basée sur des abstractions de classe (par exemple Java ou C ++), une langue qui prend en charge les abstractions fonctionnelles (par exemple Lisp ou ML ou Haskell), une qui prend en charge l'abstraction syntaxique (par exemple Lisp), un langage déclaratif (par exemple , Prolog ou C ++ - modèles), et un - mettant l'accent sur la concurrence (par exemple, Clojure ou Go).
  • N'oubliez pas que dans l'expression "informatique" se trouve le mot ordinateur . Rappelez-vous combien de temps il faut à votre ordinateur pour exécuter une instruction, pour lire un mot machine dans la mémoire (avec ou sans échec de cache), pour lire une séquence de mots machine à partir d'un disque, rechercher un enregistrement sur un disque ( Réponses ici )
  • Participez à la standardisation d'un langage de programmation. Cela peut être une commission ANSI C ++, ou une réunion dans votre équipe où vous déterminez combien d'espaces vous laissez pour l'indentation dans le code - 2 ou 4. Dans tous les cas, vous découvrirez ce que les autres aiment dans la langue, à quel point ce sentiment est profond, et vous découvrirez peut-être aussi de quoi il s'agit.
  • Sachez quand il est temps de quitter la commission de normalisation linguistique le plus rapidement possible.

Avec tout ce qui précède, le simple fait de lire des livres ne vous en donnera pas autant. Avant la naissance de mon premier enfant, j'ai lu tous les livres sur les soins aux bébés et je ne comprenais toujours pas quoi faire. 30 mois plus tard, alors que mon deuxième enfant s'apprêtait à naître, pensez-vous que j'ai regardé dans des livres pour me rafraîchir la mémoire? Non. Je me suis appuyé sur ma propre expérience, qui s'est avérée beaucoup plus utile et meilleure que des milliers de pages écrites par des experts.

Fred Brooks, dans son article « Silver Bullet does Not Exist », a décrit trois étapes pour trouver d'excellents programmeurs:

  1. Identifiez systématiquement les meilleurs programmeurs le plus tôt possible
  2. Attribuer un mentor au programmeur qui sera engagé dans le développement des talents et suivra attentivement sa carrière
  3. Encourager la communication des talents croissants les uns avec les autres de toutes les manières, afin qu'ils échangent des idées

Il s'avère que certaines personnes ont déjà des qualités qui leur permettent de devenir de grands programmeurs; il suffit de les orienter sur le bon chemin. Alan Perlis le dit plus succinctement: « Tout le monde peut apprendre à sculpter des sculptures; Michel-Ange devrait apprendre à ne pas les sculpter. De même, avec les grands programmeurs . " Perlis voulait dire que les grands ont des qualités intérieures qui ne s'acquièrent pas par l'entraînement. Mais d'où viennent ces qualités? Est-ce congénital? Ou sont-ils produits par du zèle? Comme l'a dit Aguste Gusto (personnage du dessin animé Ratatouille ), " tout le monde peut cuisiner, mais seul l'intrépide peut devenir grand ". Je crois que dans notre cas, nous parlons d'un désir brûlant de consacrer la majeure partie de ma vie à l'auto-apprentissage ciblé dans la programmation. Mais il peut y avoir un mot intrépide plus approprié. Ou, comme l'a dit Anton Yego (critique d'Aguste Gusto): " tout le monde ne peut pas devenir un grand artiste, mais un grand artiste peut apparaître de partout ."

Alors, allez-y, achetez un livre sur Java / Ruby / JavaScript / PHP; vous en tirerez peut-être des avantages. Mais vous ne pourrez pas changer votre vie et ne deviendrez pas un expert en programmation en 24 heures ou en 21 jours. Que diriez-vous de passer 24 mois de dur labeur à maîtriser continuellement le sujet? Maintenant, nous avons déjà une conversation sérieuse ...

Littérature


  • Bloom, Benjamin (éd.) Developing Talent in Young People, Ballantine, 1985.
  • Brooks, Fred, No Silver Bullets, IEEE Computer, vol. 20, non. 4, 1987, p. 10-19.
  • Bryan, WL & Harter, N. "Études sur le langage télégraphique: l'acquisition d'une hiérarchie d'habitudes. Psychology Review, 1899, 8, 345-375
  • Hayes, John R., Solutionneur de problèmes complet Lawrence Erlbaum, 1989.
  • Chase, William G. & Simon, Herbert A. "Perception in Chess" Psychologie cognitive, 1973, 4, 55-81.
  • Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, Cambridge University Press, 1988.

Les réponses


Temps estimé pour effectuer diverses opérations sur un ordinateur type:
exécution d'une instruction type1/1 000 000 000 s = 1 nanosec
lire à partir du cache L10,5 nanosec
erreur de prédiction de la transition5 nanosec
lire à partir du cache L27 nanosec
capture / libération de mutex25 nanosec
lecture depuis la mémoire principale100 nanosec
envoyer 2K sur un réseau 1Gbps20 000 nanosec
lecture séquentielle de 1 Mo dans la mémoire250 000 nanosec
lire à partir du disque avec recherche (chercher)8 000 000 nanosec
lire 1 Mo séquentiellement à partir du disque20 000 000 nanosec
envoi d'un paquet de données des États-Unis vers l'Europe et retour150 millisecondes = 150 000 000 nanosecondes


Application: sélection de la langue


Certains lecteurs m'ont demandé quel langage de programmation ils devaient apprendre en premier. Il n'y a pas de réponse unique à cette question, mais considérez les points suivants:

  • Contactez vos amis . Quand ils me demandent «quel système d'exploitation dois-je choisir - Windows, UNIX ou Mac?», Je réponds: «utilisez celui que vos amis utilisent». Ce que vous apprendrez de vos amis couvrira plus que les différences internes entre les systèmes d'exploitation ou les langages de programmation. Pensez également à vos futurs amis: la communauté des programmeurs, dont vous ferez partie si vous continuez votre formation. La langue de votre choix a-t-elle une communauté grandissante ou est-elle petite et en train de disparaître progressivement? Existe-t-il de nombreux livres, sites Web et forums où vous pouvez obtenir des réponses? Aimez-vous les gens qui traînent sur ces forums?
  • Commencez simplement . Les langages de programmation C ++ et Java sont conçus pour le travail professionnel de grandes équipes de programmeurs expérimentés qui sont les plus préoccupés par l'efficacité de leur exécution de code. En conséquence, ces langages de programmation ont des structures complexes pour résoudre de tels problèmes. Il est important pour vous d'apprendre à programmer. Vous n'avez pas besoin d'une complexité supplémentaire. Vous avez besoin d'une langue spécialement créée pour être facile à apprendre et à mémoriser.
  • Jouez. Comment aimeriez-vous apprendre à jouer du piano: de la manière interactive habituelle, lorsque vous entendez chaque note dès que vous appuyez sur une touche, ou en "mode batch" - lorsque vous entendez la mélodie entière uniquement après avoir appuyé sur toutes les notes d'une chanson sur les touches? Bien sûr, la manière interactive est beaucoup plus facile, tout comme la programmation. Sélectionnez une langue dotée d'un mode de fonctionnement interactif et jouez-la.

Compte tenu de tous ces critères, je recommande Python ou Scheme comme premier langage de programmation. Ou JavaScript, mais pas parce qu'il est idéalement conçu pour les débutants, mais parce qu'il y a beaucoup de manuels dans cette langue, par exemple, à Kahn Academy . Mais votre cas particulier peut être spécial, vous pouvez donc choisir parmi de nombreuses autres langues. Si vous avez moins de dix ans, vous aimerez peut-être la langue d' Alice ou de Squeak ou Blockly (les élèves plus âgés peuvent également les aimer). L'essentiel est de faire un choix et de commencer à apprendre.

Annexe: Livres et autres ressources


On me demande quels livres et sites Web sont les meilleurs pour l'apprentissage. Je vais répéter encore une fois: «lire des livres ne suffit pas», mais je recommande ce qui suit:

Source: https://habr.com/ru/post/fr416167/


All Articles