L'article See no Evil de la fantastique revue logic.mag parle des chaînes d'approvisionnement et fait des liens avec le monde du logiciel.

D'abord, qu'est-ce qu'une chaîne d'approvisionnement ?

En gros, la chaîne d'approvisionnement d'une entreprise c'est l'ensemble de ses fournisseurs, et des fournisseurs des fournisseurs, etc.

Comme le note l'article on devrait plutôt parler d'un réseau d'approvisionnement. Car on est loin d'une structure en chaîne où l'approvisionnement est linéaire comme suit:

Entreprise A -> Entreprise B -> ... -> Entreprise Z -> Vente du produit final.

On aurait plutôt une arborescence inversée, où certains fournisseurs peuvent se substituer à d'autres en cas de pépin:

    Entreprise A \
Entreprise B  ---- > Entreprise D \
Entreprise C /                     \
                                     --- > Entreprise E -> Vente du produit final.  
Entreprise A' \                     /
Entreprise B'  ---- > Entreprise D'/
Entreprise C' /

Cette structure mobile souvent très profonde fait qu'il est très difficile de savoir pour une entreprise, d'où proviennent ses intrants. La mondialisation fait aussi que les fournisseurs sont très loin les uns des autres.

Certaines entreprises disent pouvoir garantir certains critères de qualités, sociaux et écologiques, c'est super. En réalité c'est très difficile à faire, car il faut s'assurer que ces critères soient respectés sur tous les nœuds du réseau.

Si c'est un si gros bazar, comment ça peut marcher ? Comment, devant cette complexité, arrive-ton tout de même à acheminer les biens sans se perdre dans la complexité ?

La modularité

Le conteneur est un symbole de la mondialisation. Et en effet, c'est l'invention qui a permis ce développement gigantesque des chaînes de production. L'idée est simple, on a des marchandises, et on les mets dans une boîte. Sur la boîte il est écrit où elle doit être transportée. L'intérêt est qu'on a pas à se soucier de ce qu'il y a dans la boite, on a juste à l'amener à bon port (à condition qu'elle ne tombe pas dans mer !). Chaque acteur de la chaîne du réseau d'approvisionnement n'est exposé qu'a l'information dont il a besoin.

C'est ici qu'est fait un parallèle avec le logiciel. La modularité est un concept important en programmation, notamment en programmation orientée objet. L'idée est de mettre le code dans des boîtes, pour interagir seulement avec les boîtes, peut importe comment la boîte est foutue dedans. Vous voyez le lien avec le conteneur ?

Pour donner un autre exemple, je crois avoir lu quelque part une métaphore de la programmation orientée objet avec les machines à café. Quand on fait un café sur une machine Nespresso, on la laisse faire sa tambouille interne, on lui demande : "fait un café" et elle fait un café. C'est modulaire.

Une cafetière "normale" n'est pas modulaire, il faut mettre l'eau dedans, puis le café, puis le mettre sur le feu, allumer le feu, etc.

Alors où je veux en venir avec mon café ? La modularité c'est l'idée de mettre la complexité dans des boîtes, pour ne pas avoir à interagir avec cette complexité à chaque fois qu'on utilise la boîte.

Selon l'article, la modularité est une caractéristique essentielle de la modernité. Voilà.

Et alors ?

L'article s'arrête là. Mais et après ? Qu'est-ce qu'on peut en conclure de ça ?

Le mécanisme qui sous tend la mondialisation et la complexification des réseaux d'approvisionnement s'appuie sur la même "méthode" que le développement logiciel. Est-ce qu'il faut s'attendre aux même horreurs qui sortent de la mondialisation dans le développement logiciel ? A priori je dirai non, parce que la programmation orientée objet c'est cool. Mais c'est comme demander à Amazon ce qu'elle pense de la contenarisation, elle trouve ça cool bien sûr.

Alors posons plutôt la question : est-ce qu'il y a des effets indésirables de la modularité dans les logiciels ?

Peut-être. Il y a un problème de "bloat" logiciel et web. C'est à dire que les logiciels, même pour faire des tâches simples, ont une taille énorme. Est-ce que ce problème n'est pas le fruit de cette modularité ? Si on avait pas des couches modulaires et indépendantes les unes des autres, on serait forcé de considérer toutes la chaîne logicielle dans son ensemble, ce qui forcerait à la garder à une taille raisonnable. Au lieu de ça on a des logiciels qui tournent sur des couches de millions de lignes de code pour nous afficher des recettes de cuisines... A méditer.

Par contre la modularité c'est aussi ce qui a permit Internet. Le système des paquets, ressemble beaucoup au système des conteneurs. Et c'est dur de dire du mal du fonctionnement d'Internet quand même... ou bien ?