2021-2022 / INFO0946-1

Introduction à la programmation

Durée

30h Th, 30h Pr, 10h Labo.

Nombre de crédits

 Bachelier en sciences informatiques5 crédits 
 Bachelier en ingénieur de gestion5 crédits 

Enseignant

Benoît Donnet

Langue(s) de l'unité d'enseignement

Langue française

Organisation et évaluation

Enseignement au premier quadrimestre, examen en janvier

Horaire

Horaire en ligne

Unités d'enseignement prérequises et corequises

Les unités prérequises ou corequises sont présentées au sein de chaque programme

Contenus de l'unité d'enseignement

Le cours alterne entre les aspects propres au langage C et les aspects algorithmiques.
Les thèmes abordés sont les suivants:

  • syntaxe et sémantique de base du langage C
  • algorithmes simples (parcours linéaire d'un tableau, opération mathématique cumulative, recherche dichotomique, introduction aux problèmes de tri)
  • découpe en sous-problèmes et introduction à la méthodologie de développement (analyse du problème, invariant, fonction de terminaison)
  • analyse d'un algorithme (complexité)
  • structure de données de base (enregistrement, tableau, chaîne de caractères, fichiers)
  • modularité d'un programme (fonction/procédure, variable globale) et documentation du code par spécifications (programmation défensive)
  • pointeurs et allocation dynamique de mémoire. 
La structure du cours est la suivante:
  • Introduction
  • Chapitre 1: Bloc, Variable, Instruction Simple
  • Chapitre 2: Structures de Contrôle
  • Chapitre 3: Méthodologie de Développement
  • Chapitre 4: Introduction à la Complexité
  • Chapitre 5: Structures de Données
  • Chapitre 6: Modularité du Code
  • Chapitre 7: Pointeurs
  • Chapitre 8: Allocation Dynamique

Acquis d'apprentissage (objectifs d'apprentissage) de l'unité d'enseignement

L'objectif général de ce cours est d'introduire, auprès des étudiants, les principes de base de l'informatique et, en particulier, les principes de base de la programmation.
La conception d'un algorithme correct et efficace sera mise en avant, en particulier dans le cadre d'une méthodologie stricte en trois points: 

  • découpe d'un problème d'une certaine taille en sous-problèmes plus simples à résoudre
  • construction par invariant de boucle graphique
  • documentation du code à l'aide de spécifications.
Le langage de programmation étudié est le C.
A la fin du cours, l'étudiant devra être capable
  • d'analyser un problème de taille moyenne, de proposer des structures de données
  • de découper le problème en sous-problèmes et de résoudre, en C, chaque problème de manière efficace
  • d'évaluer les performances de sa solution. 
L'étudiant sera aussi à même d'utiliser les bases de la ligne de commande sous Linux (notamment pour gérer son code source, le compiler et l'exécuter). 
En outre, au-delà des compétences techniques, la pédagogie du cours (voir plus bas) cherche à développer trois "qualités" comportementales chez l'informaticien débutant: la rigueur, la persévérance, et l'autonomie.
  • Rigueur: un ordinateur est une machine qui exécute vite et bien les instructions qu'on lui a données.  Mais cette machine ne sait pas interpréter autre chose: même mineure, une erreur provoque le dysfonctionnement de la machine.  Le respect des consignes, la précision et l'exactitude sont  de rigueur en informatique
  • Persévérance: face à l'intransigeance de la machine, le débutant est confronté à ses nombreuses erreurs (les siennes, pas celles de la machine!!) et sa tendance naturelle est de passer à autre chose.  Mais le papillonnage (ou zapping) est une très mauvaise stratégie en informatique: pour s'exécuter correctement, un programme doit être finalisé.  L'informatique nécessite donc "d'aller au bout des choses".
  • Autonomie: programmer soi-même des algorithmes qu'on a définis est sans doute le meilleur moyen pour assimiler au mieux les principales structures algorithmiques et pour mieux comprendre ses erreurs en se confrontant à l'intransigeante impartialité de l'ordinateur, véritable "juge de paix" des informaticiens.  Par ailleurs, l'évolution continuelle et soutenue des langages de programmations et des ordinateurs nécessitent de se tenir à jour régulièrement et seule la pratique systématique (résolution d'exercices supplémentaires du syllabus) permet de "ne pas perdre pied".

Savoirs et compétences prérequis

Aucun pré-réquis en informatique ou programmation (mais il est quand même préférable d'être à l'aise sur un ordinateur).
Cependant, le cours suppose une très bonne connaissance du français (parlé et écrit).  En effet, la bonne résolution d'un problème nécessite, avant tout, de le comprendre.

Activités d'apprentissage prévues et méthodes d'enseignement

Afin de mieux comprendre l'organisation pédagogique du cours, nous allons emprunter une métaphore inspirée de Henri-Pierre Charles (Henri-Pierre Charles.  Initiation à l'Informatique.  Ed. Eyrolles.  2000):

  • Pédagogie par Objectifs:  le solfège est l'étude des principes élémentaires de la musique et de sa notation.  Le musicien "fait ses gammes" et chaque exercice a un objectif précis pour évaluer l'apprentissage du "langage musical".  Il en va de même pour l'informaticien débutant confronté à l'apprentissage d'un langage de programmation (le C pour nous).
  • Pédagogie par l'Exemple: l'apprentissage des grands classiques permet au musicien de s'approprier les bases du solfège en les appliquant à ces partitions connues et en les (re)jouant lui-même.  L'informaticien débutant, en (re)codant lui-même les algorithmes bien connus (et en refaisant à la maison les problèmes résolus ensemble en séance théorique) se constituera ainsi une base de réflexes de programmation en "imitant" ces algorithmes.
  • Pédagogie de l'Erreur: les bogues (ou bugs en anglais) sont à l'informaticien ce que les fausses notes sont aux musiciens: des erreurs.  Ces erreurs sont nécessaires dans l'acquisition de la connaissance.  Un élève a progressé si, après s'être trompé, il peut reconnaître qu'il s'est trompé, dire où et pourquoi il s'est trompé, et comment il recommencerait sans produire les mêmes erreurs.
  • Pédagogie par Problèmes: connaissant ses "classiques" et les bases du solfège, le musicien devenu plus autonome peut envisager sereinement la création de ses propres morceaux.  Le développement d'un projet informatique ambitieux sera "mis en musique" au cours du Q2.
L'implémentation de cette pédagogie, dans le cours INFO0946, se fera en 3 parties:
  • Cours Théorique: le cours théorique est là pour présenter, aux étudiants, le "solfège" de la programmation, des algorithmes typiques mais aussi une méthodologie de résolution de problèmes.  Le cours théorique se donne (sauf exception) 2h par semaine.  Le cours théorique se donne, généralement, en présentiel avec des slides (une participation active des étudiants est donc attendue).  Des petits exercices de synthèse sont aussi résolus durant les séances théoriques. 
  • Séance de Répétition:  il s'agit de séances d'exercices sur papier organisées de manière presque hebdomadaire.  Chaque séance d'exercices dure 2h.  La présence aux séances d'exercices est obligatoire.  La liste des exercices qui seront abordés lors de chaque séance est donné en début de quadrimestre, sur le site web du cours.  Il est vivement conseillé de préparer activement chaque séance de répétition en préparant, à la maison, les exercices de la séance à venir.  En outre, certaines séances de répétitions commenceront par un QCM (cfr. ci-dessous) avec pour objectif d'évaluer les connaissances de base, nécessaires à la résolution d'exercices, et lévolution des étudiants
  • Séance de Laboratoire: il s'agit de séances d'exercices sur machine dans le laboratoire d'algorithmique.  La présence aux séances de laboratoire est obligatoire. Chaque séance (il y en aura 5 sur tout le quadrimestre) dure 2h.  Néanmoins, comme déjà indiqué plus haut, il est vivement conseillé de travailler, par soi-même, sur machine à la maison (notamment, par exemple, en faisant tourner les programmes écrits lors des séances théoriques).  Les Challenges (cfr. ci-dessous) sont là, aussi, pour favoriser la pratique sur machine de l'étudiant.
Enfin, les étudiants ont aussi la possibilité d'acquérir, durant le quadrimestre, des compétences transversales.  En particulier, une formation d'introduction à la ligne de commande et à l'environnement Linux sera proposée aux étudiants.
 

Mode d'enseignement (présentiel, à distance, hybride)

Cours donné exclusivement en présentiel


Explications complémentaires:

Le cours théorique se donne au 1er quadrimestre et se compose de séances théoriques, de répétitions et de laboratoire.  
Dans l'état actuel de la situation sanitaire, les cours (théoriques et pratiques) sont organisés en présentiel (port du masque obligatoire)

Lectures recommandées ou obligatoires et notes de cours

Les notes du cours sont composées essentiellement de transparents (slides). Une version imprimée des slides (2 slides/page) est disponible, dès la rentrée, à la Centrale des Cours. Une version électronique (PDF) des slides est aussi disponible sur la page web du cours. Les étudiants sont supposés disposer au plus vite d'une version des slides.  En raison de l'épidémie de covid-19, il est possible que les notes de cours soient complétées par des capsules vidéos.
Un syllabus d'exercices est disponible auprès de la Centrale des Cours. Une version électronique (PDF) est aussi disponible sur la page web du cours. Chaque étudiant est supposé disposer du syllabus d'exercices dès la première séance de répétitions ou de laboratoire.  Chaque étudiant est supposé disposer du syllabus d'exercices dès la première séance de répétition (typiquement, dès la deuxième semaine de cours).  A noter que la liste des exercices à préparer pour chaque séance est disponible sur la page Web du cours.
Aucun livre n'est obligatoire dans ce cours. Cependant, l'étudiant désireux de disposer d'un support écrit additionnel peut se référer aux ouvrages suivants (ils ont servi pour l'élaboration du cours):


  • Claude Delannoy. "Programmer en Langage C". Editions Eyrolles. 2010 (5ème édition)
  • Rémy Malgouyres, Rita Zrour, Fabien Feschet. "Initiation à l'Algorithmique et à la Programmation en C". Editions Dunod. 2011 (2ème édition).
  • Yves Granjon. "Algorithmes en Pascale et en Langage C". Editions Dunod. 2004 (2ème édition).

Modalités d'évaluation et critères

Examen(s) en session

Toutes sessions confondues

- En présentiel

évaluation écrite

- En distanciel

évaluation écrite

Evaluation continue

Interrogation(s) hors session


Explications complémentaires:

Les étudiants sont évalués principalement de deux manières:    
1. Evaluations Continues
Elles ont lieu tout au long du quadrimestre et ont pour but d'évaluer le travail hebdomadaire de l'étudiant.  
QCMs
5 séances de répétition, durant le quadrimestre, commenceront par une rapide interrogation (10 min) sous la forme d'un QCM. L'objectif d'un tel QCM est de s'assurer que l'étudiant a revu son cours avant d'aborder la séance de répétition. Chaque QCM portera toujours sur tous les cours précédents.
Le total des QCMs compte pour 10% de la note finale, en janvier (i.e., 2/20). 
Afin de vous préparer aux QCMs, vous trouverez sur la page web du cours des exemples de QCMs.  La réalisation de ces QCMs exercices n'est pas obligatoire mais nous vous conseillons fortement de les faire afin de vous préparer au mieux.
Tout qui ne présente pas un QCM sans justificatif valable (i.e., un certificat médical) se verra attribuer une note de 0 pour ce QCM. La justification de l'absence sera remise en main propre au Professeur ou envoyée par mail (version scannée) ou courrier ordinaire au plus tard dans les 2 jours suivant l'épreuve.
Challenges
5 Challenges (+ un challenge initial) seront proposés.  Chaque challenge consiste en un petit problème à résoudre.  Le code doit alors être soumis sur une plateforme de soumission.  Il est corrigé automatiquement avec le système CAFE et un feedback+feedforward sont envoyés, par email, à l'étudiant dans les minutes qui suivent la soumission.
Sur les 5 challenges, vous avez la possibilité de ne pas en soumettre un.  Il ne sera alors pas compté dans votre moyenne (joker).  Pour chaque challenge, vous avez la possibilité de le soumettre trois fois maximum jusqu'à la deadline.  Seule comptera la dernière soumission (i.e., les précédentes sont écrasées).
Le total des challenges compte pour 10% de la note finale, en janvier (i.e., 2/20). 
2. Evaluations Ponctuelles
Elles se présentent sous la forme d'interrogations d'une durée plus importante que les évaluations continues et d'un niveau de complexité plus élevé.  L'objectif est de faire un "arrêt sur image" des compétences acquises par l'étudiant, les évaluer et, le cas échéant, remédier aux difficultés.
Interrogation de mi-quadrimestre
Une interrogation écrite a lieu lors de la semaine de Toussaint. Typiquement, elle porte sur l'Introduction et les chapitres 1 à 3 du cours (la matière pouvant être revue en fonction de la matière qui aura été abordée au cours).
Cette interrogation est obligatoire et dure 2h. Tout qui ne présente pas l'interrogation sans justificatif valable (i.e., un certificat médical) se verra attribuer une note de 0. La justification de l'absence sera remise en main propre au Professeur ou envoyée par mail (version scannée) ou courrier ordinaire au plus tard dans les 2 jours suivant l'épreuve.
En cas d'échec à l'interrogation (note < 10/20), l'étudiant devra suivre diverses séances de remédiation. L'assistance à ces séances, en cas d'échec, est obligatoire. 
La note de l'interrogation intervient pour 15% dans la note finale (i.e., 3/20) de janvier.
Examen
L'examen est écrit et, bien entendu, obligatoire.  Il se fait à cours fermé et dure 4 heures.   Un exemple d'examen est disponible sur la page Web du cours. 
L'examen porte sur l'entièreté de la matière et comporte uniquement des exercices. Il intervient pour 65% (i.e., 13/20) de la note finale.
3. Seconde Session
En cas d'échec en Janvier, l'étudiant a la possibilité de représenter l'examen au mois de Juin et/ou au mois d'août.  Attention, dans ce cas la note finale (de juin et/ou août) ne sera constituée que de celle de l'examen (challenges, QCMs, et interro n'interviennent plus).

Stage(s)

Remarques organisationnelles

Le cours se donne au 1er quadrimestre, le mercredi matin (8h30 - 12h30) et le mercredi après-midi (13h45 - 15h45).  L'agenda détaillé du cours est donné en début de quadrimestre.
Le Professeur et l'Assistant sont disponibles pour répondre aux questions par email, via le forum sur la page Web (solution privilégiée de façon à ce que la question et la réponse profitent à tous) ou, si nécessaire, lors d'un rendez-vous dans nos bureaux.

Contacts

Professeur: Benoit Donnet  -- Bureau 1.15 (B28)
Assistant: Géraldine Brieven -- Bureau R.83a (B28)