Programmation impérative (Info 111)#

Nicolas Thiéry

https://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 en fait?#

Une petite analogie :

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

  • M. 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, …

  • M. 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 la science

  • Et il y a des raisons profondes pour cela

    Ceux qui sont férus de pratique sans posséder la science sont comme le pilote qui s'embarquerait sans timon ni boussole et ne saurait jamais vraiment où il va -- Léonard de Vinci
  • Et 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 …

François Élie

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

L’usage?

  • Évidence : tous les jeunes savent utiliser un ordinateur

La technologie?

  • Qui sait programmer? Configurer un réseau?

La science?

Ma petite expérience :

  • 6ème :

    Ordinateur portable Epson HX-20

    3ème:

    Manuel Turbo Pascal Objet
  • Fac : apprendre la science a chamboulé ma programmation

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

La science informatique?#

Definition 26

L”informatique est la Science du calcul et de l’information

Thème fondamental : étude des systèmes en évolution

  • État du système avant

  • Étape de calcul

  • État du système après

Grands thèmes de l’informatique#

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

  • Modèles de calcul

  • Indépendamment du langage

  • Indépendamment du matériel

  • Miracle : tous les langages sont équivalents!

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

  • Indépendamment du langage

  • Indépendamment du matériel

  • Indépendamment de l’algorithme?

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

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

Problématiques de passage à l’échelle

Stratégies d”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)#

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

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

  • Au delà des langages: modélisation, …

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

  • Interactions Humain Machine

  • Bases de données

  • Modèles et structures de données

  • Architecture des ordinateurs, parallélisme

  • Réseaux, transmission de données

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

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

  • Langages formels, automates, compilation

  • 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

  • Des briques de bases, des règles de compositions

  • Les constructions usuelles

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

Indication

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

Indication

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

Important

É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

Comment travailler l’informatique?#

  • Parcourir le cours (poly ou page web) avant l’amphi
    15 min perso / semaine

  • Participer activement en amphi : questions, prise de notes

  • Travailler le poly et vos notes; apprendre les définitions
    15 min perso / semaine ?

  • Commencer les exercices de TD avant la séance
    Participer activement en TD
    «Finir» pour la semaine suivante
    1h perso / semaine?

  • Participer activement en TP
    «Finir» les exercices de TP pour la semaine suivante
    2h / semaine?

  • Projet de fin de semestre
    30h

  • Il vous faut un ordinateur ou tablette avec un navigateur web!
    Variante: salle informatique en libre service

Fraude et plagiat#

Indication

S’entraider (explications, aide au débogage, …) C’est super!

Attention

Récupérer du code de quelqu’un d’autre (dont IA générationnelles comme chat-GPT) À ce stade, c’est contre-productif

Danger

Sans le dire C’est de la fraude

Important

Vous êtes de futurs scientifiques

  • L’intégrité est une valeur essentielle en science

  • Nous vous faisons confiance

Avertissement

Mais, au cas où, nous avons quelques outils :-)

Infrastructure du cours#

Suivez le guide!

Espace eCampus

Page web

Infrastructure du cours, suite#

Salles de TP

  • Pour programmer

  • Salle de TP physique à la fac au 336 (SIF / PGIP)

  • Salle de TP virtuelle JupyterHub@Paris-Saclay

    logo jupyterhub
  • Ou directement sur votre machine personnelle

  • Exercices en ligne PLaTon

Forge logicielle GitLab

Gestion des devoirs avec GitLab et travo

image

Une innovation pédagogique Orsay / Montréal!

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

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

Très très rapide

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

  • sans faire d’erreur

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, …

Definition 27 (Programme)

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 : https://fr.wikipedia.org/wiki/Programme_informatique

Premiers programmes#

Example 21

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?

Example 22

notice Lego

Entrée? Sortie?

Example 23

notice Ikea 1
notice Ikea 2

Entrée? Sortie?

Example 24

debut()
droite()
avance()
prend()
gauche()
avance()
pose()
droite()
avance()
gauche()
avance()
avance()
droite()
ouvre()
Laby

Entrée? Sortie?

Example 25 (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;
}

Démo : Compilation en ligne de commande, exécution

Un peu lourd? Pas de panique!

Le cœur du programme C++#

// Entrée
int x = 5;
// Traitement
int xCarre = x * x;
int xPuissanceQuatre = xCarre * xCarre;
// Sortie
xPuissanceQuatre

Jupyter + Cling : une super calculatrice programmable#

Jupyter

Cling

Résumé#

À propos d’Info 111

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

  • Objectifs du cours

  • Infrastructure du cours: eCampus, page web, salles de TP (virtuelles), forge GitLab

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

  • Ordinateur

  • Programmes

On reviendra dessus!

Environnement Jupyter+Cling

.