
Bienvenue#
Bienvenue dans ce nouveau cours d’introduction au génie logiciel (GL).
Ce cours adopte une approche qui se distingue de la présentation traditionnelle du génie logiciel, souvent centrée sur les formalismes et les diagrammes. Trois idées guident sa conception :
La culture générale technologique. Le génie logiciel est un domaine vaste, et personne ne peut prétendre en maîtriser tous les aspects. Mais nous croyons qu’il est important de se construire un réseau d’idées et de connaissances, et d’avoir au moins un modèle mental de base pour la plupart des grands domaines et des grandes idées. Savoir qu’un concept existe, comprendre à quoi il sert et comment il se relie aux autres, c’est souvent suffisant pour poser les bonnes questions et approfondir au besoin. Ce cours vise à instiller ce goût et cette curiosité pour la culture technologique au sens large.
La perspective historique. Nous croyons que les contextes historiques des idées et des innovations en informatique sont fascinants quand on prend le temps de s’y attarder : on découvre que certaines idées ont des vies étonnamment longues, que des problèmes qu’on croyait récents se posaient déjà il y a des décennies, et que comprendre ces origines éclaire la pratique actuelle. Cela permet également de faire des liens profonds entre des idées qui peuvent parfois apparaître assez éloignées, ou séparées dans le temps, et de constater que plusieurs thèmes importants reviennent sans cesse, sous différentes formes.
L’expérience directe. Le cours contient de nombreux exemples et tutoriels détaillés, car il nous apparaît essentiel de vous donner une expérience directe des outils et des techniques importants, plutôt que de simplement les décrire. Le tutoriel est une forme d’apprentissage omniprésente dans la culture de l’internet, et ce cours se réclame particulièrement de cette culture, où le partage de connaissances pratiques est une valeur centrale. Nous vous encourageons d’ailleurs fortement à explorer par vous-mêmes et à faire vos propres expériences : les outils et les concepts présentés ici ne sont qu’un échantillon dans un vaste océan de possibilités, et la curiosité autonome est une compétence fondamentale en génie logiciel.
Les modules#
Le cours est divisé en six modules, qui couvrent les grands domaines du génie logiciel :
Le génie logiciel : une introduction au domaine, à sa problématique centrale, et à l’histoire des idées qui l’ont façonné.
Concevoir un logiciel correct : les outils et les pratiques du programmeur individuel : les tests, le versioning avec git, la gestion des dépendances et l’intégration continue.
Passer du programme au système : le passage du programme individuel au système logiciel, avec ses multiples composantes en interaction. On y aborde l’architecture, les APIs, les interfaces utilisateur et les données.
Construire un logiciel en équipe : la collaboration à l’aide de GitHub, les méthodes agiles et la gestion de projet.
Faire vivre un logiciel : l’opération d’un logiciel en production, le déploiement, l’infonuagique, l’observabilité et la sécurité.
Le logiciel dans le monde : la culture de l’open source, l’économie du logiciel, et le développement assisté par l’IA.
Les travaux#
Tout au long du cours, vous serez amenés à développer une application web complète, de la conception au déploiement. Vous devrez d’abord imaginer une application transactionnelle, suffisamment complexe, intéressante et novatrice, puis en extraire les spécifications, produire un document de conception, et la développer progressivement en mettant en pratique les concepts et les techniques vus dans chaque module : versioning avec git, gestion de projet, base de données, authentification, paiement en ligne (optionnel) et déploiement automatisé sur une plateforme d’infonuagique. Le travail peut se faire individuellement ou en petites équipes. Les détails complets se trouvent dans la section Travaux notés.