Software Science and Technology (STL)
The Software Science and Technology (STL) program aims to train specialists in software development, with a solid foundation in programming languages and algorithmic methods. It is aimed at students interested in both the fundamental and technological aspects of computer science.
The training is focused on learning rigorous methods and tools for the design and development of complex software, as well as for the modeling and analysis of algorithmic problems from various application domains.
The STL program offers a research program (Algorithm and Programming Research) and two professional programs, one of which is traditional (Algorithm and Programming for Engineers) and the other is an apprenticeship program in partnership with the CFA INSTA.
Objectives
The program offers a combination of courses that cover both broad and specialized skills, particularly in the following areas:
- Software reliability and algorithms.
- Web programming, competition and mobility.
- Software engineering and development environments.
The professional and research paths are largely intertwined. The professional opportunities are those of specialists in software architecture and engineering tools, and of project managers with strong technical skills in algorithms and programming. The paths to research are not only aimed at further study in doctoral programs, but also have immediate outlets in the research centers of large companies, design offices, and small innovative and high-tech companies. The research areas covered are programming and software architectures, as well as algorithms, with very current problems related to, for example, concurrent programming or program reliability.
From the perspective of scientific knowledge, the training introduces algorithms and programming in depth, so that students will be able to apply their knowledge directly upon graduation. However, as our scientific field is constantly evolving, students must also grasp the fundamental, abstract concepts that will allow them to adapt to the important changes they will face throughout their career. Finally, the course addresses the practice and responsibility of project management, which is required for many of the positions offered upon graduation.
The first year M1 of the STL course complements the fundamentals of the discipline transversal to the Computer Science master's degree and also introduces a specialization. It is therefore based on a common curriculum that offers an important conformity of teachings with the other courses of the Computer Science master.
The year is composed of two distinct semesters (S1 and S2), insofar as they must be validated independently of each other. During each semester, the student must follow a number of UEs corresponding to 30 ECTS, each UE generally corresponding to 60 hours of teaching (generally 20 hours of courses + 40 hours of TD/TP) and being worth 6 ECTS.
First semester (M1-S1)
In semester M1-S1, students follow 6 UEs, including 2 compulsory UEs proposed by the STL course, 2 specific UEs and 2 UEs to be chosen among those proposed by the other courses of the Computer Science Master.
The 2 compulsory UEs are:
- ALGAV (Advanced Algorithms, 6 ECTS)
- The objective of this course (mandatory, prerequisite for S2) is to show how the use of advanced data structures (priority queues, search trees, hashing, digital trees) can optimize the performance of algorithms in various application domains such as the management and compression of massive data.
- DLP (Development of Programming Languages, 6 ECTS)
- This course (mandatory, prerequisite for S2) describes the design and implementation choices of high-level programming language features through a small untyped language in the class of Python. Starting from a reduced core, we progressively add increasingly complex features: loops, functions, first-class functions, exceptions, objects, coroutines. The course presents the implementation of these features within an interpreter written in Java and a compiler written in Java and generating C, providing an opportunity to compare very different languages. The course and practical sessions develop code reading skills, incremental feature addition in a project, and test-driven design.
The 2 specific UEs are:
- OUV (Opening and pre-requisites, 3 ECTS)
-
The opening course is divided into two parts. The first part corresponds to an upgrade of functional programming skills, a prerequisite for the STL track. The second part concerns the theme: computer science and society. The presented themes, which vary, may for example focus on the history of computer science, the links between logic and computer science, the philosophy of science, computer law, free software and open science, etc.
-
- ENG (English, 3 ECTS)
The 2 recommended optional courses are to be chosen (subject to availability) among:
- LS (Secure Software, 6 ECTS)
-
In this course, we address the issue of software safety, that is, ensuring certain properties such as the absence of type errors during execution, the absence of memory corruption, etc. The course is divided into two main parts. First, we will study safety from the perspective of software functionality. The objective is to link the software specification (its requirements) with its implementation. For this, we will rely on design by contract as well as model-based testing (MbT). In the second part, we will study the issue of safety from the perspective of the programming language, particularly the analyses performed at compile time and static program analysis. The Rust system language will be used to implement the various concepts covered in the course.
-
- LRC (Logic and Knowledge Representation - UE of the ANDROIDE course, 6 ECTS)
- NOYAU (Advanced architecture of system kernels - UE of the SAR path, 6 ECTS)
- PSCR (Concurrent and Distributed System Programming - UE of the SAR path, 6 ECTS)
- ARCHI (Processor Architecture and Optimization - UE of the SESI course, 6 ECTS)
- COMPLEX (Complexity, Probabilistic and Approximate Algorithms - UE of the SFPN course, 6 ECTS)
- MOGPL (Modeling, Optimization, Graphs, and Linear Programming - UE of the ANDROIDE course, 6 ECTS)
- Free UE: any UE from the global UE catalog of the Computer Science master, subject to approval of the course director (and compatibility of the timetable)
Second semester (M1-S2)
In the M1-S2 semester, students also take 6 UEs:
- A compulsory project UE: PSTL, 6 ECTS
- Four UE to be chosen among:
- APS (Program Analysis and Semantics, 6 ECTS)
-
This course offers an exploration of the defining elements of programming languages: syntax, typing, and semantics, both through their formal study and their implementation, by creating a typing/interpreting chain for a series of languages incrementally introducing imperative (loops, procedures) and functional (recursion, higher-order) features.
-
- CA (Advanced Compilation, 6 ECTS)
- This course has a dual objective. On the one hand, we study the compilation of high-level control structures (closures, exceptions, etc.) into code for virtual machines and their implementation, with a particular focus on automatic memory management. On the other hand, we transition to native code by applying analysis and optimization methods to the generated code.
- CPA (Design and Practice of Algorithms, 6 ECTS)
- This course involves the study and efficient implementation of common, i.e., non-trivial, algorithms in software development. The range of problems addressed will cover a wide panorama from text processing to algorithmic geometry. We will study both the structural foundation of these domains and algorithmic solutions, with particular attention to their implementation in modern programming languages.
- CPS (Components, 6 ECTS)
- The increasing complexity of computer systems and their rapid evolution have sparked increased interest in component-based software development. This interest is mainly driven by the reduction of development costs and the increase in software reliability. This course proposes to study and practice the underlying concepts of component-based software design and implementation (component-based software engineering or CBSE). This objective is achieved by introducing both the principles and tools of component-based design, associated verification techniques, and the implementation of architectures and applications based on distributed components.
- PAF (Advanced Functional Programming, 6 ECTS)
- Functional programming, based on the notions of composable functions and immutable data, is today an essential paradigm. All modern languages have functional traits (C++, Java, Javascript, etc.) and so-called functional languages (Ocaml, Haskell, Clojure, Scala, etc.) are now very present in the industrial environment and are booming. This advanced course will explain the "how" of functional programming, illustrating the concepts in different programming languages. It will also explain the "why", that is, the typical problems for which the functional style provides a better solution than other programming styles (imperative, object-oriented).
- PC3R (Concurrent Reactive, Distributed and Reticular Programming, 6 ECTS)
- The objective of this course is to understand the difficulty of concurrent programming and to explore different methods to program distributed systems more safely. After presenting the classic problems of the preemptive shared memory model, we focus on the comparison with the cooperative model (fair threads), then with the distributed memory model (go-routines), the synchronous model (Lustre/Esterel), and the development of reticular applications (illustrated by the realization of a Web application). We also study the feasibility of automatic safety analyses of concurrent applications (with the SPIN model-checker).
It is possible to choose a UE outside of the STL UE, in other courses of the Master, provided that the course director agrees.
The M2 year follows the schedule and general rules of the Master of Computer Science.
For STL, there are three tracks: R&D: Algorithms and Programming for Research, ING: Algorithms and Programming for Engineering and ALT: Work-study. Each stream defines specific rules for the arrangement of UE. This distinction between courses is actually more important for the organization than for the content. These are divided into three themes: 1. software reliability and algorithms, 2. web, competition and mobility and 3. Software Engineering and Development Environment. All of the M2-STL programs are shared between several courses as shown on the diagram. This consistency considers the periods spent in companies for the transitionnal course.
In the M2-S3 semester, students also take 6 UEs among :
- AAGA (Algorithm Analysis and Random Generation, 6 ECTS)
- ALASCA (Advanced Software Architecture for Autonomous Cyber-physical Systems, 6 ECTS)
- DAAR (Development of Reticular Application Algorithms, 6 ECTS)
- PPC (Concurrent Programming Paradigms, 6 ECTS)
- SVP (Program Specification and Validation, 6 ECTS)
- TAS (Typing and Static Analysis, 6 ECTS)
- TPEA (Professional Techniques - Environment and Applications, 6 ECTS)
- GPSTL (STL Project Management, 6 ECTS)
- PISTL (STL Engineering Project, 6 ECTS)
- GRAPA (Research Group in Advanced Algorithms and Programming, 6 ECTS)
The choice of UEs is limited in relation to the integrated program.
It is also possible to choose a UE outside the STL UEs mentioned below (in the other Master's courses or, for the research course, a UE from the MPRI), provided that the course director agrees.
Skills and knowleddge
At the end of the training, students will have acquired expertise in software engineering and thorough knowledge of software safety, while having been presented with the solutions to recent algorithmic problems.
The STL program trains specialists with strong technical skills in algorithms and programming, while providing them with a substantial amount of fundamental knowledge in these areas, facilitating career development and the subsequent acquisition of new skills.
Target audience and prerequisites:
The STL program is intended for students with a bachelor's degree or an equivalent degree in computer science or mathematics and computer science. The program is also open to students who have completed their first year of the Master's program in another school or university, in France or abroad. Admission is possible for candidates in continuing education, possibly applying for the VAE.
The prerequisites for the first year of STL are knowledge and concepts at the bachelor’s level, essentially in the fields of programming and algorithms: general concepts of the three types of languages (functional, imperative and object); comprehensive knowledge of at least one language (Java, OCaml or C); data structures and fundamental algorithms (lists, trees, graphs, searching and sorting); methods of designing algorithms (correction and complexity). Basic logic and compilation skills as well as operating system principles are also required, together with good external knowledge of Unix and program development tools.
Opportunities
Possible professions are those of experts in software engineering (mastery of the most recent application techniques and ability to take charge of the definition and management of development environments) as well as specialists in operating safety (design or validation of systems with numerous software components that must meet safety requirements). The research program not only facilitates the pursuit of a PhD in algorithms and programming, but also offers immediate openings in the research centers of large companies, design offices and software startups.
Contacts
Course leaders
Frédéric PESCHANSKI
Antoine GENITRINI
Secretary
Émilie AUGER