FAQ Pédagogie Algo1

De Ensiwiki
Aller à : navigation, rechercher
AttentionCette page est maintenue par les enseignants d'Algo1. N'hésitez pas à ajouter vos questions ou vos remarques dans la page Discussion associée.


Cette page est destinée à collecter les réponses aux questions fréquentes à propos de la pédagogie en Algorithmique 1. Si vous avez des questions relatives à l'environnement des TPs, consultez aussi la FAQ générale d'ensiwiki.

Choix du contenu

Pourquoi s'initier en Ada et pas en C, C++, C#, Java, OCaml, Python, Php, Visual Basic, etc ?

Face à la multiplicité des langages de programmation, on a en effet l'embarras du choix. Mais cette multiplicité traduit le fait qu'un langage de programmation est toujours le résultat de compromis : il n'y a donc pas de langage parfait. Parmi les principaux défauts d'Ada comme langage d'initiation à la programmation, on pourrait citer son caractère verbeux et un certain manque de simplicité dans la conception du langage. Parmi ses caractéristiques qui correspondent aux objectifs pédagogiques d'Algo1, citons :

  • Ada est un langage de haut-niveau et fortement typé (contrairement au C ou C++). Il est donc un langage facile à apprendre et à utiliser pour les débutants. En particulier, débogguer un programme Ada est facile (par rapport au C ou au C++).
  • Ada est un langage avec une gestion explicite de la mémoire dynamique et en particulier sans GC (contrairement à OCaml, Java ou aux langages de scripts). Les débutants adoptent donc naturellement un style de programmation qu'ils pourront aisément adapter à des langages de plus bas niveau comme le C ou l'assembleur.

Avec des motivations différentes, ces deux caractéristiques d'Ada expliquent sans doute son utilisation relativement fréquente dans l'avionique et les systèmes critiques, via notamment le recent développement de la chaîne d'outils SPARK

Ceci dit, l'objectif d'Algo1 n'est pas l'apprentissage d'Ada en tant que tel, mais l'apprentissage de la programmation. Au cours de la scolarité à l'Ensimag et dans votre vie, vous apprendrez bien d'autres langages de programmation (dont certains ne figurent même pas dans la liste ci-dessus).

Le contenu "Algorithmique" dans l'enseignement "Algo1" est faible

C'est vrai: "Algo1" est surtout un cours d'initiation à la programmation. Le contenu "Algorithmique" sera surtout développé à partir du cours Algo2 et du cours de "RO" au second semestre.

En "Algo1", on est à trop haut niveau par rapport à la machine

Patience, les enseignements de Logiciel de base et du Projet C au second semestre vont compléter celui d'Algo1 sur la programmation "bas-niveau".

Cours et TDs

Le rythme des TDs est trop rapide: je me sens en difficulté

Si vous êtes en difficulté, parlez-en avec votre enseignant de TD: il pourra vous proposer une aide adaptée. Sachez seulement qu'il est difficile d'aller plus lentement pour atteindre le niveau attendu (2 ans et demi pour former un ingénieur en informatique en partant de zéro, c'est court !)

Une solution, pour mieux suivre le rythme pendant les séances, consiste à préparer à l'avance les exos prévus pour la séance. Normalement, le planning des séances est donné sur le Kiosk, et l'enseignant de TD peut faire l'effort de re-préciser le planning d'une séance à l'autre (il faut insister pour l'avoir s'il oublie de le faire). Ainsi, pendant la séance, vous pouvez appeler l'enseignant pour qu'il fasse un retour sur votre solution, pendant que les autres étudiants cherchent les exos. N'hésitez pas non plus à poser des questions à votre enseignant en dehors des séances en lui envoyant un email (peu d'étudiants utilisent vraiment cette possibilité).

Pour les étudiants qui se sentent en grande difficulté, il y a des cours de soutien.

Le rythme des TDs est trop lent : il faudrait des groupes de niveaux

Si vous vous ennuyez pendant les séances, parlez-en avec votre enseignant de TD : il pourra vous proposer des exos plus durs, voire vous dispenser de certaines séances de TD. On ne doit pas aller trop vite car il y a beaucoup d'étudiants qui sont des débutants complets en programmation. Par ailleurs, organiser des groupes de niveaux est complexe au niveau de l'emploi du temps : il y a déjà les groupes de niveaux en anglais. Enfin, prendre le temps de re-réfléchir sur les bases de la programmation est très utile, même pour les programmeurs confirmés, surtout s'ils sont en partie autodidactes : ça leur permet de s'améliorer !

En TD et surtout en TP, les programmeurs confirmés sont invités à aider les programmeurs débutants : c'est très formateur de voir les erreurs des débutants et de réussir à formuler pourquoi ce sont des erreurs. En outre, ça fait partie de la formation au métier d'informaticien, où l'on est sans cesse en contact avec des programmeurs débutants qu'il faut former.

J'ai beau faire des efforts, le cours d'amphi du stage de rentrée me semble trop dur

Oui, c'est normal. Bien qu'il ne présuppose aucune connaissance en informatique, ce cours d'amphi n'est pas conçu seulement pour des novices complets en programmation (car très bientôt, vous n'en ferez plus partie...). Ce cours a l'ambition de présenter rigoureusement le langage Ada, le plus simplement possible, mais pas plus... Si vous ne comprenez pas tout, c'est que vous avez déjà compris un point essentiel: il faut se méfier de l'apparente simplicité des langages de programmation !

Ce cours contient donc beaucoup d'informations, et il faudra relire plusieurs fois les notes de cours Démarrer la programmation en Ada, au fur et à mesure que vous progresserez, pour l'assimiler complètement.

L'initiation à la programmation est surtout assurée par les TD et les TP du stage de rentrée.

Les cours d'amphi sont redondants par rapport aux notes de cours

Certes, le but des cours d'amphi est de dégager les points essentiels des notes de cours. En principe, l'assimilation des notes de cours devrait donc être très fortement accélérée par la présence active en amphi.

TPs encadrés

Exos trop longs : on a à peine le temps de comprendre l'énoncé que la séance est finie...

En principe, les étudiants sont censés préparer les TPs à l'avance (cf. planning et sujets sur le Kiosk). Au minimum il faudrait avoir lu et compris l'énoncé avant la séance.

Je me sens en difficulté en TP

Il faut absolument préparer les exos de TP à l'avance en allant le plus loin possible. Ainsi dès le début de la séance, vous pouvez appeler l'enseignant pour lui exposer vos difficultés : vous profiterez ainsi au maximum de la présence des enseignants. Et vous aurez en outre une chance de prendre de l'avance par rapport aux étudiants "à l'aise".

Même en préparant les exos, on n'a pas le temps de finir en séance

Pour les exos marqués [à achever], il faudra finir lors d'une séance ultérieure ou en dehors d'une séance (à voir avec les enseignants). Sinon pour les autres exos, il s'agit de "faire rentrer" dans une problématique. Une fois la compréhension de la problématique et de sa solution globalement acquise, il n'est pas forcément très utile de passer des heures à peaufiner tous les détails de sa mise en oeuvre (même si c'est frustrant de ne pas terminer...)

Y a-t-il des corrigés fournis ?

Non, il n'y pas de corrigés. L'objectif des TPs encadrés n'est pas de comprendre une solution enseignante (les TDs remplissent déjà ce rôle en partie). Il s'agit de trouver les failles dans ses propres solutions, de manière à :

  • progresser en débogage (méthodes pour trouver les failles)
  • progresser en programmation (éviter de reproduire certaines erreurs de raisonnement ou de compréhension).

Mais à quoi servent les enseignants de TP ?

Les enseignants sont essentiellement là pour répondre aux questions des étudiants, réexpliquer les points mal compris, guider les étudiants sur les façons de mettre en évidence leurs propres erreurs, mais pas pour donner la solution aux exos.

Je me sens vraiment très à l'aise en programmation. Pourquoi suis-je obligé de venir aux séances ?

Les absences injustifiées ne sont pas tolérées sur les TPs d'Algo1 même pour les programmeurs "confirmés".

  • Tout d'abord, le rythme s'accélère progressivement tout au long du semestre. Venir aux TPs est donc le minimum pour vérifier qu'on ne décroche pas. Et encore ça ne suffit pas complètement : chaque année, quelques "bons" étudiants se font pièger et "décrochent" du groupe sans s'en apercevoir.
  • Si vraiment vous êtes à l'aise, on vous invite à aider vos camarades en difficulté : c'est très formateur de voir les erreurs des débutants et de réussir à formuler pourquoi ce sont des erreurs. En outre, ça fait partie de la formation au métier d'informaticien, où l'on est sans cesse en contact avec des programmeurs débutants qu'il faut former. Ici, on vous demande d'aider réellement les débutants à progresser : il ne s'agit pas de leur donner la solution, il s'agit plutôt de les aider à comprendre leurs erreurs.
  • Enfin, vous pouvez aussi prendre de l'avance sur la suite des TPs : certains TPs sont très longs et ne peuvent pas vraiment être finis en séance. Avec de l'avance, vous pourrez aller au bout. Mais faites vérifier par un enseignant que votre travail sur un exo est correct avant de passer au suivant.

TPs en temps libre

Il y a beaucoup de code fourni. Les étudiants ont peu d'autonomie sur la conception des programmes.

C'est vrai. Il y a plusieurs raisons :

  • Trouver des bonnes structures de données et une bonne décomposition du programme en paquetages et sous-programmes est difficile pour les débutants qui ont plutôt tendance à "pisser" du code sans trop anticiper : ils ont le nez dans le guidon. Un objectif des TPLs est de faire acquérir aux débutants l'intime conviction que quand on a une bonne conception détaillée du programme (structures de données et décomposition en paquetages et sous-programmes), alors on peut développer "facilement" et "rapidement" des programmes complexes.
  • Comprendre le code des autres apparaît fréquemment fastidieux aux programmeurs : il est souvent beaucoup plus tentant de tout réécrire soi-même sans réutiliser du code existant. Cependant c'est absolument nécessaire, sinon on passe son temps à réinventer la roue. Comprendre le code des autres dans le but de pouvoir ensuite modifier ce code est donc une bonne habitude à prendre dès qu'on apprend à programmer.

Mais par ailleurs, il est clair que pour apprendre à réaliser la conception détaillée des programmes, il faut bien écrire des gros programmes from scratch (ou presque). Vous aurez cette opportunité dans la suite de la scolarité. Mais apprendre à réaliser la conception des programmes ne fait pas partie des objectifs d'Algo1 : il faut déjà savoir programmer à partir d'une conception détaillée en fait...

TPL trop dur

Si vous êtes coincés, n'hésitez pas à demander de l'aide à vos enseignants de TP (éventuellement, en envoyant une question par email). Ceci dit, en principe, en travaillant en binôme vous devriez réussir à surmonter la plupart des difficultés.

TPL trop long

Vous n'êtes pas obligé de tout faire : il faut mieux essayer de bien traiter un sous-ensemble de ce qui est demandé que vouloir tout faire n'importe comment.

Les TPLs sont mal payés en session 1 par rapport au travail fourni

C'est vrai. Mais il est difficile de donner une note individuelle "juste" au résultat d'un travail collectif (en binôme ou plus puisqu'il y a de "l'entraide" entre binômes), ce travail collectif étant par ailleurs une bonne chose lorsqu'il est réellement "collectif".

Ceci dit, la "rémunération" des TPLs est indirecte. Les étudiants qui passent du temps dessus deviennent nettement plus à l'aise en programmation et cette aisance leur apporte des points aux examens d'Algo1 (écrit + TP), ainsi que dans la suite de la scolarité à l'Ensimag.

Comment partager simplement mes sources Ada avec mon binôme ?

La solution la plus simple consiste à partager un répertoire commun entre les deux membres du binôme sur telesun: un des membre du binômes crée le répertoire sur son compte et donne tous les droits (lecture+écriture+exécution) sur ce répertoire à son binôme via les ACL.

Une autre solution, à peine plus compliquée mais pratique pour travailler à 2 sur les mêmes fichiers sans trop se gêner, consiste à créer ce répertoire commun comme le dépôt d'un gestionnaire de versions: voir les explications sur la page correspondante dans ensiwiki. Si vous êtes débutant, nous vous conseillons d'utiliser Subversion (alias svn). Des explications détaillées pour mettre ça en place se trouvent sur la page svn de ensiwiki et la page du tutoriel dédié.

Dans la suite de votre scolarité (en Projet GL en 2A notamment), vous passerez de toute façon à Git qui est un peu plus complexe, mais beaucoup plus puissant. Si vous vous sentez à l'aise, vous pouvez passer directement à Git sans utiliser svn.

La page Travailler à plusieurs donne quelques autres pistes.

Examens

Qu'y a-t-il à l'examen écrit de session 1 ?

L'examen écrit se déroule sur papier (comme un examen ordinaire en mathématiques par exemple). Il faut y écrire des petits programmes Ada comme dans les séances de TD. Généralement, les sujets de session 1 contiennent listes chaînées, tableaux et récursivité. Mais n'importe quelle notion du premier semestre peut y apparaître : types abstraits, paquetages, exceptions, machines séquentielles, etc. Les sujets des années antérieures se trouvent en ligne.

Y a-t-il des annales d'examens corrigés ?

Les séances de TD contiennent déjà pleins d'exos corrigés (dont certains sont des anciens exos d'examens). Il ne semble pas utile de donner plus d'exos corrigés. Mais les étudiants qui s'entraînent sur les annales (c'est une excellente idée) sont invités à discuter avec leur enseignant de TD qui se fera un plaisir de les aider ou de commenter leur solution : éventuellement, ils conviendront ensemble d'un rendez-vous en dehors des séances pour avoir plus de temps si nécessaire.

Comment se déroule l'examen de TP ?

L'examen de TP aura lieu dans un environnement EnsiLinux. Vous pouvez essayer cet environnement sur les machines en libre-service de la salle E301. Pour cela, il faut (re)démarrer ces machines en sélectionnant le système Linux Ubuntu (premier de la liste à sélectionner avec les flèches du clavier). Puis entrer son login et son mot de passe à l'invite (les mêmes que dans les TPs d'archi sous Linux).

L'examen de TP consiste à implémenter la variante d'une procédure Ada donnée au préalable en exercice: en 1h30, vous devrez coder, tester et déboguer cette procédure. L'exercice donné au préalable a pour but de vous permettre de vous plonger à l'avance dans la problématique et de gagner ainsi un temps précieux pendant l'examen.

La note est attribuée par un enseignant en fonction de la qualité du code que vous avez écrit (récupéré automatiquement sur la machine d'examen) et de son comportement vis-à-vis d'une grosse base de tests (commune aux enseignants).