Pensez en Python

Comment maîtriser la science de l'informatique


précédentsommairesuivant

Introduction

L'étrange histoire de ce livre

En janvier 1999, je me préparais à donner un cours d'introduction à la programmation en Java. Je l'avais enseigné trois fois et je devenais frustré. Le taux d'échec dans la classe était trop élevé et, même pour les étudiants ayant réussi, le niveau global était trop faible.

Un des problèmes que je voyais était les livres. Ils étaient trop gros, avec trop de détails inutiles à propos de Java, et ne contenaient pas assez de conseils de haut niveau sur la façon de programmer. Et ils souffraient tous d'un effet piège : ils commençaient doucement, se complexifiaient progressivement, puis, quelque part autour du Chapitre 5, c'était la catastrophe. Les étudiants recevaient trop de notions nouvelles, trop vite, et je devais passer le reste du semestre à ramasser les morceaux.

Deux semaines avant le premier jour de cours, j'ai décidé d'écrire mon propre livre. Mes objectifs étaient :

  • être bref. Il est préférable que les étudiants lisent 10 pages, plutôt qu'ils ne lisent pas 50 pages ;
  • faire attention au vocabulaire. J'ai essayé de minimiser le jargon et de définir chaque terme lors de la première utilisation ;
  • construire progressivement. Pour éviter les pièges, j'ai pris les sujets les plus difficiles et je les ai divisés en une série de petites étapes ;
  • se concentrer sur la programmation, et non sur le langage de programmation. J'ai inclus un sous-ensemble minimal de notions utiles de Java et laissé le reste de côté.

Il me fallait un titre, alors je choisis « Comment maîtriser la science de l'informatique » sur un caprice.

La première version était un peu brute de fonderie, mais elle a fonctionné. Les étudiants l'ont lue et ils en ont compris assez pour que je puisse aborder en classe juste les sujets difficiles et intéressants et (surtout) pour que je puisse les faire pratiquer.

J'ai publié le livre sous la licence de documentation libre GNU, qui permet aux utilisateurs de copier, modifier et distribuer le livre.

Ce qui est arrivé ensuite est très sympa. Jeff Elkner, un professeur en Virginie, a adopté mon livre et l'a « traduit » en Python. Il m'a envoyé une copie de son adaptation, et j'ai eu l'expérience inédite d'apprendre Python en lisant mon propre livre. Sous le nom d'éditeur Green Tea Press, j'ai publié la première version Python en 2001.

En 2003, j'ai commencé à enseigner à l'université Olin et je devais enseigner Python pour la première fois. Le contraste avec Java était frappant. Les étudiants ont eu moins de peine, appris plus, travaillé sur des projets plus intéressants, et généralement ont eu beaucoup plus de plaisir.

Depuis, j'ai continué à développer le livre, en corrigeant les erreurs, en améliorant certains des exemples et en ajoutant du matériel nouveau, en particulier les exercices.

Le résultat est ce livre, maintenant avec le titre moins grandiose « Pensez en Python ». Certains de ces changements sont :

  • j'ai ajouté une section sur le débogage à la fin de chaque chapitre. Ces sections présentent les techniques générales pour trouver et éviter les bogues et des avertissements sur les pièges de Python ;
  • j'ai ajouté une série d'études de cas - exemples plus longs avec des exercices, des solutions et discussions ;
  • j'ai élargi la discussion sur les modèles de développement de programmes et sur les patrons de conception (design patterns) de base ;
  • j'ai ajouté les annexes sur le débogage et l'analyse des algorithmes.

La deuxième édition de « Pensez Python » a ces nouvelles fonctionnalités :

  • j'ai ajouté plus d'exercices, allant de courts tests de compréhension à quelques projets d'envergure. La plupart des exercices incluent un lien vers ma solution ;
  • le livre et tout le code inclus ont été mis à jour pour Python 3 ;
  • j'ai ajouté quelques sections et plus de détails sur le web, pour aider les débutants à commencer à exécuter Python dans un navigateur, ce qui vous dispense d'installer Python tant que vous n'en avez pas besoin ;
  • pour le chapitre 4.1Le module turtle je suis passé de mon propre logiciel graphique tortue, appelé Swampy, à un module Python plus standard, turtle, plus facile à installer et plus puissant ;
  • j'ai ajouté le nouveau Chapitre 19 intitulé « Les bonus », qui présente quelques fonctionnalités supplémentaires de Python qui ne sont pas strictement nécessaires, mais parfois utiles.

J'espère que vous aimerez travailler avec ce livre, et qu'il vous aidera à apprendre à programmer et à appréhender la science de l'informatique, au moins un peu.

Allen B. Downey
Collège Olin

Remerciements

Un grand merci à Jeff Elkner, qui a adapté mon livre Java à Python, qui a démarré ce projet et m'a présenté ce qui est devenu mon langage préféré.

Merci également à Chris Meyers, qui a contribué avec plusieurs sections de « Comment maîtriser la science de l'informatique ».

Merci à la Free Software Foundation d'avoir développé la licence de documentation libre GNU, qui a contribué à rendre possible ma collaboration avec Jeff et Chris, et à la Creative Commons pour la licence que j'utilise maintenant.

Merci aux rédacteurs de chez Lulu, qui ont travaillé sur « Comment maîtriser la science de l'informatique ».

Merci aux rédacteurs de chez O'Reilly Media qui ont travaillé sur « Pensez en Python ».

Merci à tous les étudiants qui ont travaillé avec les versions antérieures de ce livre et à tous les contributeurs (énumérés ci-dessous) qui ont envoyé des corrections et suggestions.

Liste des contributeurs

Plus de 100 lecteurs réfléchis et ayant l'œil vif ont envoyé des suggestions et corrections au cours des dernières années. Leurs contributions et l'enthousiasme pour ce projet ont été d'une grande aide.

Si vous avez des suggestions ou corrections, veuillez envoyer un courriel à feedback@thinkpython.com. Si je fais un changement basé sur vos commentaires, je vous ajouterai à la liste de contributeurs (sauf si vous demandez à être omis).

Si vous incluez au moins une partie de la phrase où l'erreur apparaît, cela me facilitera la recherche. Des numéros de page et de section sont très bien aussi, mais pas tout à fait aussi faciles à utiliser. Merci !

  • Lloyd Hugh Allen a envoyé une correction pour la Section 8.4 ;
  • Yvon Boulianne a envoyé une correction pour une erreur sémantique dans le Chapitre 5 ;
  • Fred Bremmer a effectué une correction dans la Section 2.1 ;
  • Jonah Cohen a écrit les scripts Perl pour convertir la source LaTeX de ce livre en beau HTML ;
  • Michael Conlon a envoyé une correction grammaticale pour le Chapitre 2 et une amélioration du style du Chapitre 1, et il a lancé la discussion sur les aspects techniques des interpréteurs ;
  • Benoît Girard a envoyé la correction d'une erreur humoristique dans la Section 5.6 ;
  • Courtney Gleason et Katherine Smith ont écrit horsebet.py, utilisé comme étude de cas dans la version précédente du livre. Leur programme peut maintenant être trouvé sur le site web ;
  • Lee Harr a effectué plus de corrections qu'on n'en peut énumérer ici, et il devrait vraiment être mentionné comme l'un des principaux éditeurs du texte ;
  • James Kaylin est un étudiant qui a utilisé ce texte. Il a envoyé de nombreuses corrections ;
  • David Kershaw a corrigé la fonction défectueuse concat_deux_fois de la Section 3.10 ;
  • Eddie Lam a envoyé de nombreuses corrections pour les Chapitres 1, 2 et 3. Il a également corrigé le Makefile, de façon qu'il crée un index lors de la première exécution et nous a aidé à établir un schéma de gestion de versions ;
  • Man-Yong Lee a envoyé une correction de l'exemple de code de la Section 2.4 ;
  • David Mayo a fait remarquer que le mot « inconsciemment » dans le Chapitre 1 devait être modifié en « subconsciemment » ;
  • Chris McAloon a envoyé plusieurs corrections pour les Sections 3.9 et 3.10 ;
  • Matthew J. Moelter a été un contributeur de longue durée, qui a envoyé de nombreuses corrections et suggestions pour le livre ;
  • Simon Dicon Montford a signalé une définition de fonction manquante et plusieurs fautes de frappe dans le Chapitre 3. Il a également décelé des erreurs dans la fonction incremente du Chapitre 13 ;
  • John Ouzts a corrigé la définition de « return value » dans le Chapitre 3 ;
  • Kevin Parks a envoyé de commentaires pertinents et des suggestions pour améliorer la distribution du livre ;
  • David Pool a signalé une faute de frappe dans le glossaire du Chapitre 1, et a envoyé des mots gentils d'encouragement ;
  • Michael Schmitt a envoyé une correction pour le chapitre sur les fichiers et les exceptions ;
  • Robin Shaw a signalé une erreur dans la Section 13.1, où la fonction printTime était utilisée dans un exemple sans avoir été définie ;
  • Paul Sleigh a trouvé une erreur dans le Chapitre 7 et un bogue dans un script Perl de Jonah Cohen qui génère du HTML à partir de LaTeX ;
  • Craig T. Snydal teste ce livre pour un cours à l'université Drew. Il a contribué avec plusieurs suggestions pertinentes et corrections ;
  • Ian Thomas et ses étudiants utilisent le texte pour un cours de programmation. Ils sont les premiers à tester les chapitres de la seconde moitié du livre, et ils ont fait de nombreuses corrections et suggestions ;
  • Keith Verheyden a envoyé une correction pour le Chapitre 3 ;
  • Peter Winstanley nous a signalé une erreur de longue date dans le Chapitre 3 ;
  • Chris Wrobel a apporté des corrections au code du chapitre sur les E/S de fichiers et les exceptions ;
  • Moshe Zadka a apporté des contributions inestimables à ce projet. En plus d'écrire le premier brouillon du chapitre sur les Dictionnaires, il nous a guidé de façon continue lors des premières étapes du livre ;
  • Christoph Zwerschke a envoyé plusieurs corrections et suggestions pédagogiques, et a expliqué la différence entre gleich et selbe (égal et même, identique, en allemand) ;
  • James Mayer nous a signalé tout un tas de fautes d'orthographe et de frappe, dont deux dans la liste des contributeurs ;
  • Hayden McAfee a décelé une incohérence pouvant prêter à confusion entre deux exemples ;
  • Angel Arnal fait partie d'une équipe internationale de traducteurs et travaille sur la version en espagnol du texte. Il a également trouvé quelques erreurs dans la version en anglais ;
  • Tauhidul Hoque et Lex Berezhny ont créé les illustrations du Chapitre 1 et ont amélioré la plupart des autres illustrations ;
  • Le Dr Michele Alzetta a décelé une erreur dans le Chapitre 8 et nous a envoyé quelques commentaires pédagogiques intéressants et des suggestions à propos de Fibonacci ;
  • Andy Mitchell a trouvé une faute de frappe dans le Chapitre 1 et un exemple défectueux dans le Chapitre 2 ;
  • Kalin Harvey a suggéré une clarification dans le Chapitre 7 et a trouvé quelques fautes de frappe ;
  • Christopher P. Smith a trouvé quelques fautes de frappe et nous a aidé à mettre à jour le livre pour Python 2.2 ;
  • David Hutchins a trouvé une faute de frappe dans l'Avant-propos ;
  • Gregor Lingl enseigne le Python dans un lycée à Vienne, en Autriche. Il travaille à une traduction du livre en allemand et a trouvé deux ou trois erreurs graves dans le Chapitre 5 ;
  • Julie Peters a trouvé une faute de frappe dans l'Introduction ;
  • Florin Oprina nous a envoyé une amélioration de makeTime, une correction de afficher_temps, et une jolie faute de frappe ;
  • D. J. Webre a suggéré une clarification dans le Chapitre 3 ;
  • Ken a trouvé une poignée d'erreurs dans les Chapitres 8, 9 et 11 ;
  • Ivo Wever a trouvé une faute de frappe dans le Chapitre 5 et a suggéré une clarification dans le Chapitre 3 ;
  • Curtis Yanko a suggéré une clarification dans le Chapitre 2 ;
  • Ben Logan a signalé un certain nombre de fautes de frappe et des problèmes dans la version HTML du livre ;
  • Jason Armstrong a repéré un mot manquant dans le Chapitre 2 ;
  • Louis Cordier a remarqué un endroit dans le Chapitre 16 où le code ne concordait pas avec le texte ;
  • Brian Cain a proposé plusieurs clarifications dans les Chapitres 2 et 3 ;
  • Rob Black nous a envoyé un paquet de corrections, y compris quelques modifications pour Python 2.2 ;
  • Jean-Philippe Rey, de l'École Centrale de Paris, nous a envoyé de nombreux patchs, y compris quelques mises à jour pour Python 2.2 et d'autres améliorations judicieuses ;
  • Jason Mader de l'Université George Washington a fait de nombreuses suggestions utiles et corrections ;
  • Jan Gundtofte-Bruun nous a rappelé qu'« un erreur » est une erreur ;
  • Abel David et Alexis Dinno nous ont rappelé que le pluriel de « matrice » est « matrices », et pas « matrixes ». Cette erreur était dans le livre depuis des années, mais deux lecteurs ayant les mêmes initiales l'ont rapportée le même jour. Bizarre ;
  • Charles Thayer nous a encouragé à nous débarrasser des points-virgules que nous avions mis à la fin de certaines instructions et à clarifier l'utilisation des mots « argument » et « paramètre » ;
  • Roger Sperberg nous a indiqué un raisonnement tordu dans le Chapitre 3 ;
  • Sam Bull nous a indiqué un paragraphe confus dans le Chapitre 2 ;
  • Andrew Cheung nous a signalé deux occurrences de « use before def » (variable utilisée avant son initialisation) ;
  • C. Corey Capel a mis en évidence un mot manquant dans le 3e théorème du débogage et une faute de frappe dans le Chapitre 4 ;
  • Alessandra nous a aidé à éliminer quelques confusions de Turtle ;
  • Wim Champagne a trouvé une inversion de mots dans un exemple de dictionnaire ;
  • Douglas Wright a indiqué un problème de division entière en arc ;
  • Jared Spindor a trouvé quelques déchets à la fin d'une proposition ;
  • Lin Peiheng nous a envoyé un certain nombre de suggestions très utiles ;
  • Ray Hagtvedt nous a signalé deux erreurs et pas tout à fait une erreur ;
  • Torsten Hübsch nous a indiqué une inconsistance dans Swampy ;
  • Inga Petuhhov a corrigé un exemple dans le Chapitre 14 ;
  • Arne Babenhauserheide a envoyé plusieurs corrections utiles ;
  • Mark E. Casida est est très fort pour repérer les répétitions de mots ;
  • Scott Tyler a complété ce qui manquait. Et en plus, il a envoyé tout un tas de corrections ;
  • Gordon Shephard a envoyé plusieurs corrections, chacune dans un mail différent ;
  • Andrew Turner a indiqué une erreur de spot dans le Chapitre 8 ;
  • Adam Hobart a résolu un problème de division entière dans arc ;
  • Daryl Hammond et Sarah Zimmerman ont fait remarquer que j'ai servi math.pi trop tôt. And Zim a décelé une faute de frappe ;
  • George Sass a trouvé un bogue dans la section Débogage ;
  • Brian Bingham a suggéré l'Exercice 5 ;
  • Leah Engelbert-Fenton a fait remarquer que j'ai utilisé tuple comme nom de variable, à l'encontre de mon propre conseil. En plus, elle a trouvé beaucoup de fautes de frappe et une erreur de type « use before def » ;
  • Joe Funke a mis en évidence une faute de frappe ;
  • Chao-chao Chen a trouvé une incohérence dans l'exemple Fibonacci ;
  • Jeff Paine connaît la différence entre espace et spam ;
  • Lubos Pintes a signalé une faute de frappe ;
  • Gregg Lind et Abigail Heithoff ont suggéré l'Exercice 3 ;
  • Max Hailperin a envoyé de nombreuses corrections et suggestions. Max est l'un des auteurs de l'extraordinaire livre Concrete Abstractions, que vous pourriez vouloir lire, après avoir fini de lire celui-ci ;
  • Chotipat Pornavalai a trouvé une erreur dans un message d'erreur ;
  • Stanislaw Antol a envoyé une liste de suggestions très utiles ;
  • Eric Pashman a envoyé de nombreuses corrections pour les Chapitres 4-11 ;
  • Miguel Azevedo a trouvé quelques fautes de frappe ;
  • Jianhua Liu a envoyé une longue liste de corrections ;
  • Nick King a trouvé un mot manquant ;
  • Martin Zuther a envoyé une longue liste de suggestions ;
  • Adam Zimmerman a trouvé une incohérence dans mon instance d'une « instance » et plusieurs autres erreurs ;
  • Ratnakar Tiwari a suggéré une note de bas de page expliquant les triangles dégénérés ;
  • Anurag Goel a suggéré une autre solution pour est_en_ordre_alphabetique et a envoyé quelques corrections supplémentaires. Et il sait épeler Jane Austen ;
  • Kelli Kratzer a signalé une des fautes de frappe ;
  • Mark Griffiths a indiqué un exemple prêtant à confusion dans le Chapitre 3 ;
  • Roydan Ongie a trouvé une erreur dans ma méthode de Newton ;
  • Patryk Wolowiec m'a aidé à résoudre un problème dans la version HTML ;
  • Mark Chonofsky m'a parlé d'un nouveau mot-clé dans Python 3 ;
  • Russell Coleman m'a aidé pour ma géométrie ;
  • Wei Huang a signalé plusieurs fautes de frappe ;
  • Karen Barber a repéré la plus ancienne faute de frappe dans le livre ;
  • Nam Nguyen a trouvé une faute de frappe et a signalé que j'ai utilisé le modèle Decorator sans mentionner son nom ;
  • Stéphane Morin a envoyé plusieurs corrections et suggestions ;
  • Paul Stoop a corrigé une faute de frappe dans utilise_uniquement ;
  • Eric Bronner a signalé une confusion dans la discussion sur l'ordre des opérations ;
  • Alexandros Gezerlis a établi un nouveau record en ce qui concerne le nombre et la qualité des suggestions qu'il a envoyées. Nous sommes profondément reconnaissant !
  • Gray Thomas distingue la droite de la gauche ;
  • Giovanni Escobar Sosa a envoyé une longue liste de corrections et suggestions ;
  • Alix Etienne a corrigé une des URL ;
  • Kuang He a trouvé une faute de frappe ;
  • Daniel Neilson a corrigé une erreur concernant l'ordre des opérations ;
  • Will McGinnis a signalé que polyligne était définie de façon différente à deux endroits ;
  • Swarup Sahoo a signalé un point-virgule manquant ;
  • Frank Hecker a indiqué un exercice dont l'énoncé était incomplet, et quelques liens morts ;
  • Animesh B m'a aidé à nettoyer un exemple ambigu ;
  • Martin Caspersen a trouvé deux erreurs d'arrondi ;
  • Gregor Ulm a envoyé plusieurs corrections et suggestions ;
  • Dimitrios Tsirigkas m'a suggéré de clarifier un exercice ;
  • Carlos Tafur a envoyé une page de corrections et suggestions ;
  • Martin Nordsletten a trouvé un bogue dans la solution d'un exercice ;
  • Lars O.D. Christensen a trouvé une référence morte ;
  • Victor Simeone a trouvé une faute de frappe ;
  • Sven Hoexter a signalé qu'une variable nommée input occulte une fonction interne ;
  • Viet Le a trouvé une faute de frappe ;
  • Stephen Gregory a signalé le problème lié à cmp en Python 3 ;
  • Matthew Shultz m'a signalé un lien mort
  • Lokesh Kumar Makani m'a signalé quelques liens morts et quelques modifications dans les messages d'erreur ;
  • Ishwar Bhat a corrigé ma description du dernier théorème de Fermat ;
  • Brian McGhie a suggéré une clarification ;
  • Andrea Zanella a traduit le livre en italien, et a envoyé de nombreuses corrections pendant ce temps ;
  • Beaucoup, beaucoup de remerciements à Melissa Lewis et Luciano Ramalho pour les excellents commentaires et suggestions pour la 2e édition ;
  • Remerciements à Harry Percival de PythonAnywhere pour aider les gens à commencer à exécuter Python dans un navigateur ;
  • Xavier Van Aubel a fait plusieurs corrections utiles dans la 2e édition.

précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Licence Creative Commons
Le contenu de cet article est rédigé par Allen B. Downey et est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé.
Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright © 2016 Developpez.com.