Programmation impérative (Info 111)#

Nicolas Thiéry

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

À faire

  • [ ] Gestion des images : probablement à déplacer dans Semaine1/media si elles ne prennent pas trop de place

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 ≠ Garagiste ≠ Physicien

Et pourtant, très 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

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

La science informatique?#

Définition

L” informatique (computer science) 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)#

Thème fondamental: 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! 😱

Indication

Les paradigmes et concepts sous-jacents sont presque toujours les mêmes

  • Programmation impérative : décrire les actions à suivre

  • Programmation objet : modéliser les entités et leurs interactions

  • Programmation fonctionnelle : décrire la solution souhaitée et comment la composer depuis des problèmes plus simples

  • Programmation logique : décrire les contraintes du problème

  • Orchestration de flots de données : décrire les données et les transformations à appliquer

  • Apprentissage : donner des examples

  • Au delà des langages: modélisation, algorithmique, structures de données, …

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

Indication

Auto-évaluation

  • TPs à correction automatique

  • Exercices à correction automatique

Important

Évaluation

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

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

  • 20% : Projet en fin de semestre

  • 15% : Contrôles en ligne, …

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 solutions en ligne ou IA générationnelle 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!

Page web

Espace eCampus

Infrastructure du cours, suite#

Salles de TP

Pour programmer

  • Ou directement sur votre machine personnelle

Forge logicielle GitLab

Pour héberger vos devoirs

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

  • Gros bouquin : 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 : Programme

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

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

Premiers programmes#

Exemple

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?

Exemple

notice Lego

Entrée? Sortie?

Exemple

notice Ikea 1
notice Ikea 2

Entrée? Sortie?

Exemple

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

Entrée? Sortie?

Exemple:  Un 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: page web, eCampus, salle de TP virtuelle myDocker, forge GitLab

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

  • Ordinateur

  • Programmes

On reviendra dessus!

Environnement Jupyter + Cling

.