Course Website
Cours : Jeudi 8h15–9h00, CM 1 4
Exercices : Jeudi 9h15–11h, INF 3, BC 07-08
Ce document a pour but de vous informer sur la pédagogie du cours “Programmation Orientée Objet” donné à la section MA, son mode de fonctionnement et divers autres aspects liés à son organisation. Veuillez lire l’entièreté de ce document, et ne ratez surtout pas la section “Organisation du travail” !
Au premier semestre, nous avons fait de vous des programmeuses et programmeurs. Ce semestre, nous comptons faire de vous des développeurs.
L’objectif premier de ce cours est de compléter la formation en programmation commencée au premier semestre. Vous aurez ainsi acquis la base commune nécessaire en développement informatique pour mener à bien la suite de vos études à l’EPFL. De façon similaire au cours du premier semestre, ses buts incluent :
Les notions vues au semestre d’automne seront consolidées et largement complétées ce semestre, notamment par la réalisation d’un projet. Au terme des deux semestres, chaque étudiant-e ayant terminé le cours avec succès sera capable de manipuler des logiciels de manière indépendante, au niveau d’abstration permis par les concepts de base du développement logiciel.
Ce cours est en premier lieu conçu et organisé comme la suite du cours du premier semestre, dont les bases doivent donc avoir été acquises. Tout comme au premier semestre, il est toujours possible que vos niveaux respectifs soient différents, surtout en termes des connaissances de l’orienté objet, ou du langage Python en particulier. Cependant, notre expérience suggère que très peu d’entre vous auront déjà acquis les principes plus larges de modularisation, de tests systématiques, et de collaboration. Ce sont ces aspects qui formeront le socle pédagogique de cours. Ne vous reposez donc pas sur vos acquis !
Pour remplir les objectifs multiples de ce cours, les outils pédagogiques suivants sont mis à votre disposition de façon similaire au premier semestre :
Le cours est principalement enseigné sous une forme d’auto-apprentissage, au travers des tutoriels, des exercices et bien sûr du projet. Les cours ex cathedra viennent renforcer les concepts les plus importants, et vous donnent l’opportunité de poser vos questions en direct.
Les tutoriels fournissent une introduction pas-à-pas aux concepts du cours. Ils sont prévus pour être principalement faits “à la maison”, en amont des séances d’exercices.
Le cours ex cathedra présente à nouveau les concepts principaux illustrés dans les tutoriels. C’est un complément et/ou une alternative, en fonction des méthodes d’enseignement qui vous conviennent le mieux.
Le cours est aussi l’opportunité de répondre à vos questions.
Les cours n’auront que très peu de slides. Ils se dérouleront essentiellement dans un éditeur de code et au tableau.
Étant donné que la salle de cours ne possède pas d’enregistrement automatique, ne vous attendez pas à pouvoir les revisionner. Les morceaux de code de l’éditeur seront postés sur le site, ainsi que – si je j’oublie pas – les photos du tableau.
Chaque semaine, des séries d’exercices vous donnent l’opportunité de pratiquer les concepts vus dans les tutoriels et le cours. Ils sont conçus pour illustrer directement les concepts de la semaine, avec reprise des concepts déjà vus. Les solutions à la plupart des exercices sont données comme un lien vers un repo GitHub. Bien entendu, nous recommendons de n’y accéder qu’après avoir tenté de résoudre les exercices vous-mêmes.
Les exercices sont principalement conçus pour être réalisés pendant une des deux heures des séances d’exercices. Cependant, nous recommendons que vous les commenciez auparavant, afin de profiter au maximum du temps qui vous est donné avec les assistants.
Dans tous les cas, nous ne nous attendons pas à ce que vous réalisiez tous les exercices proposés ! Choisissez ceux dont vous avez besoin pour acquérir les concepts que vous ne maîtrisez pas encore.
Les séances d’exercices sont entièrement pratiques (programmation sur machine). Elles se déroulent dans une salle d’ordinateurs (voir section 5.2) où vous pouvez travailler individuellement ou avec des collègues. Plusieures assistantes et assistants, ainsi que moi-même, sont présents pendant ces séances pour vous aider. Nous répondrons à tous types de questions (sur le cours, les exercices, et le projet).
Je vous encourage à discuter de vos solutions, vos programmes et de vos problèmes éventuels avec les assistantes et assistants. Ils ne s’imposent pas, mais attendent que vous les sollicitiez. Sachez profiter pleinement de leur présence !
Il est vivement recommandé de participer aux séances d’exercices :
Le projet est la partie majeure du cours. Il vaut 50 % de votre note finale. Celui-ci est conçu pour exploiter les concepts du cours, mais aussi une méthodologie de développement collaboratif, en binôme.
La deuxième heure de chaque séance d’exercices est prévue pour être consacrée au projet (à partir de la semaine 2). Toutefois, c’est bien sûr largement insuffisant pour le mener à bien. La majorité de votre projet devra être fait “à la maison”.
Et non, pas de MOOC. Ce cours étant nouveau, il est encore trop tôt pour en faire des vidéos qui vont durer des années.
Cependant, si c’est vraiment votre méthode d’enseignement favorite, il est possible (mais pas recommandé) de suivre le MOOC des éditions précédentes de ce cours : Introduction à la programmation orientée objet (en C++). Comme son nom l’indique, ce cours s’appuie sur C++. Certains concepts ne seront pas traduits de la même façon en Python. D’autres n’auront pas du tout d’équivalent (tels que les destructeurs ou l’héritage multiple). Inversement, il y a des concepts que vous verrons dans ce cours et qui ne sont pas abordés dans le MOOC. Finalement, même les concepts en commun ne seront pas traités dans le même ordre.
À utiliser donc à vos risques et périls.
Ce cours est une « branche de semestre » comptant coefficient 4 dans le bloc 2. Ce coefficient est plus élevé (4 au lieu de 3 pour le même plan horaire) afin de prendre en compte la charge de travail supplémentaire (« à la maison ») liée au projet. Les connaissances que vous aurez acquises seront évaluées à l’aide d’un examen intermédiaire (« mid- term ») en 9e semaine, et d’un examen final la dernière semaine du semestre. De plus, un projet par binôme, réparti sur tout le semestre, viendra compléter l’évaluation 4. La note finale du cours sera calculée de la façon suivante :
Plus précisément : soit $p_x$ le nombre de points obtenus à l’épreuve $x$ (0 en cas d’absence) sur un total maximal pour cette épreuve de $t_x$. La note publiée pour cette épreuve est alors l’arrondi suivant :
\[n_x = 1 + 0.25 \cdot \left\lceil 20\cdot\frac{p_x}{t_x}\right\rceil\]et la note finale $N$ est ensuite calculée directement sur les points obtenus (et non pas les notes intermédiaires) par
\[N = 1+0.25 \cdot \left\lceil 20\cdot\sum_x \theta_x\frac{p_x}{t_x}\right\rceil\]où $\theta_x$ est le coefficient de l’épreuve $x$ (par exemple $0.33$ pour l’examen final).
Attention ! La note du projet est minorée à 1,5x la note que vous obtenez pour les deux examens. Si vous obtenez un total de 30/50 pour la sommes des deux examens, votre note de projet ne pourra pas dépasser 45/50, car $45 = 1.5 \cdot 30$. On a donc toujours l’inégalité suivante :
\[p_\text{projet} \leq 1.5 \cdot (p_\text{midterm} + p_\text{final})\]Il n’est donc pas possible de réussir le cours en vous reposant uniquement sur votre binôme (ou une IA) pour faire votre projet à votre place.
Pour toutes vos questions sur le cours, les exercices, ou le projet, il n’y a qu’une adresse : le forum Ed Discussions. C’est l’outil principal pour interagir avec l’équipe d’enseignement sans avoir à attendre les séances en présentiel. Nous vous encourageons très fortement à y poser vos questions, mais aussi à répondre aux questions de vos collègues.
Il est possible d’y poster de manière anonyme, sans que votre nom apparaissent. Par contre, tous les posts sont publics : tout le monde peut voir le contenu, de sorte que tout le monde puisse bénéficier des réponses.
Il n’y a pas de question ridicule, même si certaines et certains semblent nettement meilleurs que vous (ce ne sont d’ailleurs pas toujours ceux qui finissent le mieux l’année !).
Dans tous les cas, n’utilisez pas les emails personnels pour nous contacter (assistantes, assistants et enseignant). Sauf urgence vraiment personnelle, n’envoyez aucun message personnel.
Le forum ne fonctionne malheureusement habituellement qu’assez tardivement à plein régime ; souvent, par manque de confiance. C’est dommage, car il peut vous épargner bien des heures de blocage face à une erreur de programmation. Je le répète donc, une seule consigne : n’hésitez pas à y poser vos questions, et ce dès les premiers cours.
Via environ 140 “thin clients” (postes de travail) situés dans les salles BC-07-08 et INF 3, ou des connexions à distance depuis votre propre ordinateur, vous aurez accès chacun à une machine virtuelle Linux (Ubuntu) tournant sur des serveurs (gros ordinateurs dédiés à cela). Il s’agit des ordinateurs officiels de ce cours (et qui servent aussi à d’autres enseignements). En cas de problèmes d’accès aux salles ou aux ordinateurs, il faut contacter soit le Help-Desk (1234@epfl.ch, tél interne : 1234) si c’est un problème technique, soit le Service Académique (SAC) si c’est un problème administratif, typiquement un problème d’inscription.
Je rappelle qu’il est impératif de respecter les directives relatives à l’utilisation des moyens informatiques de l’EPFL.
La documentation du cours comprend les tutoriels, les séries d’exercices, ainsi que des mini-références. Nous utiliserons également la documentation en ligne de Python et des bibliothèques. Les documents seront ajoutés sur le site au fur et à mesure du semestre.
J’ai bien conscience que “cette branche n’est qu’une branche pratique”, que “vous n’êtes pas en Section Informatique”, etc. Et il est bien clair pour moi que le travail doit rester proportionnel à l’importance de la matière pour la filière concernée (c.-à-d. plus concrètement à son coefficient au plan d’études). Mais apprendre la programmation ne peut se faire sans un minimum d’investissement personnel, lequel peut représenter une charge assez lourde, sans être excessive. En organisant correctement leur travail sur l’ensemble du semestre, chaque année un nombre important d’étudiantes et étudiants arrivent très bien à gérer cette charge de travail et réussissent cette branche, ainsi que les autres plus importantes pour leur Section.
Le fait que certaines étudiantes et étudiants aient la perception de trop travailler dans cette branche, voire que d’autres passent effectivement trop de temps dessus, et pire !, au détriment des autres branches, provient de trois causes principales:
Il me paraît donc extrêmement important que vous vous fixiez des objectifs (raisonnables) et organisiez correctement votre travail, dès le début et tout au long du semestre. N’hésitez pas à me demander conseil dans ce sens si nécessaire ; mais pour résumer :
Afin de bénéficier au mieux des outils pédagogiques que sont les tutoriels, les cours et les séances encadrées, je vous propose l’organisation suivante :
Je le répète donc, une des clefs essentielles de la réussite à ce cours est la régularité de votre travail et de votre progression. Mes collègues ont constaté avec regret lors des années précédentes que certaines et certains d’entre vous ne commencent réellement à travailler cette matière qu’au milieu du projet. Il est souvent alors déjà bien trop tard pour combler l’importance des lacunes et les résultats s’en ressentent gravement. N’attendez pas non plus l’approche du midterm pour nous faire part de vos éventuelles difficultés. Nous sommes à votre écoute dès le départ pour vous aider à les surmonter.
Il ne me reste maintenant plus qu’à vous souhaiter un bon apprentissage.