Présentation
L'enseignement de spécialité de numérique et sciences informatiques vise l'appropriation des fondements de l'informatique pour préparer les élèves à une poursuite d'études dans l'enseignement supérieur, en les formant à la pratique d'une démarche scientifique et en développant leur appétence pour des activités de recherche.
L'objectif de cet enseignement, non professionnalisant, est l'appropriation des concepts et des méthodes qui fondent l'informatique, dans ses dimensions scientifiques et techniques. Cet enseignement s'appuie sur l'universalité de quatre concepts fondamentaux et la variété de leurs interactions :
- les données, qui représentent sous une forme numérique unifiée des informations très diverses : textes, images, sons, mesures physiques, sommes d'argent, etc. ;
- les algorithmes, qui spécifient de façon abstraite et précise des traitements à effectuer sur les données à partir d'opérations élémentaires ;
- les langages, qui permettent de traduire les algorithmes abstraits en programmes textuels ou graphiques de façon à ce qu'ils soient exécutables par les machines.
- les machines, et leurs systèmes d'exploitation, qui permettent d'exécuter des programmes en enchaînant un grand nombre d'instructions simples, assurent la persistance des données par leur stockage et de gérer les communications. On y inclut les objets connectés et les réseaux ;
À ces concepts s'ajoute un élément transversal : les interfaces qui permettent la communication avec les humains, la collecte des données et la commande des systèmes.
Cet enseignement prolonge les enseignements d'informatique dispensés à l'école primaire, au collège en mathématiques et en technologie et, en seconde, l'enseignement commun de sciences numériques et technologie. Il s'appuie aussi sur l'algorithmique pratiquée en mathématiques en seconde.
Il permet de développer des compétences :
- analyser et modéliser un problème en termes de flux et de traitement d'informations ;
- décomposer un problème en sous-problèmes, reconnaître des situations déjà analysées et réutiliser des solutions ;
- concevoir des solutions algorithmiques ;
- traduire un algorithme dans un langage de programmation, en spécifier les interfaces et les interactions, comprendre et réutiliser des codes sources existants, développer des processus de mise au point et de validation de programmes ;
- mobiliser les concepts et les technologies utiles pour assurer les fonctions d'acquisition, de mémorisation, de traitement et de diffusion des informations ;
- développer des capacités d'abstraction et de généralisation.
Au lycée Montesquieu, l'enseignement de numérique et sciences informatiques est proposé en première et terminale au titre d'un enseignement de spécialité.
Fonctionnement
Une part de l'horaire de l'enseignement d'au moins un quart du total en classe de première est réservée à la conception et à l'élaboration de projets conduits par des groupes de deux à quatre élèves. Les projets réalisés par les élèves, sous la conduite du professeur, constituent un apprentissage fondamental tant pour la compréhension de l'informatique que pour l'acquisition de compétences. En classe de première comme en classe terminale, ils peuvent porter sur des problématiques issues d'autres disciplines et ont essentiellement pour but d'imaginer des solutions répondant à l'expression d'un besoin.
Un langage de programmation est nécessaire pour l'écriture des programmes : un langage simple d'usage, interprété, concis, libre et gratuit, multiplateforme, largement répandu, riche de bibliothèques adaptées et bénéficiant d'une vaste communauté d'auteurs dans le monde éducatif est privilégié. Le langage choisi est Python. L'expertise dans tel ou tel langage de programmation n'est cependant pas un objectif de formation.
Programme
Classe de première
Le programme est organisé autour de huit rubriques. Les mêmes notions peuvent être développées et éclairées dans différentes rubriques, en mettant en lumière leurs interactions.
1. Histoire de l'informatique
- Situer dans le temps les principaux événements de l'histoire de l'informatique et leurs protagonistes.
2. Représentation des données : types et valeurs de base
- Passer de la représentation d'une base dans une autre.
- Évaluer le nombre de bits nécessaires à l'écriture en base 2 d'un entier, de la somme ou du produit de deux nombres entiers ; utiliser le complément à 2.
- Calculer sur quelques exemples la représentation de nombres réels : 0.1, 0.25 ou 1/3.
- Dresser la table d'une expression booléenne.
- Identifier l'intérêt des différents systèmes d'encodage ; convertir un fichier texte dans différents formats d'encodage.
3. Représentation des données : types construits
- Écrire une fonction renvoyant un p-uplet de valeurs.
- Lire et modifier les éléments d'un tableau grâce à leurs index ; construire un tableau par compréhension ; utiliser des tableaux de tableaux pour représenter des matrices : notation a [i] [j] ; itérer sur les éléments d'un tableau.
- Construire une entrée de dictionnaire ; itérer sur les éléments d'un dictionnaire.
4. Traitement de données en tables
- Importer une table depuis un fichier texte tabulé ou un fichier CSV.
- Rechercher les lignes d'une table vérifiant des critères exprimés en logique propositionnelle.
- Trier une table suivant une colonne.
- Construire une nouvelle table en combinant les données de deux tables.
5. Interactions entre l'homme et la machine sur le Web
- Identifier les différents composants graphiques permettant d'interagir avec une application Web ; identifier les événements que les fonctions associées aux différents composants graphiques sont capables de traiter.
- Analyser et modifier les méthodes exécutées lors d'un clic sur un bouton d'une page Web.
- Distinguer ce qui est exécuté sur le client ou sur le serveur et dans quel ordre ; distinguer ce qui est mémorisé dans le client et retransmis au serveur ; reconnaître quand et pourquoi la transmission est chiffrée.
- Analyser le fonctionnement d'un formulaire simple ; distinguer les transmissions de paramètres par les requêtes POST ou GET.
6. Architectures matérielles et systèmes d'exploitation
- Distinguer les rôles et les caractéristiques des différents constituants d'une machine ; dérouler l'exécution d'une séquence d'instructions simples du type langage machine.
- Mettre en évidence l'intérêt du découpage des données en paquets et de leur encapsulation ; dérouler le fonctionnement d'un protocole simple de récupération de perte de paquets (bit alterné) ; simuler ou mettre en œuvre un réseau.
- Identifier les fonctions d'un système d'exploitation ; utiliser les commandes de base en ligne de commande ; gérer les droits et permissions d'accès aux fichiers.
- Identifier le rôle des capteurs et actionneurs ; réaliser par programmation une IHM répondant à un cahier des charges donné.
7. Langages et programmation
- Mettre en évidence un corpus de constructions élémentaires.
- Repérer, dans un nouveau langage de programmation les traits communs et les traits particuliers à ce langage.
- Prototyper une fonction ; décrire les préconditions sur les arguments ; décrire des postconditions sur les résultats.
- Utiliser des jeux de tests.
- Utiliser la documentation d'une bibliothèque.
8. Algorithmique
- Écrire un algorithme de recherche d'une occurrence sur des valeurs de type quelconque ; écrire un algorithme de recherche d'un extrémum, de calcul d'une moyenne.
- Écrire un algorithme de tri ; décrire un invariant de boucle qui prouve la correction des tris par insertion, par sélection.
- Écrire un algorithme qui prédit la classe d'un élément en fonction de la classe majoritaire de ses k plus proches voisins.
- Montrer la terminaison de la recherche dichotomique à l'aide d'un variant de boucle.
- Résoudre un problème grâce à un algorithme glouton.
Classe terminale
Le programme est organisé autour de six rubriques. Les mêmes notions peuvent être développées et éclairées dans différentes rubriques, en mettant en lumière leurs interactions.
1. Histoire de l'informatique
- Événements clés de l'histoire de l'informatique.
2. Structures de données
- Structures de données, interface et implémentation.
- Vocabulaire de la programmation objet : classes, attributs, méthodes, objets.
- Listes, piles, files : structures linéaires. Dictionnaires, index et clé.
- Arbres : structures hiérarchiques. Arbres binaires : nœuds, racines, feuilles, sous-arbres gauches, sous-arbres droits.
- Graphes : structures relationnelles. Sommets, arcs, arêtes, graphes orientés ou non orientés.
3. Bases de données
- Modèle relationnel : relation, attribut, domaine, clef primaire, clef étrangère, schéma relationnel.
- Base de données relationnelle.
- Système de gestion de bases de données relationnelles.
- Langage SQL : requêtes d'interrogation et de mise à jour d'une base de données.
4. Architectures matérielles, systèmes d’exploitation et réseaux
- Composants intégrés d'un système sur puce.
- Gestion des processus et des ressources par un système d'exploitation.
- Protocoles de routage.
- Sécurisation des communications.
5. Langages et programmation
- Notion de programme en tant que donnée. Calculabilité, décidabilité.
- Récursivité.
- Modularité.
- Paradigmes de programmation.
- Mise au point des programmes. Gestion des bugs.
6. Algorithmique
- Algorithmes sur les arbres binaires et sur les arbres binaires de recherche.
- Algorithmes sur les graphes.
- Méthode « diviser pour régner ».
- Programmation dynamique.
- Recherche textuelle.