Software construction
CS-214 / 8 crédits
Enseignant(s): Kuncak Viktor, Odersky Martin, Pit-Claudel Clément
Langue: Anglais
Summary
Learn how to design and implement reliable, maintainable, and efficient software using a mix of programming skills (declarative style, higher-order functions, inductive types, parallelism) and fundamental software construction concepts (reusability, abstraction, encapsulation, composition, proofs)
Content
Functional programming:
- Functional programming paradigm
- Recursion and tail-recursion
- Evaluation strategies, lazy evaluation, substitution model
- Modularity, data abstraction, representation independence
- Subtyping, inheritance, type classes
- Polymorphism, variance
- Structural induction
- Stateless parallelism, map-reduce, associative operations
- Effects: state, exceptions
- Documentation, tests, specification
- Interpreters and program semantics
Software engineering:
- Specifications: Documentation, requirements, properties
- Verification: Debugging, tests, monitoring, property-based testing, proofs
- Modularity: Code evolution and refactoring
- Collaboration: Version control, changelogs
Learning Prerequisites
Required courses
Any previous programming course
Recommended courses
CS-107 Introduction à la programmation
CS-108 Pratique de la programmation orientée-objet
Important concepts to start the course
Loops, conditionals, variable and type declarations, computing mathematical expressions
Learning Outcomes
- Implement reliable, efficient, and maintainable software
- Identify data types and operations that lead to computational solutions
- Argue that an solution is correct
- Transform a program to change its behavior in a desirable way
- Design and implement data-parallel software using parallel collections
Teaching methods
- Ex cathedra (live lectures)
- Recorded videos
- Exercise and lab sessions
- Online discussions
Expected student activities
- Attending lectures
- Watching and understanding recorded videos
- Solving exercises individually or in groups
- Completing individual graded programming assignments (labs / mini-projects)
- Completing midterm and end-of-semester exams
Assessment methods
- 30% Midterm exam during the semester
- 40% Final exam during the exam session
- 30% Programming assignments (labs)
Supervision
Office hours | Yes |
Assistants | Yes |
Forum | Yes |
Prerequisite for
CS-320 Computer language processing
CS-311 The Software enterprise - from ideas to products
CS-452 Foundations of software
CS-550 Formal verification
Dans les plans d'études
- Semestre: Automne
- Forme de l'examen: Ecrit (session d'hiver)
- Matière examinée: Software construction
- Cours: 3 Heure(s) hebdo x 14 semaines
- Exercices: 2 Heure(s) hebdo x 14 semaines
- Labo: 3 Heure(s) hebdo x 14 semaines
- Type: obligatoire
- Semestre: Automne
- Forme de l'examen: Ecrit (session d'hiver)
- Matière examinée: Software construction
- Cours: 3 Heure(s) hebdo x 14 semaines
- Exercices: 2 Heure(s) hebdo x 14 semaines
- Labo: 3 Heure(s) hebdo x 14 semaines
- Type: optionnel
- Semestre: Automne
- Forme de l'examen: Ecrit (session d'hiver)
- Matière examinée: Software construction
- Cours: 3 Heure(s) hebdo x 14 semaines
- Exercices: 2 Heure(s) hebdo x 14 semaines
- Labo: 3 Heure(s) hebdo x 14 semaines
- Type: optionnel
- Semestre: Automne
- Forme de l'examen: Ecrit (session d'hiver)
- Matière examinée: Software construction
- Cours: 3 Heure(s) hebdo x 14 semaines
- Exercices: 2 Heure(s) hebdo x 14 semaines
- Labo: 3 Heure(s) hebdo x 14 semaines
- Type: optionnel
- Semestre: Automne
- Forme de l'examen: Ecrit (session d'hiver)
- Matière examinée: Software construction
- Cours: 3 Heure(s) hebdo x 14 semaines
- Exercices: 2 Heure(s) hebdo x 14 semaines
- Labo: 3 Heure(s) hebdo x 14 semaines
- Type: optionnel
- Semestre: Automne
- Forme de l'examen: Ecrit (session d'hiver)
- Matière examinée: Software construction
- Cours: 3 Heure(s) hebdo x 14 semaines
- Exercices: 2 Heure(s) hebdo x 14 semaines
- Labo: 3 Heure(s) hebdo x 14 semaines
- Type: optionnel
Semaine de référence
Lu | Ma | Me | Je | Ve | |
8-9 | |||||
9-10 | |||||
10-11 | |||||
11-12 | |||||
12-13 | |||||
13-14 | |||||
14-15 | |||||
15-16 | |||||
16-17 | |||||
17-18 | |||||
18-19 | |||||
19-20 | |||||
20-21 | |||||
21-22 |