Leçon n° 1 : la programmation

 

Qu’est-ce que programmer ?

La programmation tient à la fois de l’art et de la technique, elle peut être facile ou complexe ; pour le néophyte, la programmation relève souvent de la magie : aussi est-ce une idée fort répandue que la maîtrise de ce savoir-faire fait la différence entre l’utilisateur expérimenté d’un logiciel et l’informaticien. De nombreux utilisateurs chevronnés d’un traitement de texte craignent, par exemple, de se lancer dans l’apprentissage de la programmation en pensant qu’il s’agit là d’un monde qui leur est inaccessible. L’ambition de ce livre est de démontrer qu’ils ont tort et que la programmation, abordée en douceur et avec pédagogie, n’est pas l’apanage des professionnels de l’informatique ; en effet, l’utilisateur lambda, s’il connaît bien son logiciel et maîtrise les bases de la logique, peut apprendre aisément à programmer. Cette entreprise est à la portée de tous et cet ouvrage prétend démythifier la programmation, en montrant tout d’abord que cette discipline de l’informatique est basée sur des techniques que chacun utilise dans la vie courante ce qui signifie que, comme Monsieur Jourdain faisait de la prose sans le savoir, vous avez déjà programmé, même si vous l’ignorez.

Nous définirons tout d’abord la programmation comme l’art d’écrire des programmes et nous dirons qu’un programme est une suite d’instructions. Quand vous écrivez une suite d’instructions, vous rédigez donc un programme. En fait, la réalisation en séquence d’une liste d’ordres est une opération assez banale dans la vie quotidienne et quand, par exemple, je réalise la recette de cuisine suivante, j’exécute un programme :

 

Mélanger un jaune d’œuf, une cuillère à café de moutarde, du vinaigre, du sel, du poivre et une cuillère à soupe d’huile d’olive

Tant que la quantité désirée n’est pas atteinte

Verser goutte à goutte de l’huile d’olive en fouettant la préparation

Si la mayonnaise n’est pas assez ferme

Rajouter un filet de citron

 

Vous voyez bien que vous avez déjà (avec plus ou moins de réussite…) programmé !

 

Plusieurs niveaux de programmation

De la même manière qu’il existe des recettes plus ou moins compliquées, il existe plusieurs niveaux de programmation. On peut considérer que le premier niveau de programmation dans Office consiste ni plus, ni moins, à paramétrer le logiciel afin qu’il réponde à nos exigences particulières. Ainsi, le simple fait de renseigner la boîte de dialogue des options de Word est une programmation basique dans la mesure où l’on va donner des instructions à Word pour qu’il se comporte de la manière souhaitée (par exemple, faut-il ignorer les mots en majuscules lors de la vérification de l’orthographe ?).

Le deuxième niveau est l’automatisation de certaines tâches par la mémorisation et la sauvegarde des opérations accomplies : il s’agit ici des macro-commandes  dont nous parlerons longuement.

Le troisième niveau est l’écriture de fonctions qui ne sont pas prises en compte dans Office. Imaginons que les formules de lisibilité (Flesch et Flesch-Kincaid) proposées par Word ne vous conviennent pas et que vous souhaitiez écrire vos propres formules, vous pouvez, à l’aide du langage de Word, écrire votre formule de calcul et faire en sorte que votre programme devienne une nouvelle fonction intégrée de Word.

Le dernier niveau est l’écriture de programmes complets prenant en charge une tâche complexe, comme par exemple un logiciel de facturation. Le programme prend en compte tous les aspects d’une application : l’interface utilisateur (les boîtes de dialogue et les formulaires de saisie), les calculs et les impressions.

 

Un programme consiste donc en une séquence d’instructions nécessaires pour atteindre un but. Avant d’écrire un programme, il faut toujours déterminer précisément le but à atteindre et chacun comprendra que plus l’objectif est complexe, plus le programme sera long et difficile à écrire.

 

Les langages de programmation

La recette de cuisine que nous avons écrite plus haut est rédigée en langage naturel (en l’occurrence le français) alors que les programmes informatiques s’écrivent à l’aide de langages de programmation. De la même manière que les langues vivantes sont censées obéir à des règles de grammaire, les langages de programmation suivent des règles que l’on nomme syntaxe . Cependant, les langues naturelles tolèrent assez bien les approximations et la phrase « La fille que je sors avec est canon » sera comprise par (presque) tout le monde. En revanche, les langages informatiques sont beaucoup plus puristes et pointilleux si bien que la moindre omission d’une virgule, d’une parenthèse ou bien d’un point sera immédiatement sanctionnée. Le caractère strict de la syntaxe d’un langage informatique est parfois mal vécu par les apprentis programmeurs ; il faut bien comprendre que l’ordinateur, à la différence d’un être humain, ne peut pas interpréter les mots qui manquent et les phrases mal construites. L’architecture binaire d’un ordinateur a pour conséquence qu’un programme est syntaxiquement correct ou incorrect et qu’il ne peut pas y avoir de juste milieu. Un programme peut donc planter, c’est-à-dire s’arrêter brutalement, parce que vous avez oublié un point-virgule dans le code (on appelle code l’ensemble des lignes d’un programme et encoder ou coder le fait de transcrire les actions à exécuter dans un langage informatique).

 

La syntaxe

Le code d’un programme est composé de phrases élémentaires appelées lignes d’instruction. Chaque ligne d’instruction doit exécuter une action comme afficher un message à l’écran, additionner deux nombres, lire une valeur stockée dans un fichier, etc. Chaque langage de programmation possède sa propre syntaxe, c’est-à-dire ses propres règles d’écriture. Les lignes d’un programme doivent être écrites en utilisant le vocabulaire du langage de programmation qui comprend un nombre de mots fini. Comme dans un langage naturel, il existe dans un langage de programmation plusieurs catégories de mots (verbe, adjectif, conjonction de coordination, etc.) et nous apprendrons, au fur et à mesure de notre progression, ces différents types de mots.

Tout comme un énoncé humain, une instruction peut être ambiguë et il convient à tout prix d’éviter les ambiguïtés. Ainsi le résultat de l’instruction qui effectue le calcul suivant :

x = 2 + 3 * 4

paraît incertain car on ne sait pas si x vaut 20 ou 14. La simple utilisation de parenthèses lèvera dans le cas présent l’ambiguïté (en fait, en l’espèce, la plupart des langages de programmation considèreront qu’il n’y a pas d’ambiguïté dans la mesure où l’opérateur de la multiplication est prioritaire sur celui de l’addition).

 

Quelques exemples de langages de programmation

Il existe presque autant de langages de programmation qu’il y a de langues parlées dans le monde ; tout comme les langues naturelles, certains langages de programmation sont plus « parlés » que d’autres et il existe, par exemple, plus de programmes écrits en Basic qu’en langage Eiffel.

Inventorier tous les langages de programmation serait une tâche longue, inutile et fastidieuse ; nous nous contenterons donc ici d’évoquer quelques langages très connus. On peut classer les langages de programmation selon plusieurs modes et notamment selon leur degré d’intimité avec l’architecture matérielle de la machine. On parlera ainsi de langage de bas niveau pour l’Assembleur car il s’agit d’un langage qui manipule directement le microprocesseur (le langage assembleur employé dépend du microprocesseur utilisé par l’ordinateur). Voici un programme en Assembleur dont le seul but est d’afficher à l’écran le message « Bonjour » :

     CODE    SEGMENT USE16 ALIGN=16

     $=h100

     MOV DX,Offset Message

     MOV Ah,9

     INT h21

     MOV AX,h4C00

     INT h21

     Message DB "Bonjour !",36

Ce langage, assez ésotérique pour le commun des mortels, a pour principal avantage de générer des programmes très rapides à l’exécution.

Le langage Basic , créé en 1965 par les Américains John KEMENY et Thomas KURTZ, est un langage d’initiation, comme l’indique le développement du sigle qui constitue son nom (Beginner's All-purpose Symbolic Instruction Code). Il s’agit là d’un langage de haut niveau car la complexité de la machine est totalement masquée et quand on souhaite afficher un message à l’écran, une seule instruction suffit. Très populaire, il a été décliné en de très nombreuses versions et le langage de programmation d’Office est une forme de dialecte dérivée du Basic.

D’autres langages comme le Pascal (créé en 1968 par Nikhlaus WIRTH) ou le C (créé en 1972 par Denis RITCHIE et Brian KERNIGHAN) sont également des langages de haut niveau, très structurés et très prisés des informaticiens professionnels. Dérivé du langage C, le C++ en est une variante orientée objets (nous reviendrons plus tard sur ce concept). Plus récemment encore, le langage Java a été développé pour l’écriture des applications Web.

 

Les phases de conception d’un programme

Quel que soit le langage employé pour écrire un programme, il existe une méthodologie pour le rédiger. On a l’habitude de décomposer l’écriture d’un programme en différentes phases.

La phase d’étude préalable

S’il fallait résumer cette première étape par une maxime, je proposerais « réfléchir avant d’agir ! ». En effet, avant d’écrire un programme quelconque, la première des choses à faire est d’éteindre son ordinateur et de réfléchir. On peut notamment commencer par se poser toute une série de questions comme par exemple :

quel est l’objectif de ce programme ?

cet objectif a-t-il réellement un intérêt ?

ce programme n’existe-t-il pas déjà sous une autre forme ?

ce programme est-il réalisable ?

la réalisation de ce programme n’est-elle pas trop coûteuse ?

 

La phase d’analyse

Une fois qu’on a l’assurance que le projet de programmation est réalisable, il faut réfléchir à la structuration du programme. L’informatique étant la science du traitement automatisé de l’information, un programme n’est jamais qu’un processus de transformation d’informations. Il convient donc d’inventorier toutes les informations dont le programme a besoin au départ et toutes les informations dont il aura besoin en sortie. Quand on possède toutes ces données, il faut décrire les algorithmes pour passer des informations disponibles en entrée aux informations disponibles en sortie. Un algorithme est un procédé de calcul qui décrit formellement toutes les étapes d’un calcul qui doit fonctionner dans tous les cas de figure. Par exemple, l’algorithme pour trouver si un nombre entier est pair est très simple :

Diviser le nombre entier par 2

Si le reste de la division est 0, le nombre est pair,

Sinon, le nombre est impair.

On peut alors décrire tout le déroulement du programme dans un langage quasi naturel que l’on appellera pseudo-code, comme par exemple dans l’extrait suivant :

Demander à l’utilisateur sa date de naissance

Si l’utilisateur a moins de 18 ans

Diviser le prix par deux

Sinon appliquer le prix normal

 

La phase d’encodage

Une fois que l’analyse est terminée, il faut transcrire le pseudo-code dans un langage de programmation. Les phases d’étude et d’analyse sont indépendantes de tout langage de programmation et le choix de ce dernier peut se faire au moment de l’encodage. Plus la phase d’analyse a été poussée, plus l’encodage est simple. La plupart des problèmes de programmation proviennent d’une analyse trop succincte, voire d’une absence totale d’analyse.

 

La phase de test

Quand l’encodage est achevé, il faut tester le programme car il est excessivement rare qu’un programme, sauf s’il est très court et extrêmement simple, fonctionne correctement du premier coup. Les causes d’erreur sont multiples et un chapitre de cet ouvrage est consacré à leur étude. Quand les tests permettent de mettre en évidence des erreurs, il faut revenir en arrière et retourner, en fonction de la gravité de l’erreur, à la phase d’analyse (erreur de conception) ou d’encodage (erreur de programmation).

 

La phase de production

Une fois que le programme paraît exempt d’erreurs (ce n’est malheureusement souvent qu’une illusion...), on peut envisager de le diffuser auprès des utilisateurs.

Le cycle de vie du logiciel n’est pas pour autant terminé car il est fort probable que certains utilisateurs trouvent des bugs (erreurs de programmation) qui n’auront pas été détectés lors des phases de tests ou bien que d’autres utilisateurs demandent au programmeur des améliorations ou de nouvelles fonctionnalités. Il faudra alors se relancer dans une analyse, voire repartir de zéro si les modifications souhaitées sont trop importantes...

 

Conclusion

Un programme doit avoir un but bien déterminé et la programmation consistera à écrire les instructions permettant de réaliser un objectif. Avant de commencer à programmer, il faut bien réfléchir à la structure du programme et inventorier les informations qui sont manipulées par le programme. Apprendre à programmer Office, c’est apprendre le langage de programmation d’Office qui est composé d’un vocabulaire (une liste de mots finie dont on peut consulter chaque définition dans l’aide en ligne) et d’une syntaxe (la manière d’agencer les mots). Programmer n’est pas difficile si on a l’esprit un tant soit peu logique et si on respecte rigoureusement la syntaxe du langage de programmation que l’on utilise car la moindre erreur de syntaxe peut bloquer le programme.