Enseignants
Langue
d'enseignement
d'enseignement
Préalables
Requis : concepts, paradigmes et sémantique des langages de programmation tels que visés par le cours LINFO1104
Thèmes abordés
Au cours de sa carrière, un informaticien ou ingénieur logiciel sera confronté à de nombreux langages et paradigmes de programmation. Pour faire des choix de conception éclairées lors de la sélection d'un langage particulier, il ou elle doit comprendre les principes qui sous-tendent la façon dont les fonctionnalités du langage de programmation sont définis, mis en oeuvre et utilisés.
Ce cours examinera, dans une perspective historique, les principes directeurs des grands paradigmes de programmation, à partir des premiers langages de programmation jusqu'aux plus récents. Comme tel, il mettra l'accent sur les grands principes, les points forts et les différences entre divers langages et divers paradigmes de programmation.
Ce cours examinera, dans une perspective historique, les principes directeurs des grands paradigmes de programmation, à partir des premiers langages de programmation jusqu'aux plus récents. Comme tel, il mettra l'accent sur les grands principes, les points forts et les différences entre divers langages et divers paradigmes de programmation.
Acquis
d'apprentissage
d'apprentissage
A la fin de cette unité d’enseignement, l’étudiant est capable de : | |
Eu égard au référentiel AA du programme « Master ingénieur civil en informatique », ce cours contribue au développement, à l'acquisition et à l'évaluation des acquis d'apprentissage suivants :
|
|
Contenu
Les étudiants qui terminent ce cours avec succès seront en mesure de:
- décrire et différencier les paradigmes de programmation abordés dans le cours (p.ex. la programmation fonctionnelle, la programmation logique, la programmation orientée objets, la réflexion et la métaprogrammation)
- déterminer à quel paradigme de programmation appartient un programme ou un langage de programmation donné ;
- identifier et discuter des principes de conception d'un langage ou d'un paradigme de programmation donné ;
- choisir un langage ou un paradigme adapté à la résolution d'un problème particulier et argumenter ses choix ;
- écrire de petits programmes dans les différents langages et paradigmes vus au cours ;
- comparer différents langages et paradigmes de programmation du point de vue de leurs principes de conception sous-jacents ;
- comprendre l'impact des différents choix de conception de langage.
Méthodes d'enseignement
Le cours consistera des cours magistraux traditionnels au cours desquelles les caractéristiques et les propriétés des différents langages et paradigmes de programmation seront explorés en détail. Les travaux pratiques complèteront ces cours plus théoriques avec des exercices et des missions de programmation plus pratiques dans une sélection de langages de programmation et de paradigmes vus dans le cours théorique.
Modes d'évaluation
des acquis des étudiants
des acquis des étudiants
Modalités d'évaluation
Tout au long du quadrimestre, en parallèle avec les cours et les laboratoires, les étudiant·es étudieront en binôme plusieurs langages et paradigmes de programmation abordés dans ce cours. À cette fin, ils réaliseront trois missions de programmation dans trois langages différents, représentatifs de ces paradigmes.
La note relative à cette évaluation continue est individualisée en fonction de l'implication de chaque étudiant·e au sein de son binôme durant le quadrimestre. Les missions seront évaluées au moyen de revues de code, d'entretiens et de présentations devant l'enseignant et les assistant·es du cours.
À chaque mission est associée un examen écrit portant sur le langage et le paradigme de programmation correspondants.
Utilisation d'outils d'intelligence artificielle
L'un des objectifs principaux de ce cours étant d'apprendre à programmer et à raisonner dans différents paradigmes de programmation, l'utilisation d'assistants de programmation basés sur l'intelligence artificielle pour la réalisation des missions est interdite.
Tout code soumis doit avoir été rédigé et être entièrement compris par les étudiant·es. Les étudiant·es sont responsables du contenu et de la qualité de leur travail et doivent être en mesure d'expliquer et de justifier toute partie du code remis.
Pour les travaux réalisés en binôme, les étudiant·es sont réputé·es maîtriser l'ensemble du code produit et en assument conjointement la responsabilité.
Les travaux remis doivent refléter les connaissances, compétences, efforts et le niveau réel de maîtrise des acquis d'apprentissage par l'étudiant·e. L'utilisation suspectée d'outils de génération de code basés sur l'intelligence artificielle pourra être considérée comme une irrégularité académique et entraîner les conséquences prévues par la réglementation applicable. En outre, l'équipe enseignante se réserve le droit de vérifier la maîtrise effective du travail remis au moyen d'une évaluation orale complémentaire.
Calcul de la note finale
L'évaluation comporte :
P_i = 2/3 M_i + 1/3 E_i si E_i >= 10/20
P_i = 1/3 M_i + 2/3 E_i si E_i < 10/20
La note finale N du cours est alors : N= (P_1 + P_2 + P_3) / 3
Ce mécanisme a pour objectif de valoriser davantage le travail réalisé durant le quadrimestre lorsque la partie correspondante de l'examen est réussie, tout en accordant un poids plus important à l'examen lorsque celle-ci n'est pas réussie.
Seconde session
Un étudiant ou une étudiante n'ayant pas réussi le cours devra représenter individuellement, en seconde session, chaque langage pour lequel la note P_i est inférieure à 10/20. Cela implique de refaire la mission de programmation correspondante ainsi que la partie associée de l'examen écrit.
Tout au long du quadrimestre, en parallèle avec les cours et les laboratoires, les étudiant·es étudieront en binôme plusieurs langages et paradigmes de programmation abordés dans ce cours. À cette fin, ils réaliseront trois missions de programmation dans trois langages différents, représentatifs de ces paradigmes.
La note relative à cette évaluation continue est individualisée en fonction de l'implication de chaque étudiant·e au sein de son binôme durant le quadrimestre. Les missions seront évaluées au moyen de revues de code, d'entretiens et de présentations devant l'enseignant et les assistant·es du cours.
À chaque mission est associée un examen écrit portant sur le langage et le paradigme de programmation correspondants.
Utilisation d'outils d'intelligence artificielle
L'un des objectifs principaux de ce cours étant d'apprendre à programmer et à raisonner dans différents paradigmes de programmation, l'utilisation d'assistants de programmation basés sur l'intelligence artificielle pour la réalisation des missions est interdite.
Tout code soumis doit avoir été rédigé et être entièrement compris par les étudiant·es. Les étudiant·es sont responsables du contenu et de la qualité de leur travail et doivent être en mesure d'expliquer et de justifier toute partie du code remis.
Pour les travaux réalisés en binôme, les étudiant·es sont réputé·es maîtriser l'ensemble du code produit et en assument conjointement la responsabilité.
Les travaux remis doivent refléter les connaissances, compétences, efforts et le niveau réel de maîtrise des acquis d'apprentissage par l'étudiant·e. L'utilisation suspectée d'outils de génération de code basés sur l'intelligence artificielle pourra être considérée comme une irrégularité académique et entraîner les conséquences prévues par la réglementation applicable. En outre, l'équipe enseignante se réserve le droit de vérifier la maîtrise effective du travail remis au moyen d'une évaluation orale complémentaire.
Calcul de la note finale
L'évaluation comporte :
- trois missions de programmation M_i, une pour chacun des trois langages étudiés ;
- un examen écrit individuel composé de trois parties E_i, chacune correspondant à l'un des trois langages étudiés.
P_i = 2/3 M_i + 1/3 E_i si E_i >= 10/20
P_i = 1/3 M_i + 2/3 E_i si E_i < 10/20
La note finale N du cours est alors : N= (P_1 + P_2 + P_3) / 3
Ce mécanisme a pour objectif de valoriser davantage le travail réalisé durant le quadrimestre lorsque la partie correspondante de l'examen est réussie, tout en accordant un poids plus important à l'examen lorsque celle-ci n'est pas réussie.
Seconde session
Un étudiant ou une étudiante n'ayant pas réussi le cours devra représenter individuellement, en seconde session, chaque langage pour lequel la note P_i est inférieure à 10/20. Cela implique de refaire la mission de programmation correspondante ainsi que la partie associée de l'examen écrit.
Autres infos
Préalable :
-
Avoir un intérêt pour les concepts des langages de programmation, comme vu dans des cours préalables.
-
Plus l'étudiant a été confronté à différents langages de programmation, plus il ou elle appréciera ce cours.
Ressources
en ligne
en ligne
Les transparents de cours ainsi que d'autres informations pertinentes et pratiques relatives au cours seront accessibles sur Moodle. La même plate-forme sera également le moyen de communication entre l'enseignant et les étudiants.
Bibliographie
References
As the programming languages studied in this course may vary from year to year, the recommended references for this course may also vary. Nevertheless, a very useful reference which covers a wide range of programming languages remains: "Principles of Programming Languages - Design, Evaluation and Implementation" by Bruce J. MacLennan.
Références
Comme les langages étudies peuvent varier d'un année à un autre, les références conseillés pour ce cours pourront varier également. Néanmoins, une référence très utile qui couvre un large éventail de langages de programmation reste : "Principles of Programming Languages - Design, Evaluation and Implementation" par Bruce J. MacLennan.
As the programming languages studied in this course may vary from year to year, the recommended references for this course may also vary. Nevertheless, a very useful reference which covers a wide range of programming languages remains: "Principles of Programming Languages - Design, Evaluation and Implementation" by Bruce J. MacLennan.
Références
Comme les langages étudies peuvent varier d'un année à un autre, les références conseillés pour ce cours pourront varier également. Néanmoins, une référence très utile qui couvre un large éventail de langages de programmation reste : "Principles of Programming Languages - Design, Evaluation and Implementation" par Bruce J. MacLennan.
Faculté ou entité
en charge
en charge