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.
Ces trois idées convergent vers une seule. Apprendre quelque chose, c’est en grande partie développer un sens de ce qui est possible : savoir qu’une chose peut se faire, à quel prix et avec quoi, avant même de savoir la faire soi-même. Ce sens compte aujourd’hui plus qu’il n’a jamais compté, et pour une raison paradoxale. Les outils qui écrivent, exécutent et corrigent du code à notre place nous donnent un pouvoir d’exécution que personne n’avait il y a quelques années. Mais ce pouvoir ne vaut que ce que vaut le sens du possible de celui qui le tient. On ne demande pas ce qu’on ne sait pas concevable, et on ne reconnaît pas une bonne réponse dans un domaine où l’on n’a jamais mis les pieds. C’est pourquoi ce cours est touffu, et l’assume : il contient beaucoup d’idées, d’outils et d’histoires, choisis pour vous donner le meilleur sens du possible avec le logiciel, celui qui fait la différence entre disposer d’un pouvoir et savoir quoi en faire.
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 programme correct : ce que le programmeur individuel doit savoir et savoir faire : la concurrence et le parallélisme, 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.
Le nuage ci-dessous rassemble les mots les plus fréquents de l’ensemble du cours, tous modules confondus, la taille de chacun étant proportionnelle au nombre de ses occurrences. C’est un portrait grossier, mais assez fidèle, de ce dont il sera question.
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.