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

Apprendre Python et s'initier à la programmation

Partie 1 : Bases de la programmation


précédentsommairesuivant

I. Ordinateur et programmation

Nous sommes envahis par les ordinateurs et autres appareils électroniques modernes tels que les smartphones, consoles de jeu, fours à micro-ondes, smartwatches, distributeurs automatiques de boissons, etc. Tous ces appareils, et encore bien d'autres, fonctionnent grâce aux programmes qui les équipent. Un ou plusieurs programmes sont en cours d'exécution sur ces appareils, ce qui leur permet de fournir des services à leurs utilisateurs. Ce premier chapitre fournit une description basique de ce qu'est un ordinateur, ainsi que de la notion de programmation.

I-A. Ordinateur

On peut décrire un ordinateur en suivant l'architecture de Von Neumann, un modèle permettant de représenter des systèmes informatiques simples. Dans ce modèle, illustré par la figure 1 à la page suivante, un ordinateur est décomposé en quatre parties :

  • L'unité arithmétique et logique (Arithmetic Logic Unit (ALU) en anglais), aussi appelée unité de traitement, est celle où se déroulent toutes les opérations de base, notamment les opérations arithmétiques comme les additions.
  • L'unité de contrôle s'assure du déroulement correct de l'exécution des programmes en se chargeant du séquençage des opérations.
  • La mémoire contient à la fois le programme à exécuter et les données qu'il va utiliser et créer. Elle se divise en deux parties : la mémoire volatile est celle utilisée lorsque l'ordinateur est en cours de fonctionnement et la mémoire permanente est celle qui permet le stockage permanent d'informations.
  • Les dispositifs d'entrée-sortie permettent à l'ordinateur de communiquer avec le monde extérieur. Les entrées lui permettent de récupérer des informations (la souris, le clavier, le réseau, etc.) et les sorties lui permettent de produire des résultats (l'écran, l'imprimante, le réseau, etc.).
Image non disponible
Figure 1. L'architecture de Von Neumann décrit un ordinateur comme étant composé de quatre entités interagissant entre elles pour exécuter des programmes.

Tout ordinateur, ainsi qu'une série d'autres appareils électroniques, peuvent être modélisés grâce à cette simple architecture. Dans ce modèle, de nombreux transferts de données se font entre la mémoire et l'unité de traitement, pouvant mener à un ralentissement global du système. De nos jours, la vitesse des processeurs n'a cessé d'augmenter, tout comme la quantité de mémoire disponible, autant la volatile que la permanente.

Néanmoins, les progrès en termes de vitesses de transfert de données n'ont pas été aussi marquants, ce qui conduit à un goulot d'étranglement entre la mémoire et l'unité de traitement. L'architecture de Von Neumann a donc été améliorée pour pallier cette faiblesse, en ajoutant, par exemple, des systèmes de cache, du multithreading, des nouveaux types de mémoire volatile, etc.

Nous allons en rester là pour ce descriptif des ordinateurs, puisque ce n'est pas le but de ce cours, et passer directement à son sujet principal, à savoir la programmation.

I-B. Programme

Un programme est essentiellement une suite d'actions à entreprendre pour atteindre un but ; il s'agit d'une séquence d'instructions à exécuter. On peut faire le parallèle avec une recette de cuisine qui est un programme dont le but est la réalisation d'un plat ou avec un lave-linge qui propose plusieurs programmes commandant la suite d'actions à exécuter (essentiellement les roulements du tambour) pour laver le linge.

Comme le montre la figure 2, on peut voir un programme comme une boite noire qui reçoit des données en entrée, effectue des calculs à partir de ces données et se termine en produisant des résultats en sortie. En toute généralité, les entrées et sorties utilisées par un programme proviennent directement de celles de l'ordinateur qui l'exécute. Néanmoins, ces dernières pourraient simplement provenir de la mémoire de l'ordinateur, un programme pouvant ne pas être autorisé à communiquer directement avec le monde extérieur.

Image non disponible
Figure 2. Un programme peut être vu comme une boite noire recevant des données en entrée, effectuant un calcul et produisant des résultats en sortie.

Dans le domaine de l'informatique, on écrit des programmes dans le but de résoudre des problèmes. Cherchons, par exemple, les racines d'un trinôme du second degré qui est, pour rappel, un polynôme de la forme :

kitxmlcodelatexdvpax^2 + bx + c \qquad (a \in \mathbb{R}_0 \textrm{ et } b, c \in \mathbb{R}).finkitxmlcodelatexdvp

Pour trouver les racines que l'on cherche, on peut suivre cette procédure :

  1. Calculer le discriminant kitxmlcodeinlinelatexdvp\Delta = b^2 - 4acfinkitxmlcodeinlinelatexdvp.
  2. Trois cas possibles :

    1. Si kitxmlcodeinlinelatexdvp\Delta < 0finkitxmlcodeinlinelatexdvp, alors il n'y a pas de racine réelle.
    2. Si kitxmlcodeinlinelatexdvp\Delta = 0finkitxmlcodeinlinelatexdvp, alors il y a une racine réelle double :
      kitxmlcodeinlinelatexdvpx = -\frac{b}{2a}.finkitxmlcodeinlinelatexdvp
    3. Si kitxmlcodeinlinelatexdvp\Delta > 0finkitxmlcodeinlinelatexdvp, alors il y a deux racines réelles distinctes :
      kitxmlcodeinlinelatexdvpx_1 = \frac{-b + \sqrt{\Delta}}{2a} \quad\textrm{et}\quad x_2 = \frac{-b - \sqrt{\Delta}}{2a}.finkitxmlcodeinlinelatexdvp

Comme on peut l'observer, cette procédure comporte plusieurs types d'instructions :

  • on peut effectuer des calculs à partir de données reçues en entrée (le calcul de kitxmlcodeinlinelatexdvpb^2 - 4acfinkitxmlcodeinlinelatexdvp lors de la première étape) ;
  • on peut stocker un résultat intermédiaire (le discriminant stocké dans kitxmlcodeinlinelatexdvp\Deltafinkitxmlcodeinlinelatexdvp) ;
  • on peut effectuer des tests et entreprendre des actions si ces derniers passent (les trois tests de la valeur du discriminant lors de la deuxième étape) ;
  • on peut produire un résultat final (le verdict sur le nombre de racines et leur valeur).

Comme on le verra dans la suite du cours, il s'agit là de plusieurs constructions clés de la programmation. On peut résumer ce problème par une courte description comme illustrée par la figure 3. On y décrit, en langage naturel, le problème ainsi que les données à fournir en entrée et le résultat à produire en sortie.

Image non disponible
Figure 3. Le problème de recherche des racines d'un trinôme du second degré reçoit les coefficients a, b et c et identifie la ou les racines de ce trinôme s'il en existe.

Pour continuer l'analogie avec la cuisine, on peut faire le lien entre entrées, programme et sorties avec, respectivement, les ingrédients, la recette et le plat préparé. Une fois les ingrédients fournis au cuisinier, et après que ce dernier ait exécuté la recette (chacune de ses étapes), le plat désiré est produit comme résultat.

I-C. Programmation

La programmation comprend toutes les activités qu'il faut mettre en œuvre afin de produire un programme (informatique). Il s'agit en réalité de l'une des étapes du développement d'un logiciel ou d'une application. La programmation concerne précisément l'écriture du code source d'un programme. Généralement, un programme est écrit à l'aide d'un langage de programmation, notation souvent textuelle destinée à décrire un programme. Il existe également des langages visuels (un langage de programmation visuel par blocs très répandu et utilisé pour l'enseignement de la programmation aux plus jeunes est le langage Scratch, développé par le MIT) souvent utilisés pour des programmes de petite ampleur. La figure 4 montre une représentation graphique d'un programme qui résout le problème de recherche de racines présenté à la section précédente.

Image non disponible
Figure 4. Un programme peut être décrit à l'aide d'une représentation graphique appelée organigramme ou diagramme d'activités.

Le programme commence son exécution au cercle plein Image non disponible pour se terminer au cercle semi-plein Image non disponible. Les boites rectangulaires correspondent à des commandes décrivant une action à exécuter, ou un résultat à produire. Enfin, les boites en forme de losange correspondent à des conditions pouvant être satisfaites ou non. En fonction du résultat, l'exécution du programme continue d'un côté ou de l'autre.

On utilisera cette notation graphique au début de notre apprentissage, afin de mieux comprendre les constructions de base d'un langage de programmation textuel, Python en l'occurrence, qui est introduit dans le prochain chapitre.

Cette notation graphique permet en fait de décrire n'importe quel type d'activité. On peut, par exemple, décrire la réalisation d'une omelette comme le montre la figure 5. Dans cet exemple, vous noterez qu'il y a une possible répétition du test « Est-ce cuit ? ». Une telle construction est appelée boucle et est, comme on le verra plus loin, très utile pour répéter une séquence d'actions.

Image non disponible
Figure 5. La réalisation d'une omelette peut aussi se représenter à l'aide d'un diagramme d'activités. Cet exemple comporte une boucle permettant de tester si la cuisson est terminée.

I-D. Historique et motivation

Les origines des sciences informatiques, et de la programmation en particulier, remontent à Ada Lovelace (Augusta Ada King, comtesse de Lovelace, est née le 10 décembre 1815 à Londres et est décédée à 36 ans, le 27 novembre 1852 à Marylebone), dont un portrait se trouve à la figure 6. Elle est connue pour avoir réalisé le premier programme informatique alors qu'elle travaillait sur la machine de Babbage, ancêtre de l'ordinateur. Elle fut ainsi la première à écrire un programme destiné à être exécuté par une machine. Plus tard, son nom a été utilisé pour nommer le langage de programmation Ada, conçu entre 1977 et 1983 pour le département de la Défense américain.

Image non disponible
Figure 6. Ada Lovelace est connue pour avoir écrit le premier programme informatique, ce qui en fait la première programmeuse de l'histoire.

COBOL, l'un des premiers langages de programmation de haut niveau, c'est-à-dire proche de la langue naturelle, a été conçu en 1959 par l'amiral Grace Hopper, une informaticienne américaine. Depuis, les langages de programmation n'ont cessé d'évoluer, incluant des facilités pour les programmeurs en leur permettant d'exprimer le plus facilement possible les instructions qu'ils désirent exécuter. Dans ce cours, nous allons apprendre à utiliser le langage Python, troisième langage le plus utilisé au monde, en 2016 (The 2016 Top Programming Languages, par Stephen Cass, dans IEEE Spectrum (le 26 juillet 2016), consulté le 6 août 2016).

Pourquoi est-il important de savoir programmer ? Aujourd'hui, tout le monde dépend des technologies pour communiquer, s'informer, travailler, etc. L'informatique est partout : on s'en sert pour réserver son billet d'avion, faire ses courses, gérer son compte bancaire, etc. Malheureusement, la plupart des gens ne sont pas capables de comprendre les énormes quantités de code qui sont derrière toutes ces applications.

La programmation est le langage utilisé en informatique, tout comme les mathématiques peuvent être vues comme le langage des sciences. Il est dès lors important d'apprendre à comprendre et maitriser un minimum ce langage de la technologie si l'on souhaite comprendre le monde numérique dans lequel nous vivons. Tout le monde devrait dès lors être initié à la programmation, et d'autres catégories de personnes devraient en avoir un certain niveau de maitrise. C'est par exemple le cas des scientifiques et ingénieurs, qui seront amenés, tôt ou tard, dans leurs carrières professionnelles, à mettre les mains dans le code. Enfin, aujourd'hui, qu'on le veuille ou non, si on souhaite gagner de grandes quantités d'argent ou changer le monde, l'apprentissage de l'informatique est très certainement un bon départ. Regardez autour de vous et observez tous les projets innovants et originaux ; ils comportent très certainement tous une part non négligeable de code informatique…

Juste pour vous faire rêver, la figure 7 montre un nanosatellite développé par la NASA dans le cadre du projet PhoneSat (le projet PhoneSat). Ce dernier a été conçu à partir de cartes Arduino et de smartphones grand public, ces derniers ayant un processeur plus puissant et plus de mémoire qu'un satellite classique moyen. Des compétences informatiques ont évidemment été nécessaires pour mener à bien ce projet.

Image non disponible
Figure 7. Le projet PhoneSat, mené par la NASA, consiste à construire des nano-satellites à partir de smartphones et cartes Arduino, non modifiés, et à les placer en orbite basse.

précédentsommairesuivant

Copyright © 2018 UKO. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.