Introduction à la programmation (Info 111)#

Nicolas M. 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 apprendre 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 ...

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 :

  • Études : apprendre la science a chamboulé ma programmation

  • 2026 : après 36 ans et 300k 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! 😱

  • Et maintenant en langue naturelle

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

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

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

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

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

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

  • Apprentissage : inférer un modèle statistique à partir d'exemples

  • 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

  • Algorithmes et structures de données

  • Architecture des ordinateurs, calcul haute performance

  • 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

  • Traitement automatique des langues

  • Langages formels, automates, compilation

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

À propos de ce cours#

Au programme

  • Science : concepts de la programmation

  • Technologie : programmation C++ (simple)

  • Usage : environnement de programmation, GNU/Linux

Du pouvoir pour reprendre la main sur vos outils numériques

À usage pro, perso ou citoyen

  • Pouvoir d'analyser vos besoins

    • qu'est-ce que je peux / veux automatiser

  • Pouvoir d'exercer un regard critique sur l'existant

    • adéquation, confiance, performance, impact, neutralité, indépendance

  • Pouvoir de coconcevoir vos propres outils

  • Pouvoir de construire vos propres outils

En 22h

Des super héro.ïnes, en herbe

La magie du logiciel libre

Logiciel: un bien immatériel à usage non exclusif

La vaste majorité des logiciels est libre:

  • Liberté d'utiliser

  • Liberté d'analyser

  • Liberté de modifier

  • Liberté de redistribuer les modifications

Le numérique scientifique libre au bout de vos doigts

Avec des milliers de briques à composer

Apprendre à coder à l'ère de l'IA?

  • code: description formelle d'un procédé, d'un système

  • quelle forme dans 20 ans? spécifications en langue naturelle?

  • copiloter l'usage et la construction des outils numériques

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 à toustes, débutants comme expérimentés

Auto-évaluation

  • Exercices à correction automatique

  • Tuteur par IA 🚧

É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, note de l'enseignant

Comment travailler l'informatique?#

Recommandations

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

  • Participez activement en amphi : questions, prise de notes

  • Fichez au fur et à mesure tout ce que vous découvrez: concepts, définitions, syntaxe, astuces, ...

  • Travaillez le poly et vos notes
    15 min perso / semaine ?

Recommandations

  • Commencez les exercices de TD avant la séance
    Participez activement en TD
    «Finissez» pour la semaine suivante
    1h perso / semaine?

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

  • Projet de fin de semestre
    30h+

Attention

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

Fraude et plagiat#

S'entraider (explications, aide au débogage, ...)

C'est super!

Récupérer des solutions de quelqu'un d'autre

(dont solutions en ligne ou IA générative comme chat-GPT)

À ce stade, c'est contre-productif

Exception

On utilisera un peu d'IA générative pour

  • recherche d'information

  • tutorat

Sans le dire

C'est de la fraude

Vous êtes de futurs scientifiques

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

  • Nous vous faisons confiance

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

  • Détecteurs de plagiat

  • Détecteurs d'objets connectés

  • ...

Ressources#

Suivez le guide!

Page web

Espace eCampus

Ressources, suite#

Salles de TP

Pour programmer

  • Ou directement sur votre machine personnelle

Forge logicielle GitLab

Pour héberger vos devoirs

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

Entrée? Sortie?

Exemple

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

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
625
type: int

Jupyter + Cling : une super calculatrice programmable#

Jupyter

Cling

Résumé#

À propos du cours Introduction à la programmation (Info111)

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

  • Objectifs du cours

  • Modalités pratiques

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

  • Ordinateur

  • Programmes

On reviendra dessus!

Ressources

  • espace eCampus (annonces, forum d'aide)

  • ressources pédagogiques

    • version statique sur la page web

    • version interactive avec Jupyter + Cling sur myDocker

  • forge logicielle GitLab

Motivations

  • Du pouvoir pour prendre la main sur vos outils numériques

  • Usage professionnel, personnel, citoyen

  • Une responsabilité