Programmation impérative (Info 111)#

Nicolas Thiéry

http://Nicolas.Thiery.name/Enseignement/Info111

Pourquoi enseigner l’informatique?

Évidence : l’ordinateur est partout!

  • Combien d’ordinateurs dans la salle?

  • Combien d’ordinateurs possédez vous?

  • Le mot «assisté par ordinateur» a disparu

  • Usage constant des ordinateurs, pour le travail comme le reste

Évidence : tous les jeunes connaissent déjà l’informatique!

Vraiment?

C’est quoi l’informatique?#

Une petite analogie :

  • Mr Einstein, vous qui êtes un excellent physicien, vous devez savoir changer la roue de ma voiture, non?

  • Mr Alonso, vous qui êtes un excellent conducteur de F1, vous devez savoir réparer le carburateur de ma voiture, non?

Conducteur \(\ne\) Garagiste \(\ne\) Physicien

Et pourtant, loin d’être Einstein ou Alonso, …

  • Mr Thiéry, vous qui êtes professeur en informatique, vous devez savoir réparer mon W…..s, non?

C’est quoi l’informatique en fait?

Suite de la petite analogie :

L’usage

La technologie

La science

Conduite

Réparation, Conception

Physique

Consommation

Cuisine

Chimie, Biologie

Utilisation

Programmation, …

Informatique

Qu’est-ce qu’on apprend à l’école?

  • Principalement

  • Et il y a des raisons profondes pour cela

    ../../_images/Vinci.jpg
  • Et il y a des pressions pour que ce ne soit pas le cas …

Quelle école pour la société de l’information? :

Une conférence de François Élie

À lire ou écouter … et méditer …

../../_images/FrancoisElie.jpg

Tous les jeunes connaissent déjà l’informatique?

L’usage?

La technologie?

  • Qui sait programmer? Configurer un réseau?

La science?

Ma petite expérience :

  • 6ème : 3ème

  • Fac : apprendre la science a chamboulé ma programmation

  • 2018 : après 30 ans et 300000 lignes de code, j’apprends encore …

La science informatique?#

  • Science du calcul et de l’information

  • Notion fondamentale : étude des systèmes en évolution

    • État du système avant

    • Étape de calcul

    • État du système après

  • Modèles de calcul

Grands thèmes de l’informatique#

Calculabilité : Que peut, ou ne peut pas faire, un ordinateur?

  • Indépendamment du langage

  • Indépendamment du matériel

  • Miracle : tous les langages sont équivalents!

Complexité : Combien de ressources pour résoudre un problème?

  • Indépendamment du langage

  • Indépendamment du matériel

  • Indépendamment de l’algorithme?

Grands problèmes de l’informatique#

Maîtriser les systèmes extrêmement complexes :

  • Internet avec des milliards d’ordinateurs

  • Programmes avec des millions de lignes

  • Données occupant des petaoctets (\(10^{15}\) octets!)

  • Services gérant des millions de clients

  • Passage à l’échelle

Abstraction :

Exemple : Couches OSI pour les réseaux

Difficulté :

Apprendre des outils conçus pour les programmes de 100000 lignes en travaillant sur des programmes de 10 lignes …

Grands thèmes de l’informatique (suite)#

Conceptions des langages de programmation :

  • Java, C++, Python, Ada, Pascal, Perl, Camel, Haskell, Go, Rust…

  • Un nouveau langage par semaine depuis 50 ans!

  • Heureusement les concepts sont presque toujours les mêmes :

    • Programmation impérative

    • Programmation objet

    • Programmation fonctionnelle

    • Programmation logique

    • Orchestration de flots de données

    • Apprentissage

    • Algorithmique et structures de données

Comment mieux s’exprimer pour que l’ordinateur résolve nos problèmes?

Autres grands thèmes de l’informatique#

  • Architecture des ordinateurs, parallélisme

  • Réseaux, transmission de données

  • Bases de données

  • Langages formels, automates

  • Modèles et structures de données

  • Sureté et sécurité du logiciel :
    spécification, test, preuve

  • Sureté et sécurité des données :
    codage, cryptographie

  • Mathématiques discrètes : graphes, combinatoire, …

À propos de ce cours#

Au programme :

  • Science : concepts de la programmation structurée

  • Technologie : programmation C++ (simple)

  • Usage : environnement de programmation, GNU/Linux

Ce que l’on va voir :

  • Les briques de bases, les règles de compositions

  • Les constructions usuelles

  • Les problèmes déjà résolus, les erreurs les plus courantes

Du TD? Pour quoi faire??

  • Bénéficier de l’expérience de plus de 50 ans de programmation

  • Intuition de ce qui est possible … ou pas

  • Intuition de comment résoudre un nouveau problème

Organisation du cours#

1h30 amphi, 1h30 TD, 2h TP

Du TD? pour quoi faire???

  • Apprendre la science informatique, en utilisant un ordinateur, pour programmer …

  • Comme apprendre la physique, au volant d’une voiture …

  • C’est pas facile …

Une difficulté : la forte hétérogénéité de niveau : Ce module s’adresse à tous, débutants comme expérimentés

Évaluation :

  • 25% : Examen mi-semestre (dans l’axe des TD)

  • 40% : Examen final (vision d’ensemble)

  • 20% : Projet en fin de semestre

  • 15% : Exercices en ligne, notes de TP

Ordinateurs et traitement automatique des informations#

Exemples d’ordinateurs :

  • Calculatrice (programmable)

  • Ordinateur personnel (PC, Mac, …)

  • Station de travail (Sun, DEC, HP, …)

  • Super-ordinateur (Cray, IBM-SP, …)

  • Clusters d’ordinateurs

Mais aussi :

  • Puce (programme fixe)

  • Tablettes

  • Téléphones portables, appareils photos, GPS, lecteurs MP3, …

  • Box, routeurs wifi, …

  • Téléviseurs, …

  • Arduino, Raspberry Pi, …

Caractéristiques principales d’un ordinateur#

Absolument stupide :

  • Il obéit strictement aux ordres reçus

  • Est-ce qu’il fait ce que l’on veut?

Très très rapide :

  • 2GHz : 2 milliards d’opérations par seconde

Très très bonne mémoire :

  • Bible : Mo (million de caractères)

  • Mémoire : Go (milliards de caractères)

  • Disque : To (1000 milliards de caractères)

  • Data center : Po

À quoi sert un ordinateur?#

Stocker des informations :

  • Documents, musique, photos, agenda, …

Traiter automatiquement des informations :

  • Entrée: informations venant du clavier, de la souris, de capteurs, de la mémoire, d’autres ordinateurs, …

  • Traitement des informations en exécutant un programme

  • Sortie: informations envoyées vers l’écran, la mémoire, d’autres ordinateurs, …

Définition :

Informellement, un programme est une séquence d’instructions qui spécifie étape par étape les opérations à effectuer pour obtenir à partir des entrées un résultat (la sortie).

Voir aussi : http://fr.wikipedia.org/wiki/Programme_informatique

Premiers programmes#

Exemples de programmes

Ingrédients :

250g de chocolat, 125g de beurre, 6 œufs, 50 g de sucre, café

Étapes :

  • Faire fondre le chocolat avec 2 cuillères d’eau

  • Ajouter le beurre, laisser refroidir puis ajouter les jaunes

  • Ajouter le sucre et comme parfum un peu de café

  • Battre les blancs jusqu’à former une neige uniforme

  • Ajouter au mélange.

Entrée? Sortie?

Exemples de programmes

../../_images/programme-lego.pdf

Entrée? Sortie?

Exemples de programmes

../../_images/programme-ikea.pdf

Entrée? Sortie?

../../_images/laby.png

Entrée? Sortie?

Un exemple de programme C++

#include <iostream>
using namespace std;

int main() {
    int x, xCarre, xPuissanceQuatre;

    cout << "Entrez un entier: ";
    cin >> x;

    xCarre = x * x;
    xPuissanceQuatre = xCarre * xCarre;

    cout << "La puissance quatrième de " << x
         << " est " << xPuissanceQuatre << endl;

    return 0;
}

Compilation, exécution, … Un peu lourd? Pas de panique!

Le coeur du programme C++

// Entrée
int x = 5;

// Traitement
int xCarre = x * x;
int xPuissanceQuatre = xCarre * xCarre;

// Sortie
xPuissanceQuatre

Exécution dans Jupyter+Cling

Jupyter + Cling : une super calculatrice programmable

Jupyter :

Cling :

Démo

Résumé#

  • À propos d’Info 111

    • Qu’est-ce que l’informatique (Usage, Technologie, Science!)

    • Objectifs du cours

  • Un aperçu de premiers éléments de programmation :

    • Ordinateur

    • Programmes On reviendra dessus!

  • Environnement Jupyter+Cling

  • Infrastructure du cours