Lexique (1/2)

Cet article est la première partie d'un des projets les plus ambitieux de ce blog. La version complète se trouvera à cette adresse.


Bienvenue sur le lexique ITExpert, une page fourre-tout où j'ai défini un paquet de concepts que j'utilise fréquemment dans mes articles.

Comme tous les métiers techniques, le développement logiciel pullule de termes complexes ou ultra-spécifiques, qui ne sont pas forcément familiers à tout le monde, et qui changent de définition selon les personnes…

Cet article a pour but de leur donner un sens afin que vous, chers lecteurs, puissiez être à l'aise avec eux lorsque vous les croisez dans mes autres articles.

Avant de commencer, quelques avertissements :

  • Cet article se place strictement dans un contexte de développement logiciel. Certains de ces termes existent dans des contextes différents avec une autre définition, mais je n'en parlerais pas ici.
  • Certains de ces termes sont si flous que j'ai dû bricoler une définition maison, attendez-vous donc à un peu de subjectivité (les termes en question seront mis en rouge). Je ne prétends pas leur donner un sens définitif, et si vous n'êtes pas d'accord avec un d'entre eux, on peut en discuter tout en bas.

Incontournables

Logiciel

Alias : programme, software

Ensemble logique d'instruction permettant d'exploiter la force de travail d'un ordinateur.

Le terme est très générique puisqu'il inclut à peu près tout ce qui découle d'une codebase (et de ses dépendances). En vrac :

Le terme programme est généralement utilisé pour les petits logiciels comme les scripts. Mais la frontière entre les deux est si floue que c'est difficile de dire qu'est-ce qui est quoi (paradoxe sorites). Donc dans le doute, je préfère les mettre au même niveau.


Système d'exploitation

Alias : operating system, OS

Logiciel ou ensemble de logiciels qui s'interfacent entre le matériel de l'ordinateur (processeur, mémoire vive…), et le reste des logiciels installés (dont les nôtres).

C'est la clef de voute qui contrôle absolument tout, et qu'il faut prendre en compte lors du développement logiciel pour le choix des technologies à utiliser, mais aussi pour l'étude du marché.

Quelques exemples :


Application

Alias : logiciel applicatif, appli, app

Type de logiciel destiné à être directement utilisé par un humain via une interface graphique ou une invite de commande (CLI).


Développement logiciel

Alias : programmation, software development, software engineering

Conception et réalisation de logiciels.


Logiciels

Environnement

Contexte informatique dans lequel un logiciel s'exécute, et dont il dépend forcément. Les principaux acteurs sont :

  • Le système d'exploitation
  • L'architecture du processeur (x64, x86, ARM…)

Application de bureau

Type d'application destinée à un environnement de bureau (PC fixes, PC portables et autres écrans larges). Elle peut interagir directement avec l'OS (application native), ou passer par une interface (comme une machine virtuelle).

Les OS principaux sur PC sont Windows (Microsoft), macOS (Apple) et Linux (libre).


Application mobile

Type d'application destiné à un environnement mobile (smartphones et tablettes). Le principe est le même que pour les applications de bureau, les seules différences sont :

  • La taille de l'écran (plus de contraintes sur mobile)
  • Les systèmes d'exploitation

Les OS principaux sur mobile sont Android (Google) et iOS (Apple).


Application web

Type d'application distribuée par un serveur web sous forme de pages lisibles par un navigateur. Elles n'ont pas besoin de s'adapter à un OS, mais doivent suivre un ensemble de normes pour fonctionner de la même manière avec tous les navigateurs.


CLI

Alias : Command Line Interface, interface en lignes de commande

Type d'application qui ne possède pas d'interface graphique, et dont les fonctionnalités s'utilisent directement depuis une invite de commandes.

Ces applications sont destinées principalement aux développeurs ou aux administrateurs systèmes et réseaux, et possèdent une documentation riche (j'espère).

Quelques exemples :


Application embarquée

Type d'application optimisée pour un type de matériel aux fonctionnalités réduites, tel que des microcontrôleurs. Elles servent surtout à créer des automates, comme des robots, machines industrielles, systèmes de domotique…


Script

Type de petit logiciel qui s'exécute manuellement ou sur appel d'un évènement, comme :

  • Connexion à une session
  • Tous les jours à minuit
  • Quand un capteur détecte une présence…

Il s'exécute pendant une durée limitée, et s'arrête dès qu'il a terminé son travail.

Il tourne généralement en arrière-plan, mais peut parfois demander de l'interaction à l'utilisateur (mais c'est à éviter le plus possible)


Service (type de logiciel)

Type de logiciel qui s'exécute en tâche de fond, sans aucune interaction avec l'utilisateur. Ils interagissent énormément avec l'OS.


Bibliothèque

Alias : library

Type de logiciel dont le but est de servir de dépendance directe à un autre logiciel, typiquement, pour faciliter sa création en apportant des fonctionnalités génériques que les développeurs n'auront pas besoin de refaire.

Une codebase qui dépend de 3 bibliothèques : une pour la sérialisation/désérialisation en JSON, une pour les requêtes HTTP et une pour la connexion à une base de données MySQL.

Framework

Alias : cadriciel

Type de logiciel qui sert de modèle architectural à un autre logiciel. Il va apporter son lot de fonctionnalités, mais aussi créer un cadre de travail pour inciter les développements à coder proprement.

Exemples connus :


API REST

Type de logiciel ayant pour but de distribuer des données et recevoir des requêtes en respectant la norme REpresentational State Transfert (REST), qui apporte les contraintes suivantes :

  • Client-serveur : les données doivent être transmises par un serveur centralisé et ont pour but d'être consommées par un client.
  • Sans état : les données doivent transiter par un protocole sans état, où toutes les requêtes, même identiques, sont indépendantes les unes des autres.
  • Avec mise en cache : les clients peuvent mettre en cache les réponses, afin d'optimiser les performances si une requête retourne toujours la même chose.
  • En couche : les données sont indépendantes du serveur, ce qui fait que le client ne peut pas savoir si le serveur les a générées lui-même ou simplement relayées.
  • Interface uniforme : les données sont structurées de manière à pouvoir être consommées simplement par le client, via des spécifications telles que HTML, JSON, XML

Généralement, les API REST s'exécutent sur des serveurs web recevant des requêtes HTTP, et sont donc directement utilisables depuis un navigateur.

Une API REST documentée avec Swagger. Comme vous pouvez le voir, c'est juste des fonctions accessibles depuis HTTP, et qui retournent un résultat en JSON.

Client lourd

Catégorie d'application qui nécessite d'être installée sur le matériel de l'utilisateur pour fonctionner.

Elles permettent d'avoir moins de contraintes de bande passante, car une fois installées, la grande majorité s'exécute en local, mais elles sont plus difficiles à déployer, car pour publier une nouvelle version, il faut mettre à jour toutes les applications sur tous les postes.

Elle s'oppose au client léger.


Client léger

Catégorie d'application installée sur un serveur, et dont les utilisateurs récupèrent les parties au fur et à mesure qu'ils en ont besoin.

Une application web est forcément en client léger, car un utilisateur ne charge pas toutes les pages d'un coup, mais uniquement celles auxquelles il accède.

Elles sont beaucoup plus simples à déployer, car il suffit de mettre à jour l'application sur le serveur pour publier une nouvelle version, mais elles demandent beaucoup plus d'échanges entre le serveur et le client, ce qui peut poser des problèmes de performances, notamment pour les petites connexions internet.

Elle s'oppose au client lourd.


Client hybride

Catégorie d'application dont une partie est installée sur un serveur et l'autre sur le matériel de l'utilisateur, dans des proportions qui peuvent varier.


Paquet

Alias : package

Catégorie de logiciel diffusée dans un seul fichier d'archive, et qui est ensuite décompressé et consommé par un autre logiciel. Quand on parle de paquet, on fait généralement référence à des bibliothèques.

La plupart des paquets sont référencés sur des sites web appelés dépôts qui en contiennent des centaines de milliers, tel que :

Rien que ça…

Multiplateforme

Alias : cross-plateform.

Catégorie de logiciel pouvant s'exécuter sur plusieurs OS avec une même codebase.

Il y a plusieurs méthodes pour que cela fonctionne :

  • Avoir un environnement d'exécution entre l'OS et le logiciel. C'est la stratégie la plus simple, mais pas la plus performante. Les exemples les plus connus sont :
  • Traduire le code du logiciel en code natif à l'OS. C'est la solution la plus performante, mais aussi la plus difficile à mettre en place.

Serveur web

Logiciel permettant de distribuer des ressources grâce au protocole HTTP. Il peut s'agir de texte, images, vidéos, pages web…

Quelques exemples :


Serveur de base de données

Alias : système de gestion de bases de données, SGBD, DBSM

Logiciel permettant d'héberger une base de données et d'interagir avec via un système de requêtes/réponses.

Une base de données découle forcément d'un serveur de base de données, et pas l'inverse.

Quelques exemples :

Aucun protocole entre la base de données et le serveur, car elle fait partie intégrante de celui-ci.

Alias : web browser

Application permettant de récupérer et de lire des ressources sur le web grâce au protocole HTTP, notamment des pages web.

En réalité, les navigateurs modernes font beaucoup plus que ça, ils peuvent lire des images, des fichiers audio, vidéo, PDF ou parcourir un système de fichiers…

Quelques exemples :


Machine virtuelle

Logiciel qui sert d'interface entre un logiciel et l'OS qui va l'exécuter. C'est la stratégie la plus rependue pour faire du multiplateforme.

Quelques exemples :

En d'autres termes, une machine virtuelle fonctionne comme un adaptateur. L'inconvénient est qu'il faut l'installer sur sa machine pour exécuter les programmes, comme Java pour jouer à Minecraft (le vrai).


Programmation système

Développement de logiciels proches, ou faisant partie intégrante de l'OS.


Front-office

Partie d'une application accessible par les utilisateurs non modérateurs et non administrateur, tel que :

  • Les pages de présentation (accueil, à propos…)
  • Le compte client…

À ne pas confondre avec frontend.


Back-office

Partie d'une application accessible uniquement par des modérateurs ou administrateurs, tel que :

  • La page de création de contenu
  • La page de gestion des utilisateurs…

À ne pas confondre avec backend.


Sources de données

Source de données

Endroit où un logiciel va venir récupérer des données persistantes pour les consommer ou les distribuer. Elles peuvent être :

Un disque dur n'est pas considéré comme étant une source de donnée étant donné qu'à peu près n'importe quelle source est installée sur un disque dur.


Persistance des données

Fait d'enregistrer des données dans une source pour pouvoir les réutiliser plus tard ou pour les archiver.



Base de données

Alias : BDD, database, DB, base (ambiguë)

Système de fichier particulier entièrement géré par un serveur de base de données, qui permet de stocker, d'organiser et de récupérer des données de manière flexible et performante.

En développement logiciel, c'est le système de persistance de données le plus incontournable.


Base de données relationnelle

Type de base de données dans laquelle les données sont organisées en tables interconnectées.

Elles mettent l'accent sur :

  • La cohérence des données en uniformisant leur structure.
  • Les relations entre elles afin de dresser une connexion entre toutes les tables de la base.
  • La limitation des redondances pour une maintenance plus facile et une BDD très légère.

RDBSM

Serveur de base de données relationnelle


SQL

Alias : Structured Query Language

Langage normé par l'ISO permettant de coder des requêtes à destination d'une base de données relationnelle.

Dû aux limitations techniques du langage, tous les serveurs de base de données relationnelles possèdent leur propre implémentation de SQL, mais le cœur est (quasiment) le même partout.

Par abus de langage, quand on parle de SQL, on parle en réalité de n'importe quelle implémentation, et non pas de l'origine du langage, bien que leurs spécifications soient un peu différentes.


Base de données NoSQL

Base de données non relationnelle, et qui n'est donc pas adaptée au langage SQL. On en retrouve 4 grands types :


Programmation

Codebase

Alias : code source

Ensemble du code maitrisé par les développeurs lors de la réalisation d'un logiciel. Le code source des bibliothèques, frameworks et autres dépendances externes n'en fait pas partie.


Langage de programmation

Dialecte issu d'une spécification permettant de programmer des logiciels et de les rendre exécutables via de la compilation ou de l'interprétation.

Quand on parle de langage, on l'associe toujours à son compilateur ou interpréteur de référence, car un langage seul n'a rien de concret, c'est juste une syntaxe.

Par exemple, quand on dit que Rust est un langage très performant, on parle en réalité de son compilateur, car il est tout à fait possible de créer un compilateur Rust tout pourri.


Compilation

Stratégie d'exécution d'un programme consistant à transformer une codebase en un logiciel dit compilé, pouvant être lu par le client qui l'exécute.

Il peut s'agir de :

  • Code machine, pouvant être directement exécuté par l'ordinateur (assemblage)
  • Code en assembleur, assemblé par un assembleur (pas trop confus…)
  • Code intermédiaire laissé à la charge d'un autre programme, typiquement une machine virtuelle
  • Code dans un langage différent, mais toujours destiné à l'être humain (transpilation)

Le logiciel servant à compiler des programmes s'appelle le compilateur.


Transpilation

Alias : compilation source à source

Compilation du code d'un langage en un autre lisible par l'être humain.

C'est une pratique très fréquente dans le monde JavaScript avec des langages comme TypeScript ou CoffeeScript transpilés en pur JavaScript. Cela permet d'avoir un langage avec des fonctionnalités modernes dans la codebase, mais de le rendre compatible avec tous les navigateurs.

Le logiciel servant à transpiler des programmes s'appelle le transpileur, transcompilateur ou encore compilateur source à source.


Assemblage

Compilation du code d'un langage en code machine, directement exécutable par l'ordinateur.

Dans la pratique, c'est extrêmement compliqué, car les langages de programmation modernes ne s'apparentent pas du tout à la manière dont l'ordinateur fonctionne, ils simplifient le fonctionnement réel afin de les rendre plus lisibles par nous.

Des concepts aussi simples que les conditions ou les boucles n'existent même pas pour un ordinateur.

L'assemblage est surtout destiné aux langages de très bas niveau, notamment l'assembleur qui représente assez fidèlement la manière dont les instructions sont exécutées.

C'est pour cela que beaucoup de langages compilent d'abord en assembleur, et celui-ci est ensuite assemblé pour rendre le logiciel exécutable par la machine.

Le logiciel servant à assembler des programmes s'appelle l'assembleur, à ne pas confondre avec le langage du même nom.


Interprétation

Stratégie d'exécution d'un programme consistant à avoir un logiciel qui lit et traduit le code au fur et à mesure en code machine ou intermédiaire.

À la différence de la compilation, tout le programme n'est pas traduit d'un coup, mais au fur et à mesure. Il n'y a pas de version compilée, tout se passe dans le code source et dans la mémoire vive.

Le logiciel servant à interpréter des programmes s'appelle l'interpréteur.


État

Alias : state

Ensemble des informations persistantes dans un système, y compris celles qui se réinitialisent quand le programme est redémarré. Par exemple :

  • Données dans des variables
  • Données dans des fichiers rattachées au logiciel
  • Données dans une base de données

Si l'une de ces données est altérée durant l'exécution, on dit qu'il y a eu un changement d'état.


Effet de bord

Alias : effet secondaire, side effect

Changement d'état d'un programme provoqué par une de ses instructions, volontairement ou non.



Paradigme de programmation

Grand principe de programmation implémenté par un langage. Un paradigme peut contenir plusieurs sous-paradigmes, et un langage peut en implémenter plusieurs.


Programmation impérative

Paradigme désignant un logiciel construit en totale isolation de son environnement afin d'éviter tout changement d'état.

Par souci de praticité, la plupart des langages dits impératifs laissent la possibilité d'altérer l'état du programme via des instructions spéciales, mais leur utilisation est fortement découragée.


Programmation déclarative

Paradigme désignant un logiciel ayant la possibilité de modifier son état au cours de son exécution.


Programmation procédurale

Alias : PP

Paradigme de programmation déclarative désignant un logiciel construit à base d'appels de procédures pouvant être imbriquées les unes dans les autres.

C'est un paradigme si simple qu'il est implémenté par la quasi-totalité des langages déclaratifs, y compris ceux dits orientés objet qui sont généralement procéduraux avant tout.


Programmation orientée objet

Alias : POO, OOP

Paradigme de programmation déclarative désignant un logiciel construit à base de relations entre différents objets ayant chacun une responsabilité au sein du programme.

L'objectif est de représenter la manière dont fonctionne le monde réel, ou chaque objet (livre, meuble, personne, document, processus, n'importe quoi en fait…) est caractérisé par des données et un comportement spécifique.


Programmation fonctionnelle

Alias : PF, FP

Paradigme de programmation impérative désignant des logiciels construits à base d'enchainement et d'imbrication de fonctions prenant des paramètres d'entrée et sortant un résultat, le tout sans aucun effet de bord (idéalement).

L'objectif est essentiellement de construire des logiciels fiables en se basant sur des règles extrêmement simples (issues du monde mathématique), et prédictibles en limitant, voir en éliminant les changements d'état.


Élément de code

Terme générique désignant n'importe quel élément de code réutilisable au sein d'une codebase, donnée ou procédure. En vrac :


Donnée

Élément contenant une ou plusieurs informations à même d'être exploitée par le programme. Exemples :


Procédure

Élément contenant une suite d'instructions à même d'être exécutée par le programme. Selon les contextes, elles peuvent prendre des paramètres d'entrée, sortir un résultat, et effectuer ou non des effets de bord. Exemples :

  • Fonction
  • Procédure stockée (réservées aux bases de données)...

Comportement

Alias : behavior

Ensemble des procédures d'un élément de code.


Type

Élément servant de modèle à la création d'objets en définissant sa structure.

class Point
{
    public int X;
    public int Y;

    public bool Equals(Point other)
        => X == other.X && Y == other.Y;

    public string ToString()
        => $"({X},{Y})";
}

Primitive

Donnée indivisible, qui n'en contient aucune autre. Par exemple :

  • Nombre entier
  • Nombre décimal
  • Caractère
  • Chaine de caractères…

Constante

Primitive qui ne change jamais. Elle peut être nommée ou non (constante magique).

Bien qu'elle s'apparente à une variable, elle n'est pas considérée comme telle à la compilation, mais simplement comme une donnée codée en dur. Son nom ne sert qu'à la rendre lisible par les développeurs.

const int monthsInYear = 12;
// monthsInYear = 13 // <= Impossible

Constante magique

Constante non nommée. C'est généralement considéré comme une mauvaise pratique, car ça peut porter à confusion, et générer de la duplication de code.

double yearlySalary = salary * 13; // Pourquoi 13 ?

Variable

Donnée primitive susceptible de changer au cours de l'exécution du programme.

Par abus de langage, on inclut souvent le terme objet dans variable.

double salary = 3200;
salary *= 0.05; // 3360

Architecture

Architecture logicielle

Alias : conception, design (ambiguë)

Agencement des différents éléments d'une codebase.

Tout comme l'on place les fondations d'un bâtiment de manière stratégique pour faciliter sa construction, l'architecture logicielle organise les éléments d'une codebase pour que sa maintenance évolutive et corrective se déroule rapidement et dans de bonnes conditions.

Une bonne architecture permet d'encadrer les développeurs afin de limiter la dette technique.

L'architecture logicielle peut se faire sur tous les niveaux d'abstraction :

  • Très haut niveau : agencement des modules de l'application et des moyens dont ils communiquent.
  • Très bas niveau : agencement des éléments pour implémenter une fonctionnalité.

Spécification technique

Schématisation de la manière dont un logiciel doit être construit. Elle a pour but d'instaurer un standard strict, afin que le développement ne parte pas dans tous les sens.

Par exemple, un langage de programmation est une spécification qui permet de guider le développement de compilateurs et d'interpréteurs.

Exemple de la spécification du langage C#.

Ambiguïté : le terme spécification est parfois utilisé pour désigner une exigence.


Dépendance

Logiciel qui permet à un autre de fonctionner, dont celui-ci dépend. Elle peut être :

  • Directe, c’est-à-dire strictement liée à la codebase, auquel cas elles doivent être codées dans le même langage (ou compilé de la même manière). C'est le cas des bibliothèques et les frameworks.
  • Indirectes, c'est-à-dire très faiblement liées à la codebase. Elles communiquent généralement avec leur client au travers de protocoles. C'est le cas des API REST (protocole HTTP) et des bases de données (protocole TCP/IP).

Ambiguïté : le terme est parfois utilisé au niveau des éléments de code (exemple : injection de dépendances).


Client (logiciel)

Lorsqu'un logiciel dépend d'un autre, on dit qu'il est son client.

Le terme est utilisable dans une tonne de contextes :

  • Un logiciel est le client de sa BDD.
  • Le frontend est le client du backend.
  • Une codebase est le client de ses bibliothèques et de son framework.
  • Un navigateur web est le client d'une application web…

Ambiguïté : le terme est parfois utilisé au niveau des éléments de code (exemple : classe cliente d'une autre classe).

Sur ce schéma, le navigateur est le client du serveur web, et le serveur web est le client du serveur de base de données.

Niveau d'abstraction (analyse)

Position de notre niveau d'analyse sur un gradient allant d'abstrait à concret.

Par exemple :

  • Un diagramme d'architecture modulaire se situe sur un haut niveau d'abstraction, car on ne parle pas du tout de l'implémentation. Tout est ultra-abstrait et simplifié, car le but est de donner une vue d'ensemble du logiciel.
  • Un diagramme d'implémentation se situe sur un bas niveau d'abstraction, car il implique de modéliser la manière dont les éléments de code fonctionnent, allant parfois jusqu’à modéliser les instructions.

Ambiguïté : la définition peut changer en fonction du contexte. Je parle ici du contexte de la conception d'un logiciel.


Frontend

Code source de la partie du logiciel avec laquelle l'utilisateur va interagir directement. Il contient généralement :

À ne pas confondre avec front-office.


Backend

Code source de la partie du logiciel qui s'exécute sur un serveur centralisé et qui prend en charge les requêtes envoyées par le client depuis le frontend.

Elle contient généralement :

  • L'API permettant de recevoir et distribuer des données
  • Les règles métier
  • La communication avec la base de données

À ne pas confondre avec back-office.


Architecture n tiers

Type d'architecture qui met en relations plusieurs logiciels à la chaine, qui se passent des informations de l'un à l'autre, n étant le nombre de logiciels de la chaine

Le modèle le plus connu est l'architecture 3 tiers qui comporte :

Un exemple d'architecture 3 tiers pour une application web.

Flux de contrôle

Imbrication des unités de code dans une codebase.

  • Tout en haut, on retrouve le point d'entrée (fonction main), c'est-à-dire la procédure dans laquelle est contenu tout le programme.
  • Tout en bas, on retrouve les dépendances, où la codebase s'arrête et que tout est délégué à des composants génériques.
Un flux de contrôle inspiré du livre PoEAA. Il s'arrête à la connexion avec la base de données, puisque tout le reste est géré par des bibliothèques (la BDD ne fait pas partie du flux de contrôle).

Module

Partie d'un logiciel prenant en charge une responsabilité bien définie. Par exemple :


Régression

Fait de provoquer une erreur dans une partie d'un logiciel en changeant quelque chose dans une autre partie.

Un des objectifs fondamentaux d'une bonne architecture est de limiter les régressions.



Inversion des contrôles

Alias : IoC

Principe architectural visant à inverser le flux de contrôle.

Dans un programme classique, les développeurs réalisent tout le code qui se trouve en haut du flux et laissent le bas du flux à des dépendances qui prennent en charge des fonctionnalités génériques (algorithmes, communication avec une base de données…).

En inversion des contrôles, le haut du flux est géré par un framework, et les développeurs créent des éléments de code en bas du flux que ce framework va utiliser.

Dans la pratique, les développeurs ne s'occupent pas vraiment du tréfonds du flux non plus, il est toujours géré par des dépendances. La grosse différence, c'est qu'ils ne s'occupent plus du haut, ils se contentent du milieu.

Les frameworks web MVC utilisent à fond ce principe. Les développeurs créent des fonctions en suivant la convention du framework, et à l'exécution, celui-ci les utilise afin de générer des API REST.

Un flux de contrôle inspiré du livre PoEAA. L'IoC est reconnaissable au fait que la codebase ressemble souvent à un ensemble d'éléments éparpillées à droite à gauche, mais en réalité, c'est le framework qui recolle tous les morceaux en arrière-plan.

MVC

Alias : modèle-vue-contrôleur, Model-View-Controller

Principe architectural visant à diviser une codebase en 3 modules :

  • Le modèle, qui contient le modèle de domaine, les règles métier et l'accès aux données. C'est le cœur du programme.
  • Les vues, qui contiennent les interfaces graphiques et leurs évènements.
  • Les contrôleurs, qui traitent les requêtes de l'utilisateur en allant piocher dans le modèle, et en lui renvoyant les bonnes vues.
Notez que le client n'interagit JAMAIS directement avec le modèle.

Attention : la plupart des schémas illustrent le modèle MVC de cette manière (voir pire), où la vue se base directement sur le modèle. C'est une horrible pratique puisque cela implique que la vue soit couplée au modèle, et donc plus exposée aux régressions. Je recommande plutôt mon diagramme, celui-ci ou encore celui-là (👌) pour une représentation plus propre et exacte de MVC.


Programmation modulaire

Principe architectural visant à séparer, isoler et distinguer les modules d'un logiciel. Elle permet de rendre une codebase plus compréhensible et de limiter les régressions.

Un diagramme d'architecture modulaire. Il permet de visualiser la manière dont le programme fonctionne, mais aussi à guider le développement en séparant correctement les fonctionnalités.

À ne pas confondre avec programmation orientée composant, la programmation modulaire ne parle pas de code se concentre uniquement sur l'aspect fonctionnel.


Programmation orientée composant

Principe architectural visant à diviser une codebase en composants interconnectés afin d'avoir plus de flexibilité sur la manière de les agencer.

Un diagramme d'architecture orientée composant (non-UML). Les flèches simples représentent les dépendances directes, la flèche HTTP représente la dépendance indirecte entre le client et le serveur.

Monolithe

Type d'architecture où tous les modules sont regroupés dans une seule codebase, sans dépendances indirectes.

Ils sont généralement plus simples à déployer, mais succombent plus facilement aux régressions.


Microservices

Types d'architecture où les modules sont éclatés dans des codebases différentes qui communiquent entre eux via des protocoles.

Ils sont plus isolés ce qui diminue le risque de régressions, mais ils sont plus difficiles à déployer, car ils sont interconnectés, mais pas attachés.


Conception (développement)

Alias : architecture, design (ambiguë)

Fait de construire une architecture logicielle en imaginant et en modélisant la manière dont les éléments vont s'agencer.

Dans la pratique, ça implique surtout beaucoup de diagrammes, de prototypes et de documentation.


Implémentation (pratique)

Alias : codage, réalisation

Programmation des fonctionnalités du logiciel, les spécifications et les exigences du client.


Design

Design

Conception et modélisation de l'interface graphique d'une application.

La réalisation ne fait pas partie du design, mais plutôt du développement, car ce n'est que du code, donc pas le travail d'un designer.


Interface graphique

Alias : interface utilisateur, UI, GUI

Ce que voit l'utilisateur lorsqu'il utilise l'application.


Expérience utilisateur

Alias : ergonomie, UX

Ce que ressent l'utilisateur quand il utilise l'application (frustration, confusion…).

Le terme est souvent réduit à simplicité d'utilisation, mais il est en réalité beaucoup plus large que ça, et plonge dans les profondeurs de la nature humaine. Mais comme je suis loin d'être un expert, je vais m'arrêter ici 😛