Software construction
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
In the programs
- Semester: Fall
- Exam form: Written (winter session)
- Subject examined: Software construction
- Courses: 3 Hour(s) per week x 14 weeks
- Exercises: 2 Hour(s) per week x 14 weeks
- Lab: 3 Hour(s) per week x 14 weeks
- Type: mandatory
- Semester: Fall
- Exam form: Written (winter session)
- Subject examined: Software construction
- Courses: 3 Hour(s) per week x 14 weeks
- Exercises: 2 Hour(s) per week x 14 weeks
- Lab: 3 Hour(s) per week x 14 weeks
- Type: optional
- Semester: Fall
- Exam form: Written (winter session)
- Subject examined: Software construction
- Courses: 3 Hour(s) per week x 14 weeks
- Exercises: 2 Hour(s) per week x 14 weeks
- Lab: 3 Hour(s) per week x 14 weeks
- Type: optional
- Semester: Fall
- Exam form: Written (winter session)
- Subject examined: Software construction
- Courses: 3 Hour(s) per week x 14 weeks
- Exercises: 2 Hour(s) per week x 14 weeks
- Lab: 3 Hour(s) per week x 14 weeks
- Type: optional
- Semester: Fall
- Exam form: Written (winter session)
- Subject examined: Software construction
- Courses: 3 Hour(s) per week x 14 weeks
- Exercises: 2 Hour(s) per week x 14 weeks
- Lab: 3 Hour(s) per week x 14 weeks
- Type: optional
- Semester: Fall
- Exam form: Written (winter session)
- Subject examined: Software construction
- Courses: 3 Hour(s) per week x 14 weeks
- Exercises: 2 Hour(s) per week x 14 weeks
- Lab: 3 Hour(s) per week x 14 weeks
- Type: optional