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!
.
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?
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 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 …
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 :
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, preuveSureté et sécurité des données :
codage, cryptographieLangages 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, …
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
Pour trouver toutes les informations
Mot clés: «Info111» ou «Nicolas Thiéry»
Espace eCampus
Pour interagir avec les enseignants
Infrastructure du cours, suite#
Salles de TP
Pour programmer
Salle de TP virtuelle myDocker@Paris-Saclay
Ou directement sur votre machine personnelle
Gestion des devoirs avec GitLab et travo
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?
Entrée? Sortie?
Entrée? Sortie?
Exemple
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
Un environnement de calcul interactif multi-langage
Cling
Un interpréteur C++
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
.
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