Bonsoir les amis, je sais que vous m'avez attendu le samedi dernier par rapport à la suite du cours dans le cadre de notre objectif "One people, One program" ou" Une personne, un logiciel".Mais depuis le jeudi dernier (le 1mai) il y a une grande coupure du reseau internet suite à la tombé d'une forte pluie qui à fait tombé l'antenne locale de mon Fournisseur..
Alors Aujourd'hui nous allons faire deux cours en même temps pour rattrapper notre semaine perdue........
Ceci dit , on fera aujourdui le cour sur la démarche du programmeur comment doit-il se porter pour réaliser un programme, comment mettre en place sa méthodologie en rapport avec celle de la machine ? quelles types d'erreurs peut-il rencontré en codant ?
Alors Lisez bien cette partie car elle est l'une des parties les plus importantes pour la suite de notre formation.
La démarche du programmeur
Comme le sorcier, le programmeur compétent semble doté d’un pouvoir étrange qui lui permet de
transformer une machine en une autre, une machine à calculer en une machine à écrire ou à dessiner,par exemple, un peu à la manière d’un sorcier qui transformerait un prince charmant en grenouille, à
l’aide de quelques incantations mystérieuses entrées au clavier. Comme le sorcier, il est capable de
guérir une application apparemment malade, ou de jeter des sorts à d’autres, via l’Internet. Mais
comment cela est-il possible ?
Cela peut paraître paradoxal, mais comme nous l’avons déjà fait remarquer plus haut, le vrai maître
est en fait celui qui ne croit à aucune magie, à aucun don, à aucune intervention surnaturelle. Seule la
froide, l’implacable, l’inconfortable logique est de mise.
Le mode de pensée d’un programmeur combine des constructions intellectuelles complexes, similaires
à celles qu’accomplissent les mathématiciens, les ingénieurs et les scientifiques. Comme le
mathématicien, il utilise des langages formels pour décrire des raisonnements (ou algorithmes).
Comme l’ingénieur, il conçoit des dispositifs, il assemble des composants pour réaliser des mécanismes
et il évalue leurs performances. Comme le scientifique, il observe le comportement de systèmes
complexes, il crée des modèles, il teste des prédictions.
L’activité essentielle d’un programmeur consiste à résoudre des problèmes.
Il s’agit là d’une compétence de haut niveau, qui implique des capacités et des connaissances diverses :
être capable de (re)formuler un problème de plusieurs manières différentes, être capable d’imaginer
des solutions innovantes et efficaces, être capable d’exprimer ces solutions de manière claire et
complète. Comme nous l’avons déjà évoqué plus haut, il s’agira souvent de mettre en lumière les
implications concrètes d’une représentation mentale « magique », simpliste ou trop abstraite.
La programmation d’un ordinateur consiste en effet à « expliquer » en détail à une machine ce qu’elle
doit faire, en sachant d’emblée qu’elle ne peut pas véritablement « comprendre » un langage humain,
mais seulement effectuer un traitement automatique sur des séquences de caractères. Il s’agit la
plupart du temps de convertir un souhait exprimé à l’origine en termes « magiques », en un vrai
raisonnement parfaitement structuré et élucidé dans ses moindres détails, que l’on appelle un algorithme.
Considérons par exemple une suite de nombres fournis dans le désordre : 47, 19, 23, 15, 21, 36, 5, 12…
Comment devons-nous nous y prendre pour obtenir d’un ordinateur qu’il les remette dans l’ordre ?
Le souhait « magique » est de n’avoir qu’à cliquer sur un bouton, ou entrer une seule instruction au
clavier, pour qu’automatiquement les nombres se mettent en place. Mais le travail du
sorcier-programmeur est justement de créer cette « magie ». Pour y arriver, il devra décortiquer tout
ce qu’implique pour nous une telle opération de tri (au fait, existe-t-il une méthode unique pour cela,
ou bien y en a-t-il plusieurs ?), et en traduire toutes les étapes en une suite d’instructions simples,
telles que par exemple « comparer les deux premiers nombres, les échanger s’ils ne sont pas dans
l’ordre souhaité, recommencer avec le deuxième et le troisième, etc. ».
Si les instructions ainsi mises en lumière sont suffisamment simples, il pourra alors les encoder dans la
machine en respectant de manière très stricte un ensemble de conventions fixées à l’avance, que l’on
appelle un langage informatique. Pour « comprendre » celui-ci, la machine sera pourvue d’un
mécanisme qui décode ces instructions en associant à chaque « mot » du langage une action précise.
Ainsi seulement, la magie pourra s’accomplir.
Langage machine, langage de programmation
À strictement parler, un ordinateur n’est rien d’autre qu’une machine effectuant des opérations
simples sur des séquences de signaux électriques, lesquels sont conditionnés de manière à ne pouvoir
prendre que deux états seulement (par exemple un potentiel électrique maximum ou minimum). Ces
séquences de signaux obéissent à une logique du type « tout ou rien » et peuvent donc être considérés
conventionnellement comme des suites de nombres ne prenant jamais que les deux valeurs 0 et 1. Un
système numérique ainsi limité à deux chiffres est appelé système binaire.
Sachez dès à présent que dans son fonctionnement interne, un ordinateur est totalement incapable de
traiter autre chose que des nombres binaires. Toute information d’un autre type doit être convertie,
ou codée, en format binaire. Cela est vrai non seulement pour les données que l’on souhaite traiter (les
textes, les images, les sons, les nombres, etc.), mais aussi pour les programmes, c’est-à-dire les
séquences d’instructions que l’on va fournir à la machine pour lui dire ce qu’elle doit faire avec ces
données.
Le seul « langage » que l’ordinateur puisse véritablement « comprendre » est donc très éloigné de ce
que nous utilisons nous-mêmes. C’est une longue suite de 1 et de 0 (les « bits ») souvent traités par
groupes de 8 (les « octets »), 16, 32, ou même 64. Ce « langage machine » est évidemment presque
incompréhensible pour nous. Pour « parler » à un ordinateur, il nous faudra utiliser des systèmes de
traduction automatiques, capables de convertir en nombres binaires des suites de caractères formant
des mots-clés (anglais en général) qui seront plus significatifs pour nous.
Ces systèmes de traduction automatique seront établis sur la base de toute une série de conventions,
dont il existera évidemment de nombreuses variantes.
Le système de traduction proprement dit s’appellera interpréteur ou bien compilateur, suivant la
méthode utilisée pour effectuer la traduction. On appellera langage de programmation un ensemble de
mots-clés (choisis arbitrairement) associé à un ensemble de règles très précises indiquant comment
assembler ces mots pour former des « phrases » que l’interpréteur ou le compilateur puisse traduire
en langage machine (binaire).
Suivant son niveau d’abstraction, on pourra dire d’un langage qu’il est « de bas niveau » (ex : assembleur)
ou « de haut niveau » (ex : Pascal, Perl, Smalltalk, Scheme, Lisp...). Un langage de bas niveau est
constitué d’instructions très élémentaires, très « proches de la machine ». Un langage de haut niveau
comporte des instructions plus abstraites, plus « puissantes » (et donc plus « magiques »). Cela signifie
que chacune de ces instructions pourra être traduite par l’interpréteur ou le compilateur en un grand
nombre d’instructions machine élémentaires.
Le langage que vous avez allez apprendre en premier est Python. Il s’agit d’un langage de haut niveau,
dont la traduction en code binaire est complexe et prend donc toujours un certain temps. Cela
pourrait paraître un inconvénient. En fait, les avantages que présentent les langages de haut niveau
sont énormes : il est beaucoup plus facile d’écrire un programme dans un langage de haut niveau ;
l’écriture du programme prend donc beaucoup moins de temps ; la probabilité d’y faire des fautes est
nettement plus faible ; la maintenance (c’est-à-dire l’apport de modifications ultérieures) et la
recherche des erreurs (les « bogues ») sont grandement facilitées. De plus, un programme écrit dans
un langage de haut niveau sera souvent portable, c’est-à-dire que l’on pourra le faire fonctionner sans guère de modifications sur des machines ou des systèmes d’exploitation différents. Un programme
écrit dans un langage de bas niveau ne peut jamais fonctionner que sur un seul type de machine : pour
qu’une autre l’accepte, il faut le réécrire entièrement.
Dans ce que nous venons d’expliquer sommairement, vous aurez sans doute repéré au passage de
nombreuses « boîtes noires » : interpréteur, système d’exploitation, langage, instructions machine,
code binaire, etc. L’apprentissage de la programmation va vous permettre d’en entrouvrir
quelques-unes. Restez cependant conscient que vous n’arriverez pas à les décortiquer toutes. De
nombreux objets informatiques créés par d’autres resteront probablement « magiques » pour vous
pendant longtemps (à commencer par le langage de programmation lui-même, par exemple). Vous
devrez donc faire confiance à leurs auteurs, quitte à être déçu parfois en constatant que cette
confiance n’est pas toujours méritée. Restez donc vigilant, apprenez à vérifier, à vous documenter sans
cesse. Dans vos propres productions, soyez rigoureux et évitez à tout prix la « magie noire » (les
programmes pleins d’astuces tarabiscotées que vous êtes seul à comprendre) : un ******* digne de
confiance n’a rien à cacher.
Édition du code source – Interprétation
Le programme tel que nous l’écrivons dans un langage de programmation quelconque est à
strictement parler un simple texte. Pour rédiger ce texte, on peut faire appel à toutes sortes de
logiciels plus ou moins perfectionnés, à la condition qu’ils ne produisent que du texte brut, c’est-à-dire
sans mise en page particulière ni aucun attribut de style (pas de spécification de police, donc, pas de
gros titres, pas de gras, ni de souligné, ni d’italique, etc.)3.
Le texte ainsi produit est ce que nous appellerons désormais un code source.
Comme nous l’avons déjà évoqué plus haut, le code source doit être traduit en une suite d’instructions
binaires directement compréhensibles par la machine : le « code objet ». Dans le cas de Python, cette
traduction est prise en charge par un interpréteur assisté d’un pré-compilateur. Cette technique hybride
(également utilisée par le langage Java) vise à exploiter au maximum les avantages de l’interprétation
et de la compilation, tout en minimisant leurs inconvénients respectifs. Veuillez consulter un ouvrage
d’informatique générale si vous voulez en savoir davantage sur ces deux techniques.
Sachez simplement à ce sujet que vous pourrez réaliser des programmes extrêmement performants
avec Python, même s’il est indiscutable qu’un langage strictement compilé tel que le C peut toujours
faire mieux en termes de rapidité d’exécution.
Mise au point d’un programme – Recherche des erreurs (debug)
La programmation est une démarche très complexe, et comme c’est le cas dans toute activité humaine,
on y commet de nombreuses erreurs. Pour des raisons anecdotiques, les erreurs de programmation
s’appellent des « bugs » (ou « bogues », en Français)4, et l’ensemble des techniques que l’on met en
oeuvre pour les détecter et les corriger s’appelle « debug » (ou « débogage »).
3 Ces logiciels sont appelés des éditeurs de texte. Même s’ils proposent divers automatismes....
En fait, il peut exister dans un programme trois types d’erreurs assez différentes, et il convient que
vous appreniez à bien les distinguer.
Erreurs de syntaxe
Python ne peut exécuter un programme que si sa syntaxe est parfaitement correcte. Dans le cas
contraire, le processus s’arrête et vous obtenez un message d’erreur. Le terme syntaxe se réfère aux
règles que les auteurs du langage ont établies pour la structure du programme.
Tout langage comporte sa syntaxe. Dans la langue française, par exemple, une phrase doit toujours
commencer par une majuscule et se terminer par un point. ainsi cette phrase comporte deux erreurs
de syntaxe.
Dans les textes ordinaires, la présence de quelques petites fautes de syntaxe par-ci par-là n’a
généralement pas d’importance. Il peut même arriver (en poésie, par exemple), que des fautes de
syntaxe soient commises volontairement. Cela n’empêche pas que l’on puisse comprendre le texte.
Dans un programme d’ordinateur, par contre, la moindre erreur de syntaxe produit invariablement un
arrêt de fonctionnement (un « plantage ») ainsi que l’affichage d’un message d’erreur. Au cours des
premières semaines de votre carrière de programmeur, vous passerez certainement pas mal de temps
à rechercher vos erreurs de syntaxe. Avec de l’expérience, vous en commettrez beaucoup moins.
Gardez à l’esprit que les mots et les symboles utilisés n’ont aucune signification en eux-mêmes : ce ne
sont que des suites de codes destinés à être convertis automatiquement en nombres binaires. Par
conséquent, il vous faudra être très attentifs à respecter scrupuleusement la syntaxe du langage.
Finalement, souvenez-vous que tous les détails ont de l’importance. Il faudra en particulier faire très
attention à la casse (c’est-à-dire l’emploi des majuscules et des minuscules) et à la ponctuation. Toute
erreur à ce niveau (même minime en apparence, tel l’oubli d’une virgule, par exemple) peut modifier
considérablement la signification du code, et donc le déroulement du programme.
Il est heureux que vous fassiez vos débuts en programmation avec un langage interprété tel que
Python. La recherche des erreurs y est facile et rapide. Avec les langages compilés (tel C++), il vous
faudrait recompiler l’intégralité du programme après chaque modification, aussi minime soit-elle.
Erreurs sémantiques
Le second type d’erreur est l’erreur sémantique ou erreur de logique. S’il existe une erreur de ce type
dans un de vos programmes, celui-ci s’exécute parfaitement, en ce sens que vous n’obtenez aucun
message d’erreur, mais le résultat n’est pas celui que vous attendiez : vous obtenez autre chose.
En réalité, le programme fait exactement ce que vous lui avez dit de faire. Le problème est que ce que
vous lui avez dit de faire ne correspond pas à ce que vous vouliez qu’il fasse. La séquence
4 bug est à l’origine un terme anglais servant à désigner de petits insectes gênants, tels les punaises. Les
premiers ordinateurs fonctionnaient à l’aide de « lampes » radios qui nécessitaient des tensions électriques
assez élevées. Il est arrivé à plusieurs reprises que des petits insectes s’introduisent dans cette circuiterie
complexe et se fassent électrocuter, leurs cadavres calcinés provoquant alors des court-circuits et donc des
pannes incompréhensibles.
Le mot français « bogue » a été choisi par homonymie approximative. Il désigne la coque épineuse de la
châtaigne.
d’instructions de votre programme ne correspond pas à l’objectif poursuivi. La sémantique (la logique)
est incorrecte.
Rechercher des fautes de logique peut être une tâche ardue. C’est là que se révélera votre aptitude à
démonter toute forme résiduelle de « pensée magique » dans vos raisonnements. Il vous faudra
analyser patiemment ce qui sort de la machine et tâcher de vous représenter une par une les
opérations qu’elle a effectuées, à la suite de chaque instruction.
Erreurs à l’exécution
Le troisième type d’erreur est l’erreur en cours d’exécution (Run-time error), qui apparaît seulement
lorsque votre programme fonctionne déjà, mais que des circonstances particulières se présentent (par
exemple, votre programme essaie de lire un fichier qui n’existe plus). Ces erreurs sont également
appelées des exceptions, parce qu’elles indiquent en général que quelque chose d’exceptionnel (et de
malencontreux) s’est produit. Vous rencontrerez ce type d’erreurs lorsque vous programmerez des
projets de plus en plus volumineux, et vous apprendrez plus loin dans ce cours qu’il existe des
techniques particulières pour les gérer.
Recherche des erreurs et expérimentation
L’une des compétences les plus importantes à acquérir au cours de votre apprentissage est celle qui
consiste à déboguer efficacement un programme. Il s’agit d’une activité intellectuelle parfois énervante
mais toujours très riche, dans laquelle il faut faire montre de beaucoup de perspicacité.
Ce travail ressemble par bien des aspects à une enquête policière. Vous examinez un ensemble de faits,
et vous devez émettre des hypothèses explicatives pour reconstituer les processus et les événements
qui ont logiquement entraîné les résultats que vous constatez.
Cette activité s’apparente aussi au travail expérimental en sciences. Vous vous faites une première
idée de ce qui ne va pas, vous modifiez votre programme et vous essayez à nouveau. Vous avez émis
une hypothèse, qui vous permet de prédire ce que devra donner la modification. Si la prédiction se
vérifie, alors vous avez progressé d’un pas sur la voie d’un programme qui fonctionne. Si la prédiction
se révèle fausse, alors il vous faut émettre une nouvelle hypothèse. Comme l’a bien dit Sherlock
Holmes : « Lorsque vous avez éliminé l’impossible, ce qui reste, même si c’est improbable, doit être la
vérité » (A. Conan Doyle, Le signe des quatre).
Pour certaines personnes, « programmer » et « déboguer » signifient exactement la même chose. Ce
qu’elles veulent dire par là est que l’activité de programmation consiste en fait à modifier, à corriger
sans cesse un même programme, jusqu’à ce qu’il se comporte finalement comme vous le vouliez. L’idée
est que la construction d’un programme commence toujours par une ébauche qui fait déjà quelque
chose (et qui est donc déjà déboguée), à laquelle on ajoute couche par couche de petites modifications,
en corrigeant au fur et à mesure les erreurs, afin d’avoir de toute façon à chaque étape du processus
un programme qui fonctionne.
Par exemple, vous savez que Linux est un système d’exploitation (et donc un gros logiciel) qui
comporte des milliers de lignes de code. Au départ, cependant, cela a commencé par un petit
programme simple que Linus Torvalds avait développé pour tester les particularités du processeur InRecherche
des erreurs et expérimentation 9
tel 80386. D’après Larry Greenfield (« The Linux user’s guide », beta version 1) : « L’un des premiers
projets de Linus était un programme destiné à convertir une chaîne de caractères AAAA en BBBB. C’est
cela qui plus tard finit par devenir Linux ! ».
Ce qui précède ne signifie pas que nous voulions vous pousser à programmer par approximations
successives, à partir d’une vague idée. Lorsque vous démarrerez un projet de programmation d’une
certaine importance, il faudra au contraire vous efforcer d’établir le mieux possible un cahier des
charges détaillé, lequel s’appuiera sur un plan solidement construit pour l’application envisagée.
Diverses méthodes existent pour effectuer cette tâche d’analyse, mais leur étude sort du cadre de ces
notes. Nous vous présenterons cependant plus loin quelques idées de base.
Toujours pour les questions je suis disponible .Laissez-les en commentaires
A bientôt .......
Jeu 10 Aoû - 10:16 par thebeststudent
» probleme avec les clavier de mon ordi
Ven 10 Fév - 10:25 par Luc lavinasse
» SURFEZ ILLIMITES AVEC UC WEB
Mar 6 Déc - 7:42 par Yannlagou
» Internet gratuit
Mar 6 Déc - 6:28 par Yannlagou
» Configuration Orange ci FinchVPN
Lun 25 Juil - 9:45 par Hamed84
» Keys, clefs, serial, norton, kasperky, avg, tune up utilities final 2012 By SEB
Ven 22 Juil - 16:36 par Hamed84
» finchvpn moov
Ven 22 Juil - 15:45 par Hamed84
» Configuration
Lun 18 Juil - 16:57 par Hamed84
» 30.000 sms de bienvenue
Sam 19 Mar - 7:11 par Jeanpbul