16. COMPETENCES

Il ne s’agit pas ici de débattre de l’usage et du sens de tel ou tel terme en apprentissage par résolution de problèmes (tel que le mot compétence) ou en informatique (tel que l’expression conception détaillée), mais simplement de baliser le parcours de formation à partir de compétences repères qui seront développées, mises en jeu et évaluées. Leur développement sera favorisé par une prise de conscience des connaissances et savoir-faire qu’elles recouvrent.

Le parcours se base actuellement sur un référentiel de trois compétences:

  • Correction et test de programmes (intitulée IF3 Correction de programmes): Recherche et correction des erreurs de programmation.
  • Conception détaillée et codage (intitulée IF2 Codage de programmes): Traduction des traitements dans un langage de programmation.
  • Conception générale (intitulée IF1 Conception de programmes): Construction de processus de traitement automatisé des informations.

Le but n’est pas de poser un cadre rigide ultime, mais simplement de fournir des repères permettant à chacun de se situer et d’évoluer dans son parcours, tout en restant libre de se forger sa propre vision et de modifier pour son usage ce référentiel (par exemple faire glisser des items de Conception générale vers Conception détaillée et inversement ;-) ).

16.1. Correction et test de programmes

Cette compétence est nécessaire pour obtenir des programmes qui fonctionnent correctement en pratique. Elle repose sur des connaissances qui sont aussi requises par les deux autres compétences.

Connaissances:

  • connaître la syntaxe et la sémantique du langage de programmation utilisé, en considérant plus particulièrement les points suivants: les structures de contrôle (FOR, IF/THEN, WHILE), les expressions de calcul numérique, la définition et l’appel des fonctions, la manipulation des structures de données (e.g., les listes).
  • connaître l’ordre d’exécution des instructions, le sens de l’affectation (à ne pas confondre avec l’égalité mathématique).
  • savoir, si besoin, où trouver les définitions des autres éléments du langage et celles des fonctions fournies par les modules/bibliothèques.

Savoir-faire:

  • instrumenter un programme pour surveiller (tracer) son exécution.
  • simuler à la main l’exécution d’un programme.
  • repérer les cas particuliers/limites et les cas généraux, afin de pouvoir en tester les exécutions séparément.

16.2. Conception détaillée et codage

Cette compétence est mise en oeuvre lorsque l’on souhaite réaliser un programme pour lequel on connait le principe de calcul, ou quand ce principe nous est donné dans l’énoncé.

Connaissance:

  • les mêmes connaissances que pour la compétence Correction et test de programmes.
  • connaître les morceaux de programmes types vus en cours et en exercices (e.g., calcul d’une suite récurrente, définition d’une fonction par intervalles, comptage d’éléments, énumération de valeurs et calcul de leur moyenne ou de leur somme, parcours et recherche d’éléments dans une liste).
  • connaitre (pas forcément dans le détail) les modules de base (math, random, ...) vus en cours et savoir où trouver la description détaillée des fonctions de ces modules.

Savoir-faire:

  • raisonner par analogie avec des morceaux de programmes types (vus en cours, faits en exercices, ou trouvés dans les documentations).
  • écrire un programme dans un style facile à relire (pour limiter le charge cognitive lors des tests et de la correction d’erreurs, ou lors de la réutilisation/maintenance future du code).

16.3. Conception générale

Cette compétence intervient lorsque le principe général de calcul (l’algorithme) n’est pas connu ni donné, et nécessite d’être inventé/créé par le programmeur/concepteur.

Connaissances:

  • les mêmes connaissances que pour les compétences Correction et test de programmes et Conception détaillée et codage.
  • connaître le rôle des modules, des fonctions et des collections (pour nous essentiellement les listes) en tant que moyen d’abstraction.

Savoir-faire:

  • expliciter les principes de traitement qui émergent sous forme d’idées, afin de les transcrire, d’abord sur papier et ensuite au travers d’un programme.
  • organiser les principes de traitement en modules et en fonctions.
  • organiser et structurer les données.
  • adapter des principes existants, notamment ceux de simulation numérique et de visualisation graphique 2D/3D étudiés en cours lors des applications.