Be Software Architecture Wise
Be Wise Apps

Read in English · Leer en español · Auf Deutsch lesen

Chapitre 0 sur 12 · Débutant

Pour commencer : comment fonctionne un logiciel

Ce chapitre est la porte d’entrée du cours. Il part du principe que vous avez déjà utilisé des applications et des sites web sans jamais programmer, et il explique depuis la base ce qu’est un logiciel, comment il représente et traite les données, comment le code est organisé, comment les ordinateurs communiquent en réseau, où les données sont stockées, comment des systèmes distincts collaborent grâce aux API, ce que sont les serveurs et le cloud, et comment les équipes construisent et mettent en production les logiciels. Les ingénieurs expérimentés peuvent le parcourir rapidement comme un vocabulaire commun ; tous les autres devraient le lire avant le chapitre 1, car chaque chapitre suivant s’appuie sur ces idées.

Introduction vidéo au chapitre 0

6 min · narré en anglais, avec sous-titres
Écouter seulement (audio)
Lire la transcription

Bienvenue dans Be Software Architecture Wise, et dans le chapitre zéro : Commencez ici, comment fonctionnent les logiciels. Ce chapitre est la porte d’entrée de tout le cours. Il part du principe que vous avez déjà utilisé des applications et des sites web, mais que vous n’avez jamais écrit de programme. À la fin, vous aurez le vocabulaire sur lequel s’appuie chaque chapitre suivant.

L’architecture logicielle porte sur les grandes décisions d’un système logiciel : quelles sont ses parties principales, comment elles communiquent entre elles, où vivent les données, et quelles qualités, comme la rapidité, la fiabilité et la sécurité, la conception doit atteindre. Ces décisions se prennent dans un vocabulaire : processus et threads, index et caches, interfaces et dépendances, transactions, API et conteneurs. Les architectes emploient ces mots avec précision, il vous faut donc savoir ce que chacun signifie vraiment, et ce qu’il coûte. Ce chapitre est écrit pour quelqu’un qui n’a jamais programmé. Chaque section commence par une analogie de la vie quotidienne avant d’expliquer le mécanisme réel. Si vous êtes déjà ingénieur, vous pouvez le parcourir rapidement comme un vocabulaire commun.

Ce chapitre ne s’appuie sur rien du tout. Il ne suppose aucune formation technique, ce qui en fait le bon point de départ. Il mène directement au chapitre 1, qui utilise ces briques de base pour expliquer ce qu’est l’architecture logicielle, et pourquoi les grandes décisions comptent autant. Lorsqu’un sujet mérite plus de profondeur, le chapitre renvoie à la section ultérieure qui le traite correctement.

Le chapitre compte huit sections, réparties en trois groupes. Les trois premières restent à l’intérieur d’une seule machine. La section zéro point un explique comment le code écrit par des personnes devient des instructions qu’un processeur peut exécuter, et pourquoi les données en mémoire disparaissent au redémarrage. La section zéro point deux présente les structures de données courantes, comme les listes, les dictionnaires et les files. À l’aide de la notation grand O, elle explique pourquoi une façon de retrouver un client reste rapide avec un million de clients, alors qu’une autre s’effondre. La section zéro point trois monte des fonctions aux modules, aux objets et aux interfaces. Elle explique la différence entre une bibliothèque et un framework, met en garde contre le coût caché des dépendances et donne un premier aperçu du couplage et de la cohésion.

Les trois sections suivantes quittent la machine unique. La section zéro point quatre explique comment le DNS transforme des noms en adresses, et comment fonctionnent les requêtes et les réponses HTTP. Elle montre aussi que le délai du réseau a un plancher fixé par la vitesse de la lumière. La section zéro point cinq couvre les fichiers et les bases de données : tables, requêtes SQL, index et transactions, illustrées par un virement bancaire qui ne doit jamais se faire à moitié. Elle présente aussi les principales bases de données non relationnelles, et les cas où chacune convient. La section zéro point six explique comment des systèmes distincts coopèrent grâce aux API. Une API est un contrat. Vous verrez la différence entre attendre une réponse et envoyer un message par une file, et pourquoi casser une API pénalise tous ceux qui en dépendent.

Les deux dernières sections portent sur l’endroit où s’exécutent les logiciels et sur la façon dont on les construit. La section zéro point sept montre ce qu’est vraiment un serveur, comment les machines virtuelles et les conteneurs permettent à de nombreuses charges de travail de partager une même machine physique, et ce que vendent les fournisseurs de cloud. La section zéro point huit passe de la technologie à la pratique : exigences, gestion de versions, tests, intégration et livraison continues, et méthodes de travail. Elle se termine en suivant un appui sur « Commander » dans une app de livraison de repas à travers chaque partie du chapitre.

Ce parcours mérite un premier coup d’œil dès maintenant, car il montre où mène tout le chapitre. Un client a rempli son panier et appuie sur « Commander ». Suivez les numéros. D’abord, le téléphone demande au DNS l’adresse de l’entreprise. Puis il envoie la commande en HTTPS à un équilibreur de charge situé dans la région cloud de l’entreprise, où la connexion sécurisée se termine. L’équilibreur de charge transmet la requête au service des commandes. Ce service appelle un prestataire de paiement externe par son API, puis enregistre la commande dans sa base de données au sein d’une transaction. Ensuite, il dépose un message OrderPlaced dans une file. Un service de notifications le récupère et demande au service push d’Apple ou de Google d’envoyer une notification sur le téléphone du client. Remarquez les flèches en pointillés : cette dernière partie est asynchrone. Si le service de notifications est en panne, les commandes sont quand même prises, et les messages attendent simplement dans la file. Quelqu’un a dû décider cela, et prendre des décisions de ce genre, c’est de l’architecture.

Voici l’idée à retenir de tout le chapitre. Chaque système qu’il présente est construit à partir de parties qui cachent leurs détails derrière une frontière convenue : un module derrière son interface, une base de données derrière SQL, un prestataire de paiement derrière son API. C’est aux frontières que se situent les compromis importants. Un appel de fonction est rapide et fiable, alors qu’un appel à travers le réseau est plus lent et peut échouer. Une dépendance épargne des efforts mais apporte des risques. Un cache fait gagner du temps mais peut servir des données périmées. Décider où placer ces frontières, ce qui les traverse, et quels compromis accepter, c’est cela, l’architecture logicielle. Chaque section se termine par une courte note sur l’importance de son sujet pour l’architecture, alors guettez-les.

Comment l’étudier ? Si le sujet est nouveau pour vous, lisez les sections dans l’ordre, car chacune s’appuie sur la précédente. Si vous en connaissez déjà une partie, piochez dans les sections dont vous avez besoin. La lecture du chapitre entier prend environ trois heures. Chaque section se termine par quelques questions d’autoévaluation. Répondez-y de tête avant de regarder les réponses. Elles vous montrent vite ce que vous avez retenu, et ce qui mérite d’être relu. Quand vous êtes prêt, vous pouvez passer le test facultatif du chapitre : vingt questions à choix multiples et deux réponses rédigées. Comptez environ quarante-cinq minutes. La note de réussite est de quatre-vingts pour cent. Avant de commencer le test, vérifiez que vous savez répondre aux questions d’autoévaluation de chaque section, et relisez le résumé de toute section qui vous semble encore floue.

Voilà la carte du chapitre zéro. Commencez par la section zéro point un, où nous verrons ce qu’est un logiciel, et ce qui se passe réellement quand un ordinateur exécute un programme. À très vite.

Télécharger le chapitre (PDF)Lire dans l’application

En un coup d’œil

Vous apprendrez à

  • Expliquer ce qui se passe, étape par étape, quand un programme s’exécute, du code source jusqu’au processeur en passant par le système d’exploitation.
  • Distinguer les structures de données courantes et utiliser la notation grand O pour prévoir comment une opération ralentit quand les données augmentent.
  • Décrire comment les fonctions, les modules, les objets et les interfaces découpent le code, et la différence entre une bibliothèque et un framework.
  • Suivre ce qui se passe quand quelqu’un saisit une adresse web, en nommant DNS, TCP, TLS et HTTP et l’apport de chacun.
  • Comparer les fichiers, les bases de données relationnelles et les principales familles NoSQL, et expliquer ce que garantit une transaction.
  • Expliquer ce qu’est une API, comment fonctionne un appel REST sur HTTP et quand un message asynchrone convient mieux qu’un appel synchrone.
  • Distinguer les serveurs physiques, les machines virtuelles, les conteneurs et les principaux modèles de services cloud.
  • Suivre une seule action d’un utilisateur à travers toutes les couches d’un système réel, et reconnaître les décisions qui composent son architecture.

Avant de commencer

Aucun. Savoir utiliser des applications et des sites web suffit.

Durée

Environ 3 heures de lecture ; 45 minutes pour le test.

Termes clés

Processus · Compilateur et interpréteur · Structure de données · Notation grand O (Big-O) · Interface · Framework · Dépendance · Adresse IP et port · DNS · HTTP et HTTPS · Latence · Base de données et transaction · API · Conteneur et cloud

Pourquoi commencer ici

L’architecture logicielle porte sur les grandes décisions d’un système logiciel : quelles sont ses parties principales, comment elles communiquent entre elles, où vivent les données et quelles qualités, comme la rapidité, la fiabilité et la sécurité, la conception doit atteindre. Ces décisions se prennent dans un vocabulaire : processus et threads, index et caches, interfaces et dépendances, HTTP et DNS, transactions, API, conteneurs et pipelines. Les architectes emploient ces mots avec précision, et une grande partie du cours suppose de savoir ce que chacun signifie vraiment et ce qu’il coûte.

Ce chapitre fournit ce vocabulaire. Il est écrit pour quelqu’un qui n’a jamais programmé, et chaque section commence par une courte analogie de la vie quotidienne avant d’expliquer le mécanisme réel. Il se veut aussi assez exact pour qu’un ingénieur expérimenté qui le lit soit d’accord avec chaque affirmation. Lorsqu’un sujet mérite beaucoup plus de profondeur, le chapitre l’introduit et renvoie à la section ultérieure qui le traite correctement.

Un programme sur un ordinateur

Les trois premières sections restent à l’intérieur d’une seule machine. Ce qu’est un logiciel explique la différence entre le matériel et le logiciel, comment le code source écrit par des personnes devient des instructions qu’un processeur peut exécuter (grâce aux compilateurs, aux interpréteurs et aux machines virtuelles), ce que fait le système d’exploitation, et pourquoi les données en mémoire disparaissent au redémarrage alors que les données sur disque sont conservées. La section se termine en suivant un programme Python de neuf lignes à chaque étape de sa vie.

Données et algorithmes montre comment les ordinateurs représentent les nombres et le texte, et présente les structures de données courantes : listes, dictionnaires, ensembles, files, piles, arbres et graphes. À l’aide de la notation grand O, elle explique pourquoi une façon de retrouver un client reste rapide avec un million de clients alors qu’une autre s’effondre, et pourquoi les index et les caches existent. Organiser le code monte ensuite des fonctions aux modules, aux objets et aux interfaces, explique la différence entre une bibliothèque et un framework, met en garde contre le coût caché des dépendances et donne un premier aperçu du couplage et de la cohésion, les deux idées qui traversent toute la conception logicielle.

Plusieurs ordinateurs qui travaillent ensemble

Les trois sections suivantes quittent la machine unique. Comment les ordinateurs communiquent explique les paquets, les adresses IP et les ports, TCP et UDP, comment le DNS transforme des noms en adresses, et comment fonctionnent les requêtes et les réponses HTTP, sécurisées par TLS. Elle souligne aussi un point qui surprend beaucoup de gens : la latence a un plancher fixé par la vitesse de la lumière, si bien qu’un aller-retour entre Londres et Sydney ne peut jamais être rapide, quelle que soit la bande passante que vous achetez.

Stocker les données couvre les fichiers et les bases de données : tables, clés et requêtes SQL, index, transactions et garanties ACID (illustrées par un virement bancaire qui ne doit jamais se faire à moitié), ainsi que les principales familles NoSQL et les cas où chacune convient. API et intégration explique comment des systèmes distincts coopèrent : l’API comme contrat, REST et JSON sur HTTP, clés et jetons, webhooks, la différence entre attendre une réponse et envoyer un message par une file, et pourquoi les changements incompatibles d’une API pénalisent tous ceux qui en dépendent.

Où s’exécutent les logiciels et comment on les construit

Les serveurs et le cloud montre ce qu’est vraiment un serveur, comment les machines virtuelles et les conteneurs permettent à de nombreuses charges de travail de partager une même machine physique, et ce que vendent les fournisseurs de cloud : de la location de machines brutes jusqu’à l’exécution de votre code uniquement à l’arrivée d’un événement. Elle présente les régions, les zones de disponibilité, les réseaux de diffusion de contenu et les deux façons de faire face à la croissance : une machine plus grosse ou davantage de machines. Comment on construit un logiciel passe de la technologie à la pratique : exigences, gestion de versions avec Git, pyramide des tests, environnements, intégration et livraison continues, méthodes agiles et DevOps. Elle se termine en suivant un appui sur « Commander » dans une app de livraison de repas à travers chaque partie du chapitre, du téléphone au DNS, au HTTPS, à un équilibreur de charge, aux services, à une transaction en base de données, à un prestataire de paiement, à une file et à une notification push.

L’idée à retenir

Chaque système de ce chapitre est construit à partir de parties qui cachent leurs détails derrière une frontière convenue : le système d’exploitation derrière les appels système, un module derrière son interface, un serveur web derrière HTTP, une base de données derrière SQL, un prestataire de paiement derrière son API, une plateforme cloud derrière ses services. Les frontières permettent de construire de grands systèmes sans comprendre chaque détail, et c’est là que se situent les compromis importants : un appel de fonction est rapide et fiable, alors qu’un appel à travers le réseau est plus lent et peut échouer ; une dépendance épargne des efforts mais apporte des risques ; un cache fait gagner du temps mais peut servir des données périmées.

Décider où placer ces frontières, ce qui les traverse et quels compromis accepter, c’est cela, l’architecture logicielle. Chaque section se termine par une courte note sur l’importance de son sujet pour l’architecture, et le chapitre 1 commence exactement là où celui-ci s’arrête.

Les 8 sections

0.1 · Débutant · 15 minCe qu’est un logicielCe que sont le matériel et le logiciel, comment le code source devient des instructions qu’un processeur peut exécuter, ce que fait le système d’exploitation et ce qui se passe réellement, étape par étape, quand un petit programme Python s’exécute.Lire →0.2 · Débutant · 16 minDonnées et algorithmesComment les ordinateurs représentent les nombres et le texte, les structures de données courantes (listes, dictionnaires, files, arbres, graphes), ce qu’est un algorithme et comment la notation grand O explique pourquoi certains systèmes ralentissent quand le volume de données augmente.Lire →0.3 · Débutant · 16 minOrganiser le codeComment les programmeurs découpent le code en fonctions, modules, objets et interfaces ; la différence entre une bibliothèque et un framework ; les avantages et les risques des dépendances ; et un premier aperçu du couplage et de la cohésion.Lire →0.4 · Débutant · 18 minComment les ordinateurs communiquentComment les données traversent internet en paquets, à quoi servent les adresses IP, les ports, TCP, UDP et le DNS, comment fonctionnent les requêtes HTTP et HTTPS, pourquoi la latence a un plancher fixé par la physique et ce qui se passe quand vous tapez une adresse web.Lire →0.5 · Débutant · 18 minStocker les donnéesPourquoi les systèmes ont besoin de bases de données plutôt que de simples fichiers, comment fonctionnent les tables relationnelles, les clés, SQL, les index et les transactions ACID, les principales familles NoSQL et pourquoi les sauvegardes doivent être testées.Lire →0.6 · Débutant · 17 minAPI et intégrationCe qu’est une API et pourquoi c’est un contrat, comment les API REST utilisent les URL, les verbes HTTP, les codes d’état et JSON, et comment les clés, les webhooks, les files, les versions et les limites de débit façonnent l’intégration.Lire →0.7 · Débutant · 18 minServeurs et cloudCe que sont les serveurs et les centres de données, comment les machines virtuelles et les conteneurs partagent le matériel, ce que l’IaaS, le PaaS, le SaaS et le serverless confient au fournisseur, et comment s’articulent régions, zones, CDN et mise à l’échelle.Lire →0.8 · Débutant · 20 minComment les logiciels sont construitsComment les équipes transforment des besoins en récits utilisateur, collaborent avec Git et les pull requests, testent à plusieurs niveaux, livrent grâce au CI/CD et aux environnements, et comment un simple appui dans une app de livraison de repas traverse chaque partie d’un système.Lire →

Test du chapitre

Vérifiez votre compréhension du chapitre 0

Facultatif : 20 questions à choix multiples et 2 courtes réponses rédigées, tirées à chaque fois d’une banque de 72 questions. Note de réussite : 80 %. Réussir tous les tests de chapitre, puis l’évaluation finale, donne droit au Certificat de fin de formation Be Wise.

Passer le test du chapitre 0 dans l’app

Lectures complémentaires