Article écrit par Quentin Buirette
Les lecteurs avisés que vous êtes l’auront certainement remarqué, c’est la période des articles originaux. Ne désirant pas manquer à l’appel, c’est avec joie que je réponds présent à l’exercice.
Très souvent, il est difficile de parler technique à des profils non techniques, ou l’inverse. La problématique sous-jacente est de savoir comment véhiculer une idée, un concept, un point bloquant à l’ensemble des acteurs d’un projet.
C’est pourquoi je vous propose aujourd’hui de vulgariser la technique, sinon le métier de développeur à travers un exemple pas banal : la conception logicielle avec le jeu vidéo Factorio !
Factorio, un jeu vidéo ?
Factorio est un jeu vidéo indépendant développé par Wube Software, sorti en 2017 sur les trois plateformes principales, à savoir Microsoft Windows, OS X et GNU/Linux — ce qui est rare et bienvenu :).
De prime abord, on pourrait croire à une mauvaise blague. Des graphismes à couper le souffle (pourvu qu’on apprécie le retrogaming), un monde ouvert infini (oui oui) peuplé par une espèce d’aliens agressive, un principe d’automatisation et un objectif, un seul : envoyer une fusée dans l’espace !
Mais en y regardant de plus près, une multitude de choses intéressantes surgissent.
Vous commencez le jeu seul ou en équipe avec de quoi fabriquer deux pioches pour couper du bois ou miner des ressources.
Très vite, vous aurez besoin de créer des foreuses, afin de ne plus miner à la main, que vous pourrez alors connecter à des fours via l’emploi de tapis roulants très lents. Ah, mais vous aurez aussi besoin d’électricité, qui a besoin d’eau, et de connecter vos centrales au reste de vos installations !
Vous voilà embarqué dans une spirale d’automatisation et de dépendances. Car c’est là l’essence même de Factorio et son côté à la fois le plus fun mais aussi le plus complexe…
Une analogie assumée
Factorio est un jeu qui exploite le principe de dépendance pour concevoir des composants de plus en plus complexes à partir de matières premières et/ou d’autres composants.
Ce qui est véritablement intéressant, c’est que l’on peut aisément comparer ce principe d’automatisation avec celui de la programmation. En effet, pour avancer dans le jeu, vous aurez besoin de mettre en place des usines avec une ou plusieurs entrées et une sortie qui desserviront d’autres usines, et ainsi de suite.
D’un point de vue conception logicielle justement, cela revient grossièrement à mettre en place plusieurs briques applicatives avec un niveau d’abstraction plus ou moins important, mais avec des relations de dépendance très fortes entre elles !
Toutefois, il vous sera possible de segmenter votre production globale en sous-ensembles remplissant chacun une fonction donnée, notamment à l’aide d’outillages qui seront disponibles dès lors que vous déverrouillerez les technologies adéquates. On pourrait grossièrement comparer ce système à de la veille technologique, voire de la R&D.
Factorio vous obligera également à concevoir des patterns que vous pourrez alors sauvegarder grâce à l’emploi de blueprints. Vous verrez qu’il en existe des milliers, mais il vous appartiendra de trouver celui qui vous correspondra le mieux.
Au fur et à mesure de votre avancée dans le jeu, vous réaliserez sûrement qu’il est possible d’associer de nombreux termes informatiques avec vos prises de tête ; DRY, dette technique, déploiement, qualité, etc. sont autant de termes transposables à l’univers de Factorio.
D’une véritable conception logicielle
Au début, le fun prédomine. Le soleil d’abord, puis la nuit, et de nouveau le soleil et plein de choses à faire et à mettre en place dans un but précis : la fusée !
Puis, très vite, les premières complications apparaissent, et placer un tapis roulant supplémentaire dans votre base devient un véritable cauchemar, et vous aurez de nombreuses minutes (heures) de refactoring de tapis roulants en perspective.
À ce moment précis, vous vous poserez obligatoirement la question suivante :
Quel est l’énergumène qui a placé ça comme ça ? Et pourquoi donc vin diou ?!!
Astuce 1 : Il n’y a pas de git blame
dans Factorio, mais chaque objet présent sur la carte contient la référence du joueur qui l’a posé.
Astuce 2 : Ce n’est pas une raison pour blâmer le joueur en question, car d’autres vous feront également des remarques. Néanmoins, dans un souci de productivité, n’hésitez pas à renvoyer temporairement ce joueur, ou à le féliciter pour ses prouesses techniques ou encore pour son manque de bon sens.
Astuce 3 : Factorio reste un jeu, ne l’oubliez pas 🙂
Outre cet aspect désagréable (pour lequel nous sommes finalement tous responsables), il vous faudra opter ensemble pour la meilleure manière de développer votre base.
C’est précisément ce qu’évoque Arnaud Lemaire dans sa présentation sur la Dette technique et entropie du logiciel. Selon lui, une équipe de développement se doit de faire un choix conséquent : celui de la dette technique qu’elle est obligée d’implémenter dans le but de développer des fonctionnalités métier.
Il s’agit d’un choix technologique de prime abord, puis vraisemblablement d’un choix d’implémentation. Néanmoins, de nombreux aspects restent encore en suspens, comme la communication ou encore le temps consacré au projet, voire la compréhension effective du métier et de ses besoins.
Pour revenir à Factorio, gardez à l’esprit que le but est de fuir la planète sur laquelle vous vous êtes crashé. Il importe donc de la quitter au plus vite avant que des aliens indigènes ne vous réduisent à néant.
Pour ce faire, il semblera souvent nécessaire de déployer rapidement de nouvelles constructions sans tenir compte de l’ensemble.
Allons-y, mettons cela en plein milieu de la base !
Cette dernière citation (tirée d’une histoire vraie) met en avant une pratique très répandue dans le jeu comme dans notre façon de coder au quotidien. Cependant, si cette approche ne résulte pas d’une démarche réfléchie et soupesée, c’est l’explosion au sol assurée !
Le principe d’urbanisation
L’urbanisation est d’abord un processus de développement des villes — le plus souvent exponentiel — résultant d’un intérêt historique pour une grande partie de la population de s’installer en ville. C’est l’exode rural. Par ailleurs, on considère très souvent l’architecture comme un sous-domaine de l’urbanisation.
En informatique, on se concentre justement sur les moyens d’implémenter une solution logicielle au sein d’un paysage applicatif existant.
D’aucuns s’accorderaient sûrement pour affirmer qu’un développeur ne devrait pas s’attarder sur ce genre de principe, tout comme le fait de devoir parler au métier par exemple. Après tout, sommes-nous paysagistes ? Enfin, sommes-nous tous des architectes, voire des chefs de projet ? Cela reviendrait à dire qu’un plombier ne travaille jamais avec le plan de la maison sur laquelle il doit intervenir. Il passe un tuyau et hop, le tour est joué, merci bonsoir !
J’ai tendance à penser que la manière d’implémenter du code, une nouvelle fonctionnalité, voire une nouvelle brique logicielle peut impacter l’équilibre global d’un système d’information.
C’est pourquoi il importe toujours de se poser la question de l’implémentation avant même de produire la première ligne de code (ou ici de placer la première usine). À ce titre, Factorio est une excellente école.
Sans réflexion en amont, pas de matières premières, sans matières premières, pas de composants, sans composants, pas de fusée, sans fusée… Pas de fusée.
Ce n’est qu’après avoir versé de nombreuses gouttes de sueur et avoir vécu la frustration et ce qu’on appelle communément dans le milieu du jeu vidéo le rage quit, que j’ai finalement compris à quel point nous avons tendance à tirer d’abord, et à poser les questions ensuite.
Il va donc vous falloir redoubler de prudence et mettre vos coéquipiers sur la même longueur d’onde (et vous y placer également) afin d’atteindre cet objectif de quitter cette planète hostile.
La communication, une véritable arme de guerre !
La communication est au cœur de Factorio. Sans elle, chacun part dans son coin et commence à faire la même chose, au même moment, sans optimisation, sans réflexion, sans finalité, sans fusée…
Elle constitue véritablement la clé de la réussite et vous permettra d’optimiser la moindre action nécessaire dans la réalisation du projet.
Puisqu’il n’est pas question ici de soliloque mais bien de communication, c’est-à-dire de faire passer un message et de se faire comprendre, il importe que chaque membre de l’équipe s’approprie le vocabulaire métier.
Dans Factorio, comme dans tout jeu vidéo, une phase d’apprentissage sera nécessaire pour s’approprier les mécaniques internes et la terminologie. Il en va de même, lorsqu’on embarque sur un nouveau projet, avec les règles de gestion et le vocabulaire spécifiques au métier ciblé.
Dans ce résumé du Domain Driven Design, les auteurs prennent l’exemple du contrôle aérien où la visualisation du trafic international ne se fait pas — comme on pourrait le croire — via un environnement 3D, mais seulement en deux dimensions par le biais des longitudes et des latitudes.
Dans la plupart des cas, notre travail consiste à concevoir des solutions répondant aux problématiques d’un métier. N’en déplaise à certains, il nous appartiendra toujours de dialoguer avec celui-ci et de comprendre les mécaniques et les processus qui garantissent son succès.
Il vous incombe donc de partager vos connaissances des mécaniques du jeu de manière à optimiser chaque action produite par votre équipe et atteindre ensemble les étoiles.
D’une bonne gestion de projet
Dans Factorio, votre première partie se fera sans conteste par le biais d’un système très répandu, à savoir le système D ! Il n’y a pas meilleure école pour aller directement dans le mur, mais c’est aussi la meilleure pour apprendre et capitaliser sur ses erreurs.
Petit à petit, avec l’apprentissage continu de la technique et des mécaniques du jeu, avec une communication de plus en plus présente et à l’aide des fameux blueprints, vous constaterez avec surprise que l’objectif à atteindre se rapprochera doucement mais sûrement.
Vous serez également en mesure d’élaborer d’autres techniques, plus efficaces, plus pérennes, pour faire face aux attaques incessantes des aliens tout comme pour produire toujours davantage et plus vite…
Vous remarquerez assurément que vos coéquipiers répondront toujours présent pour faire face aux imprévus, pour réparer des dysfonctionnements ou des erreurs commises par l’équipe, même si ses membres ne sont pas à la hauteur. Il est question non seulement de confiance et d’assurance, mais également de maîtrise et de passion.
La vigilance est à son paroxysme quand il s’agit d’envoyer une fusée en prod ! Mais l’audace et l’obstination finiront par rendre possible l’impossible, peu importent les critiques ou le temps perdu.
L’objectif est ainsi atteint haut la main et il faut désormais se concentrer sur la suite.
Pour une conclusion vers les étoiles
À défaut de formuler une conclusion significative, concrète ou réelle, je vous propose la chose suivante : essayez-vous à ce jeu et tirez-en vous-même vos propres conclusions.
Pour vous aider dans cette perspective, n’hésitez pas à jeter un œil au record de speedrun ou à voir de vos propres yeux ce qu’il en est avec cette vidéo assez dingue qui révèle une optimisation sans précédent dans l’histoire de l’aérospatial !
En réalité, il existe une multitude de jeux vidéo qui se rapprochent du domaine du développement logiciel, par exemple Shenzhen I/O qui vous propose de développer votre propre logique, pour ne citer que celui-là.
Reste la question de la vulgarisation : certes, cet exemple provient d’un univers différent, mais il n’en est pas moins efficace pour illustrer certains principes inhérents au métier de développeur.
Vulgariser est une chose, expliquer les réelles raisons qui nous poussent à faire des choix en est une autre. Néanmoins, l’analogie est un outil puissant qui nous permet à tous d’atteindre d’autres horizons.