EPFL CS-112(j) POO

Course Website

Cours : Jeudi 8h15–9h00, CM 1 4

Exercices : Jeudi 9h15–11h, INF 3, BC 07-08

Accueil

Site Moodle

Tutoriels et références

Séries

Projet

Présentation générale du cours

Introduction

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” !

Sommaire

Un cours pourquoi ? Pour qui ?

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 :

  1. d’enseigner les notions fondamentales communes à la plupart des langages de programmation “orientés objet” ;
  2. d’enseigner les méthologies principales de développement logiciel, incluant modularisation, conception et tests ;
  3. et de les illustrer au moyen du langage Python.

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 :

Sous quelle forme le cours est-il donné ?

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.

Tutoriels

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.

Cours ex cathedra

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.

Exercices

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 :

Projet

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”.

Pas de MOOC ?

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.

Comment le cours est-il évalué ?

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.

Supports de cours

Forums

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.

Ordinateurs

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.

Tutoriels, séries et divers supports

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.

Organisation du travail

Considérations générales et conseils

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 :

Proposition d’un plan de travail

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 :

  1. Avant le cours en auditoire : suivre le ou les tutoriels proposés pour la semaine. Temps de travail estimé : entre 1h30 et 2h30.
  2. Jeudi 8h15 : assister au cours, poser des questions. Temps de travail : 45 min.
  3. Avant jeudi 9h15 : commencer des exercices. Temps de travail estimé : entre 30 min. et 1h30.
  4. Jeudi 9h15–11h00 : séance d’exercices. Temps de travail : 1h45 min.
  5. Entre le jeudi 12h00 et le moment où vous passez aux tutoriels de la semaine suivante : faire plus d’exercices, éventuellement reprendre des exercices des semaines antérieures. Temps de travail estimé : entre 30 min. et 1h30.
  6. Sur le reste de la semaine : avancer sur le projet (sur sa propre partie, ne pas faire le travail en double avec le binôme). Temps de travail estimé en moyenne par semaine sur le semestre : entre 45 min. et 1h30.

Le mot de la fin… ou plutôt du début !

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.