
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 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.
L’expérience directe. Le cours contient de nombreux 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.
L’exploration autonome. Nous vous encourageons 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.
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é.
L’écosystème et l’avenir du logiciel : 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 commerciale et transactionnelle, puis en extraire les spécifications, produire un document de conception, et la développer progressivement en mettant en pratique les concepts vus dans chaque module : versioning avec git, gestion de projet, base de données, authentification, paiement en ligne 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.