Introduction

Langage machine, langage de programmation

  • Ordinateur = machine effectuant des opérations simples sur des séquences de signaux électriques :

    • deux états seulement : ex. un potentiel électrique maximum ou minimum,

    • logique du type « tout ou rien »,

    • suites de nombres ne prenant jamais que les deux valeurs 0 et 1 (= système binaire),

    • un ordinateur en interne 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 :

      • données que l'on souhaite traiter (les textes, les images, les sons, les nombres, etc.),

      • programmes (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 :

    • longue suite de 1 et de 0 (les « bits ») souvent traités par groupes de 8 (les « octets »), 16, 32, ou même 64,

    • « langage machine » incompréhensible pour nous,

    • utilisation de systèmes de traduction automatiques pour « parler » à l'ordinateur :

      • convertir en nombres binaires des suites de caractères formant des mots-clés (anglais en général),

      • basés sur une série de conventions,

      • interpréteur ou bien compilateur, suivant la méthode utilisée pour effectuer la traduction. On appelle langage de programmation un ensemble de mots-clés (choisis arbitrairement) associé à un ensemble de règles très précises indiquant comment on peut 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.

  • Python est 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 :

    • plus facile à écrire,

    • plus rapide à écrire,

    • 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 « bugs ») sont grandement facilitées,

    • portable : 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.

  • « 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 conscients 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éçus parfois en constatant que cette confiance n'est pas toujours méritée.

  • Restez donc vigilants, 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 hacker digne de confiance n'a rien à cacher.

Édition du code source, interprétation

  • Un programme écrit dans un langage de programmation quelconque = 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.)

    • le texte ainsi produit est ce que nous appellerons désormais un « code source »,

    • le code source doit être traduit en une suite d'instructions binaires directement compréhensibles par la machine : le « code objet ».

  • Python :

    • traduction = un interpréteur + un pré-compilateur,

    • technique hybride visant à exploiter au maximum les avantages de l'interprétation et de la compilation, sans inconvénients,

    • programmes extrêmement performants avec Python (même si 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

  • Programmation => très complexe

  • Programmation + Humain => nombreuses erreurs = « bugs » (ou « bogues », en Français)

  • L'ensemble des techniques que l'on met en œuvre pour les détecter et les corriger = « debug » (ou « débogage »)

  • Il existe trois types d'erreurs assez différentes...

Erreurs de syntaxe : Python ne peut exécuter un programme que si sa syntaxe est parfaitement correcte !

  • Sinon le processus s'arrête + message d'erreur !

  • Syntaxe = règles que les auteurs du langage ont établies pour la structure du programme. Tout langage comporte sa syntaxe. Exemple de la langue française : une phrase doit toujours commencer par une majuscule et se terminer par un point.

  • Humain : petites fautes de syntaxe = peu importance, on comprend le texte.

  • Ordinateur : la moindre erreur de syntaxe produit invariablement un arrêt de fonctionnement (un « plantage ») + message d'erreur !

  • 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 -> respecter scrupuleusement la syntaxe du langage.

  • Tous les détails ont de l'importance :

    • faire très attention à la casse (c'est-à-dire l'emploi des majuscules et des minuscules),

    • à la ponctuation.

  • 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 le C++), il vous faudrait re-compiler l'intégralité du programme après chaque modification, aussi minime soit-elle.

Erreurs sémantiques ou erreur de logique : le programme s'exécute parfaitement (aucun message d'erreur), mais le résultat n'est pas celui que vous attendiez : vous obtenez autre chose !

  • 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 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 ou erreur en cours d'exécution (Run-time error) : apparaissent 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 = quelque chose d'exceptionnel (et de malencontreux) s'est produit.

  • Vous rencontrerez davantage ce type d'erreurs lorsque vous programmerez des projets de plus en plus volumineux.

Recherche des erreurs et expérimentation

  • Compétence à acquérir => déboguer efficacement un programme

    <=> activité intellectuelle parfois énervante mais toujours très riche

  • Il faut faire preuve de beaucoup de perspicacité :

    • comme une enquête policière :

      • examiner un ensemble de faits,

      • émettre des hypothèses explicatives pour reconstituer les processus et les événements qui ont logiquement entraîné les résultats que vous constatez.

    • 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 (prédiction se vérifie : progression ; prédiction fausse : émettre une nouvelle hypothèse)

         « Lorsque vous avez éliminé l'impossible, ce qui reste, même si c'est improbable, doit être la vérité » Sherlock Holmes (A. Conan Doyle, Le signe des quatre)

  • Pour certaines personnes, « programmer » et « déboguer » signifient exactement la même chose !

    • Activité de programmation = 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.

Attention : lorsque vous démarrerez un projet de programmation d'une certaine importance, il faudra 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.

AccueilProgrammation en Python > Intro< PrécédentSuivant >