Teacher(s)
Language
English
> French-friendly
> French-friendly
Prerequisites
Required : concepts, paradigms, and semantics of programming languages as targeted in course LINFO1104
Main themes
In the course of a career, a computer scientist or software engineer will be confronted with many different programming languages and paradigms. To make informed design choices when selecting a particular language, he or she must understand the principles underlying how programming language features are defined, implemented and used.
This course will examine, from a historical perspective, the guiding principles of the major programming paradigms, starting from the earliest programming languages until the most recent ones. As such it will highlight the major principles, strengths and differences of different programming languages and paradigms.
This course will examine, from a historical perspective, the guiding principles of the major programming paradigms, starting from the earliest programming languages until the most recent ones. As such it will highlight the major principles, strengths and differences of different programming languages and paradigms.
Learning outcomes
At the end of this learning unit, the student is able to : | |
Given the learning outcomes of the "Master in Computer Science and Engineering" program, this course contributes to the development, acquisition and evaluation of the following learning outcomes:
|
|
Content
Students completing this course successfully will be able to:
- describe and differentiate some main programming paradigms (such as: functional programming, logic programming, object-oriented programming, reflection and metaprogramming)
- determine what programming paradigm a given program or programming language belongs to;
- identify and discuss the design principles of a given programming language or paradigm;
- choose a language or paradigm suitable for solving and particular problem and argue this choice;
- write small programs in the different languages and paradigms seen in the course;
- compare different programming languages and paradigms from the point of view of their underlying design principles;
- understand the impact of different language design choices.
Teaching methods
The course will consist of traditional theory sessions in which the characteristics and guiding principles of different programming languages and paradigms are explored in detail. The practical sessions complement these more theoretical course sessions with hands-on programming exercises in a selection of programming languages and paradigms seen in the theory course.
Evaluation methods
Evaluation Methods
Throughout the semester, alongside lectures and laboratory sessions, students will work in pairs to study several programming languages and programming paradigms covered in this course. To this end, they will complete three programming assignments in three different languages, each representative of one of these paradigms.
The grade associated with this continuous assessment is individualized according to each student's level of involvement within their pair during the semester. Assignments will be evaluated through code reviews, interviews, and presentations conducted by the instructor and teaching assistants.
To each assignment is associated a written exam covering the corresponding programming language and paradigm.
Use of Artificial Intelligence Tools
As one of the main objectives of this course is to learn how to program and reason within different programming paradigms, the use of artificial intelligence-based programming assistants for completing the assignments is prohibited.
All submitted code must be written by and fully understood by the students. Students are responsible for the content and quality of their work and must be able to explain and justify any part of the submitted code.
For pair assignments, both students are expected to have full command of the entire codebase produced and jointly assume responsibility for it.
Submitted work must reflect the student's actual knowledge, skills, effort, and level of mastery of the intended learning outcomes. Suspected use of AI-based code generation tools may be considered an academic irregularity and may lead to the consequences provided for under the applicable regulations. In addition, the teaching team reserves the right to verify a student's effective understanding of the submitted work through an additional oral assessment.
Calculation of the Final Grade
The assessment consists of:
P_i = 2/3 M_i + 1/3 E_i if E_i ≥ 10/20
P_i = 1/3 M_i + 2/3 E_i if E_i < 10/20
The final course grade N is then: N = ( P_1 + P_2 + P_3 ) / 3
This mechanism aims to place greater value on the work completed during the semester when the corresponding exam component has been passed, while giving greater weight to the exam when it has not been passed.
Resit Examination Session
A student who does not pass the course (N < 10) must individually retake, during the resit examination session, each language for which the score P_i is below 10/20. This involves redoing both the corresponding programming assignment and the associated part of the written examination.
Throughout the semester, alongside lectures and laboratory sessions, students will work in pairs to study several programming languages and programming paradigms covered in this course. To this end, they will complete three programming assignments in three different languages, each representative of one of these paradigms.
The grade associated with this continuous assessment is individualized according to each student's level of involvement within their pair during the semester. Assignments will be evaluated through code reviews, interviews, and presentations conducted by the instructor and teaching assistants.
To each assignment is associated a written exam covering the corresponding programming language and paradigm.
Use of Artificial Intelligence Tools
As one of the main objectives of this course is to learn how to program and reason within different programming paradigms, the use of artificial intelligence-based programming assistants for completing the assignments is prohibited.
All submitted code must be written by and fully understood by the students. Students are responsible for the content and quality of their work and must be able to explain and justify any part of the submitted code.
For pair assignments, both students are expected to have full command of the entire codebase produced and jointly assume responsibility for it.
Submitted work must reflect the student's actual knowledge, skills, effort, and level of mastery of the intended learning outcomes. Suspected use of AI-based code generation tools may be considered an academic irregularity and may lead to the consequences provided for under the applicable regulations. In addition, the teaching team reserves the right to verify a student's effective understanding of the submitted work through an additional oral assessment.
Calculation of the Final Grade
The assessment consists of:
- Three programming assignments M_i, one for each of the three languages studied;
- An individual written examination consisting of three parts E_i, each corresponding to one of the three languages studied.
P_i = 2/3 M_i + 1/3 E_i if E_i ≥ 10/20
P_i = 1/3 M_i + 2/3 E_i if E_i < 10/20
The final course grade N is then: N = ( P_1 + P_2 + P_3 ) / 3
This mechanism aims to place greater value on the work completed during the semester when the corresponding exam component has been passed, while giving greater weight to the exam when it has not been passed.
Resit Examination Session
A student who does not pass the course (N < 10) must individually retake, during the resit examination session, each language for which the score P_i is below 10/20. This involves redoing both the corresponding programming assignment and the associated part of the written examination.
Other information
Background :
- Having a healthy interest in programming language concepts, such as seen in earlier programming-language oriented courses.
- The more different programming languages a student has been confronted with before, the more he or she will appreciate this course.
Online resources
The course slides as well as other relevant and practical information related to the course will be accessible on Moodle. The same platform will also be the means of communication between the teacher(s) and the students.
Bibliography
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.
Faculty or entity