IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Apprendre à programmer avec Python

Apprendre programmer avec Python


prcdentsommairesuivant

Introduction

A l'origine, les prsentes notes ont t rdiges l'intention des lves qui suivent le cours Programmation et langages de l'option Sciences& informatique au 3e degr de transition de l'enseignement secondaire belge. Il s'agit d'un texte exprimental qui s'inspire largement de plusieurs autres documents publis sous licence libre sur l'internet.

Nous proposons dans ces notes une dmarche d'apprentissage non linaire qui est trs certainement critiquable. Nous sommes conscients qu'elle apparatra un peu chaotique aux yeux de certains puristes, mais nous l'avons voulue ainsi parce que nous sommes convaincus qu'il existe de nombreuses manires d'apprendre (pas seulement la programmation, d'ailleurs), et qu'il faut accepter d'emble ce fait tabli que des individus diffrents n'assimilent pas les mmes concepts dans le mme ordre. Nous avons donc cherch avant tout susciter l'intrt et ouvrir un maximum de portes, en nous efforant tout de mme de respecter les principes directeurs suivants :

  • L'apprentissage que nous visons doit tre adapt au niveau de comprhension et aux connaissances gnrales d'un lve moyen. Nous nous refusons d'laborer un cours qui soit rserv une lite de petits gnies. Dans la mme optique, notre ambition reste gnraliste : nous voulons mettre en vidence les invariants de la programmation et de l'informatique, sans poursuivre une spcialisation quelconque.
  • Les outils utiliss au cours de l'apprentissage doivent tre modernes et performants, mais il faut aussi que l'lve puisse se les procurer en toute lgalit pour son usage personnel. Toute notre dmarche d'apprentissage repose en effet sur l'ide que l'lve devra trs tt mettre en chantier des ralisations personnelles qu'il pourra dvelopper et exploiter sa guise.
  • L'lve qui apprend doit pouvoir rapidement raliser de petites applications graphiques.
    Les tudiants auxquels nous nous adressons sont en effet fort jeunes (en thorie, ils sont peine arrivs l'ge ou l'on commence pouvoir faire des abstractions). Dans ce cours, nous avons pris le parti d'aborder trs tt la programmation d'une interface graphique, avant mme d'avoir prsent l'ensemble des structures de donnes disponibles, parce que nous observons que les jeunes qui arrivent aujourd'hui dans nos classes baignent dj dans une culture informatique base de fentres et autres objets graphiques interactifs. S'ils choisissent d'apprendre la programmation, ils sont forcment impatients de crer par eux-mmes des applications (peut-tre trs simples) o l'aspect graphique est dj bien prsent. Nous avons donc choisi cette approche un peu inhabituelle afin de permettre nos lves de se lancer trs tt dans de petits projets personnels attrayants, par lesquels ils puissent se sentir valoriss. Nous leur imposerons cependant de raliser leurs projets sans faire appel l'un ou l'autre de ces environnements de programmation sophistiqus qui crivent automatiquement de nombreuses lignes de code, parce que nous ne voulons pas non plus masquer la complexit sous-jacente.

Certains nous reprocheront que notre dmarche n'est pas suffisamment centre sur l'algorithmique pure et dure. Nous pensons qu'une telle approche n'est gure adapte aux jeunes, pour les raisons dj voques ci-dessus. Nous pensons galement qu'elle est moins primordiale que par le pass. Il semble en effet que l'apprentissage de la programmation moderne par objets ncessite plutt une mise en contact aussi prcoce que possible de l'tudiant avec des objets et des bibliothques de classes prexistants. Ainsi il apprend trs tt raisonner en termes d'interactions entre objets, plutt qu'en termes de procdures, et cela l'autorise assez vite tirer profit de concepts avancs, tels que l'hritage et le polymorphisme.

Nous avons par ailleurs accord une place assez importante la manipulation de diffrents types de structures de donnes, car nous estimons que c'est la rflexion sur les donnes qui doit rester la colonne vertbrale de tout dveloppement logiciel.

Choix d'un premier langage de programmation

Il existe un trs grand nombre de langages de programmation, chacun avec ses avantages et ses inconvnients. L'idal serait certainement d'en utiliser plusieurs, et nous ne pouvons qu'encourager les professeurs prsenter de temps autre quelques exemples tirs de langages diffrents. Il faut cependant bien admettre que nous devons avant tout viser l'acquisition de bases solides, et que le temps dont nous disposons est limit. Dans cette optique, il nous semble raisonnable de n'utiliser d'abord qu'un seul langage, au moins pendant la premire anne d'tudes.

Mais quel langage allons-nous choisir pour commencer ?

Lorsque nous avons commenc rflchir cette question, durant notre prparation d'un curriculum pour la nouvelle option Sciences & Informatique, nous avions personnellement accumul une assez longue exprience de la programmation sous Visual Basic (Micro$oft) et sous Clarion (Top$peed). Nous avions galement expriment quelque peu sous Delphi (Borl@nd). Il tait donc naturel que nous pensions d'abord exploiter l'un ou l'autre de ces langages (avec une nette prfrence pour Clarion, qui reste malheureusement peu connu).

Si nous souhaitons les utiliser comme outils de base pour un apprentissage gnral de la programmation, ces langages prsentent toutefois deux gros inconvnients :

  • Ils sont lis des environnements de programmation (c'est--dire des logiciels) propritaires. Cela signifie donc, non seulement que l'institution scolaire dsireuse de les utiliser devrait acheter une licence de ces logiciels pour chaque poste de travail (ce qui risque de se rvler assez coteux), mais surtout que les lves souhaitant utiliser leurs comptences de programmation ailleurs qu' l'cole seraient implicitement forcs d'en acqurir eux aussi des licences, ce que nous ne pouvons pas accepter.
  • Ce sont des langages spcifiquement lis au seul systme d'exploitation Windows. Ils ne sont pas portables sur d'autres systmes (Unix, MacOS, etc.). Cela ne cadre pas avec notre projet pdagogique qui ambitionne d'inculquer une formation gnrale (et donc diversifie) dans laquelle les invariants de l'informatique seraient autant que possible mis en vidence.

Nous avons alors dcid d'examiner l'offre alternative, c'est--dire celle qui est propose gratuitement dans la mouvance de l'informatique libre1. Ce que nous avons trouv nous a enthousiasms : non seulement il existe dans le monde de l'Open Source des interprteurs et des compilateurs gratuits pour toute une srie de langages, mais le vritable cadeau consiste dans le fait que ces langages sont modernes, performants, portables (c'est--dire utilisables sur diffrents systmes d'exploitation tels que Windows, Linux, MacOS ...), et fort bien documents.

Le langage dominant y est sans conteste C/C++. Ce langage s'impose comme une rfrence absolue, et tout informaticien srieux doit s'y frotter tt ou tard. Il est malheureusement trs rbarbatif et compliqu, trop proche de la machine. Sa syntaxe est peu lisible et fort contraignante. La mise au point d'un gros logiciel crit en C/C++ est longue et pnible. (Les mmes remarques valent aussi dans une large mesure pour le langage Java).

D'autre part, la pratique moderne de ce langage fait abondamment appel des gnrateurs d'applications et autres outils d'assistance trs labors tels C++Builder, Kdevelop, etc. Ces environnements de programmation peuvent certainement se rvler trs efficaces entre les mains de programmeurs expriments, mais ils proposent d'emble beaucoup trop d'outils complexes, et ils prsupposent de la part de l'utilisateur des connaissances qu'un dbutant ne matrise videmment pas encore. Ce seront donc aux yeux de celui-ci de vritables usines gaz qui risquent de lui masquer les mcanismes de base du langage lui-mme. Nous laisserons donc le C/C++ pour plus tard.

Pour nos dbuts dans l'tude de la programmation, il nous semble prfrable d'utiliser un langage de plus haut niveau, moins contraignant, la syntaxe plus lisible. Veuillez aussi consulter ce sujet la prface de How to think like a computer scientist , par Jeffrey Elkner (voir page 358).

Aprs avoir successivement examin et expriment quelque peu les langages Perl et Tcl/Tk , nous avons finalement dcid d'adopter Python, langage trs moderne la popularit grandissante.

1 Un logiciel libre (Free Software) est avant tout un logiciel dont le code source est accessible tous (Open source). Souvent gratuit (ou presque), copiable et modifiable librement au gr de son acqureur, il est gnralement le produit de la collaboration bnvole de centaines de dveloppeurs enthousiastes disperss dans le monde entier. Son code source tant "pluch" par de trs nombreux spcialistes (tudiants et professeurs universitaires), un logiciel libre se caractrise la plupart du temps par un trs haut niveau de qualit technique. Le plus clbre des logiciels libres est le systme d'exploitation GNU/Linux, dont la popularit ne cesse de s'accrotre de jour en jour.

Prsentation du langage Python, par Stfane Fermigier.

Python est un langage portable, dynamique, extensible, gratuit, qui permet (sans l'imposer) une approche modulaire et oriente objet de la programmation. Python est dvelopp depuis 1989 par Guido van Rossum et de nombreux contributeurs bnvoles.

Caractristiques du langage

Dtaillons un peu les principales caractristiques de Python, plus prcisment, du langage et de ses deux implantations actuelles:

  • Python est portable, non seulement sur les diffrentes variantes d'Unix, mais aussi sur les OS propritaires: MacOS, BeOS, NeXTStep, MS-DOS et les diffrentes variantes de Windows. Un nouveau compilateur, baptis JPython, est crit en Java et gnre du bytecode Java.
  • Python est gratuit, mais on peut l'utiliser sans restriction dans des projets commerciaux.
  • Python convient aussi bien des scripts d'une dizaine de lignes qu' des projets complexes de plusieurs dizaines de milliers de lignes.
  • La syntaxe de Python est trs simple et, combine des types de donnes volus (listes, dictionnaires,...), conduit des programmes la fois trs compacts et trs lisibles. A fonctionnalits gales, un programme Python (abondamment comment et prsent selon les canons standards) est souvent de 3 5 fois plus court qu'un programme C ou C++ (ou mme Java) quivalent, ce qui reprsente en gnral un temps de dveloppement de 5 10 fois plus court et une facilit de maintenance largement accrue.
  • Python gre ses ressources (mmoire, descripteurs de fichiers...) sans intervention du programmeur, par un mcanisme de comptage de rfrences (proche, mais diffrent, d'un garbage collector).
  • Il n'y a pas de pointeurs explicites en Python.
  • Python est (optionnellement) multi-thread.
  • Python est orient-objet. Il supporte l'hritage multiple et la surcharge des oprateurs. Dans son modle objets, et en reprenant la terminologie de C++, toutes les mthodes sont virtuelles.
  • Python intgre, comme Java ou les versions rcentes de C++, un systme d'exceptions, qui permettent de simplifier considrablement la gestion des erreurs.
  • Python est dynamique (l'interprteur peut valuer des chanes de caractres reprsentant des expressions ou des instructions Python), orthogonal (un petit nombre de concepts suffit engendrer des constructions trs riches), rflectif (il supporte la mtaprogrammation, par exemple la capacit pour un objet de se rajouter ou de s'enlever des attributs ou des mthodes, ou mme de changer de classe en cours d'excution) et introspectif (un grand nombre d'outils de dveloppement, comme le debugger ou le profiler, sont implants en Python lui-mme).
  • Comme Scheme ou SmallTalk, Python est dynamiquement typ. Tout objet manipulable par le programmeur possde un type bien dfini l'excution, qui n'a pas besoin d'tre dclar l'avance.
  • Python possde actuellement deux implmentations. L'une, interprte, dans laquelle les programmes Python sont compils en instructions portables, puis excuts par une machine virtuelle (comme pour Java, avec une diffrence importante: Java tant statiquement typ, il est beaucoup plus facile d'acclrer l'excution d'un programme Java que d'un programme Python). L'autre gnre directement du bytecode Java.
  • Python est extensible : comme Tcl ou Guile, on peut facilement l'interfacer avec des bibliothques C existantes. On peut aussi s'en servir comme d'un langage d'extension pour des systmes logiciels complexes.
  • La bibliothque standard de Python, et les paquetages contribus, donnent accs une grande varit de services : chanes de caractres et expressions rgulires, services UNIX standards (fichiers, pipes, signaux, sockets, threads...), protocoles Internet (Web, News, FTP, CGI, HTML...), persistance et bases de donnes, interfaces graphiques.
  • Python est un langage qui continue voluer, soutenu par une communaut d'utilisateurs enthousiastes et responsables, dont la plupart sont des supporters du logiciel libre. Paralllement l'interprteur principal, crit en C et maintenu par le crateur du langage, un deuxime interprteur, crit en Java, est en cours de dveloppement.
  • Enfin, Python est un langage de choix pour traiter le XML.

Stfane Fermigier est le prsident de l'AFUL (Association Francophone des Utilisateurs de Linux et des logiciels libres). Ce texte est extrait d'un article paru dans le magazine Programmez! en dcembre 1998. Il est galement disponible sur http://www.linux-center.org/articles/9812/python.html)

Plusieurs versions diffrentes ?

Comme cela a t voqu dans le texte ci-dessus, Python continue voluer sans cesse. Mais cette volution ne vise qu' amliorer ou perfectionner le produit. De ce fait, vous ne devez pas craindre de devoir tt ou tard modifier tous vos programmes afin de les adapter une nouvelle version qui serait devenue incompatible avec les prcdentes. Les exemples de ce livre ont t raliss les uns aprs les autres sur une priode de temps relativement longue : certains ont t dvelopps sous Python 1.5.2, puis d'autres sous Python 1.6, Python 2.0, Python 2.1, Python 2.2 et enfin Python 2.3.
Tous continuent cependant fonctionner sans problme sous cette dernire version, et ils continueront certainement fonctionner sans modification majeure sur les versions futures.
Installez donc sur votre systme la dernire version disponible, et amusez-vous bien !

Distribution de Python - Bibliographie

Les diffrentes versions de Python (pour Windows, Unix, etc.), son tutoriel original, son manuel de rfrence, la documentation des bibliothques de fonctions, etc. sont disponibles en tlchargement gratuit depuis l'internet, partir du site web officiel : http://www.python.org

Il existe galement de trs bons ouvrages imprims concernant Python. Si la plupart d'entre eux n'existent encore qu'en version anglaise, on peut cependant dj se procurer en traduction franaise les manuels ci-aprs :

  • Python en concentr, par Alex Martelli, traduction d'ric Jacoboni, Editions O'Reilly, Paris, 2004, 645 p., ISBN 2-84177-290-X. C'est le premier ouvrage de rfrence vritable dit en langue franaise. Une mine de renseignements essentielle.
  • Introduction Python, par Mark Lutz & David Ascher, traduction de Sbastien Tanguy, Olivier Berger & Jrme Kalifa, Editions O'Reilly, Paris, 2000, 385 p., ISBN 2-84177-089-3. Cet ouvrage est une excellente initiation Python pour ceux qui pratiquent dj d'autres langages.
  • L'intro Python, par Ivan Van Laningham, traduction de Denis Frre, Karine Cottereaux et Nol Renard, Editions CampusPress, Paris, 2000, 484 p., ISBN 2-7440-0946-6
  • Python prcis & concis (il s'agit d'un petit aide-mmoire bien pratique), par Mark Lutz, traduction de James Gurin, Editions O'Reilly, Paris, 2000, 80 p., ISBN 2-84177-111-3

En langue anglaise, le choix est videmment beaucoup plus vaste. Nous apprcions personnellement beaucoup Python : How to program, par Deitel, Liperi & Wiedermann, Prentice Hall, Upper Saddle River - NJ 07458, 2002, 1300 p., ISBN 0-13-092361-3 , trs complet, trs clair, agrable lire et qui utilise une mthodologie prouve, Core Python programming, par Wesley J. Chun, Prentice Hall, 2001, 770 p., ISBN 0-13-026036-3 dont les explications sont limpides, et Learn to program using Python, par Alan Gauld, Addison-Wesley, Reading, MA, 2001, 270 p., ISBN 0-201-70938-4 , qui est un trs bon ouvrage pour dbutants.

Pour aller plus loin, notamment dans l'utilisation de la bibliothque graphique Tkinter, on pourra utilement consulter Python and Tkinter Programming, par John E. Grayson, Manning publications co., Greenwich (USA), 2000, 658 p., ISBN 1-884777-81-3 , et surtout l'incontournable Programming Python (second edition) de Mark Lutz, Editions O'Reilly, Paris, 2001, 1255 p., ISBN 0-596-00085-5, qui est une extraordinaire mine de renseignements sur de multiples aspects de la programmation moderne (sur tous systmes).

Si vous savez dj bien programmer, et que vous souhaiter progresser encore en utilisant les concepts les plus avancs de l'algorithmique Pythonienne, procurez vous Python cookbook, par Alex Martelli et David Ascher, Editions O'Reilly, Paris, 2002, 575 p., ISBN 0-596-00167-3 , dont les recettes sont savoureuses.

Si vous souhaitez plus particulirement exploiter aux mieux les ressources lies au systme d'exploitation Windows, Python Programming on Win32, par Mark Hammond & Andy Robinson, Editions O'Reilly, Paris, 2000, 654 p., ISBN 1-56592-621-8 est un ouvrage prcieux.

Rfrence galement fort utile, la Python Standard Library de Fredrik Lundh, Editions O'Reilly, Paris, 2001, 282 p., ISBN 0-596-00096-0

Pour le professeur qui souhaite utiliser cet ouvrage comme support de cours

Nous souhaitons avec ces notes ouvrir un maximum de portes. A notre niveau d'tudes, il nous parat important de montrer que la programmation d'un ordinateur est un vaste univers de concepts et de mthodes, dans lequel chacun peut trouver son domaine de prdilection. Nous ne pensons pas que tous nos tudiants doivent apprendre exactement les mmes choses. Nous voudrions plutt qu'ils arrivent dvelopper chacun des comptences quelque peu diffrentes, qui leur permettent de se valoriser leurs propres yeux ainsi qu' ceux de leurs condisciples, et galement d'apporter leur contribution spcifique lorsqu'on leur proposera de collaborer des travaux d'envergure.

De toute manire, notre proccupation primordiale doit tre d'arriver susciter l'intrt, ce qui est loin d'tre acquis d'avance pour un sujet aussi ardu que la programmation d'un ordinateur. Nous ne voulons pas feindre de croire que nos jeunes lves vont se passionner d'emble pour la construction de beaux algorithmes. Nous sommes plutt convaincus qu'un certain intrt ne pourra durablement s'installer qu' partir du moment o ils commenceront raliser qu'ils sont devenus capables de dvelopper un projet personnel original, dans une certaine autonomie.

Ce sont ces considrations qui nous ont amens dvelopper une structure de cours que certains trouveront peut-tre un peu chaotique. Le principal fil conducteur en est l'excellent How to think like a computer scientist , mais nous l'avons un peu clat pour y insrer toute une srie d'lments concernant la gestion des entres/sorties, et en particulier l'interface graphique Tkinter. Nous souhaiterions en effet que les lves puissent dj raliser l'une ou l'autre petite application graphique ds la fin de leur premire anne d'tudes.

Trs concrtement, cela signifie que nous pensons pouvoir explorer les huit premiers chapitres de ces notes durant la premire anne de cours. Cela suppose que l'on aborde d'abord toute une srie de concepts importants (types de donnes, variables, instructions de contrle du flux, fonctions et boucles) d'une manire assez rapide, sans trop se proccuper de ce que chaque concept soit parfaitement compris avant de passer au suivant, en essayant plutt d'inculquer le got de la recherche personnelle et de l'exprimentation. Il sera souvent plus efficace de rexpliquer les notions et les mcanismes essentiels en situation, dans des contextes varis.

Dans notre esprit, c'est surtout en seconde anne que l'on cherchera structurer les connaissances acquises, en les approfondissant. Les algorithmes seront davantage dcortiqus et comments. Les projets, cahiers des charges et mthodes d'analyse seront discuts en concertation. On exigera la tenue rgulire d'un cahier de notes et la rdaction de rapports techniques pour certains travaux.

L'objectif ultime sera pour chaque lve de raliser un projet de programmation original d'une certaine importance. On s'efforcera donc de boucler l'tude thorique des concepts essentiels suffisamment tt dans l'anne scolaire, afin que chacun puisse disposer du temps ncessaire.

Il faut bien comprendre que les nombreuses informations fournies dans ces notes concernant une srie de domaines particuliers (gestion des interfaces graphiques, des communications, des bases de donnes, etc.) sont matires facultatives. Ce sont seulement une srie de suggestions et de repres que nous avons inclus pour aider les tudiants choisir et commencer leur projet personnel de fin d'tudes. Nous ne cherchons en aucune manire former des spcialistes d'un certain langage ou d'un certain domaine technique : nous voulons simplement donner un petit aperu des immenses possibilits qui s'offrent celui qui se donne la peine d'acqurir une comptence de programmeur.

Exemples du livre

Le code source des exemples de ce livre peut tre tlcharg partir du site de l'auteur :

http://www.ulg.ac.be/cifen/inforef/swi/python.htm

Remerciements

Ces notes sont pour une partie le rsultat d'un travail personnel, mais pour une autre - bien plus importante - la compilation d'informations et d'ides mises la disposition de tous par des professeurs et des chercheurs bnvoles. Comme dj signal plus haut, l'une de mes sources les plus importantes a t le cours de A.Downey, J.Elkner & C.Meyers : How to think like a computer scientist. Merci encore ces professeurs enthousiastes. J'avoue aussi m'tre largement inspir du tutoriel original crit par Guido van Rossum lui-mme (l'auteur principal de Python), ainsi que d'exemples et de documents divers manant de la (trs active) communaut des utilisateurs de Python. Il ne m'est malheureusement pas possible de prciser davantage les rfrences de tous ces textes, mais je voudrais que leurs auteurs soient assurs de toute ma reconnaissance.

Merci galement tous ceux qui oeuvrent au dveloppement de Python, de ses accessoires et de sa documentation, commencer par Guido van Rossum, bien sr, mais sans oublier non plus tous les autres (Il sont (mal)heureusement trop nombreux pour que je puisse les citer tous ici).

Merci encore mes collgues Freddy Klich, Christine Ghiot et David Carrera, professeurs l'Institut St. Jean-Berchmans de Lige, qui ont accept de se lancer dans l'aventure de ce nouveau cours avec leurs lves, et ont galement suggr de nombreuses amliorations. Un merci tout particulier Christophe Morvan, professeur l'IUT de Marne-la-Valle, pour ses avis prcieux et ses encouragements.

Grand merci aussi Florence Leroy, mon ditrice chez O'Reilly, qui a corrig mes incohrences et mes belgicismes avec une comptence sans faille.

Merci enfin mon pouse Suzel, pour sa patience et sa comprhension.


prcdentsommairesuivant

Licence Creative Commons
Le contenu de cet article est rédigé par Gérard Swinnen et est mis à disposition selon les termes de la Licence Creative Commons Attribution 3.0 non transposé.
Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright © 2013 Developpez.com.