-
Comprendre l’effet Makefile
- L’effet Makefile désigne le fait de ne pas écrire un outil complexe ou peu familier à partir de zéro, mais de copier puis modifier un exemple qui a déjà bien fonctionné auparavant.
- Cet effet apparaît fréquemment lorsque divers ingénieurs utilisent des outils comme Make.
- Lorsqu’un travail similaire a déjà été effectué, les ingénieurs copient l’ancien Makefile et l’adaptent à la nouvelle situation.
-
Problèmes et impact
- Problème au stade de la conception : l’outil est trop complexe ou trop fastidieux à utiliser depuis zéro.
- Configuration CI/CD : il est fréquent de copier puis modifier des configurations YAML dans GitHub Actions ou GitLab CI/CD.
- Configuration des linters et formatters : des ensembles de règles de base sont copiés d’un projet à l’autre, puis renforcés ou assouplis selon les besoins.
- Systèmes de build : tout ce qui n’est pas trivial finit par ressembler au système de build précédent.
-
Pourquoi ce phénomène est important
- Manque de prise en charge pour le diagnostic et le débogage : il faut exécuter l’outil à plusieurs reprises, avec peu d’informations fournies.
- Frein à l’apprentissage : seuls quelques spécialistes maîtrisent vraiment l’outil, tandis que les autres se contentent de copier et modifier avec un minimum de connaissances.
- Problèmes de sécurité : les tâches de sécurité exigent une compréhension approfondie, et les systèmes marqués par l’effet Makefile peuvent provoquer une confusion entre le code et les données.
-
Points à considérer lors de la conception d’un outil
- Déterminer si l’outil doit être configurable.
- Déterminer s’il nécessite une syntaxe propre.
- Vérifier s’il est possible de réutiliser une syntaxe existante ou des idiomes déjà établis.
- Évaluer si le copier-coller se produit fréquemment.
-
Phénomènes similaires à l’effet Makefile
- Cela ressemble au cargo culting ou à la normalisation de la déviance, mais l’effet Makefile concerne les conséquences d’une conception particulière.
- L’effet Makefile n’est pas intrinsèquement inefficace ni mauvais. C’est un point dont il faut avoir conscience lors de la conception d’outils et de systèmes.
1 commentaires
Avis Hacker News
Les systèmes complexes évoluent souvent à partir de systèmes simples. Un système conçu comme complexe dès le départ fonctionne généralement mal ; il faut commencer par un système simple
Make et les Makefiles sont très simples s’ils ne sont pas générés automatiquement par autoconf. Lorsqu’ils sont générés par autoconf, il ne faut pas les modifier et, si possible, il vaut mieux ne pas utiliser autoconf. On peut écrire un peu de code ou en copier pour l’utiliser dans un projet, puis l’améliorer selon les besoins. Ensuite, on recopie ce code dans d’autres projets en l’adaptant, puis on répercute les modifications dans le projet d’origine. À travers plusieurs projets, on peut finir par l’extraire en bibliothèque et la publier en open source
Environ 10 % des développeurs sont capables de démarrer quelque chose à partir de zéro. 40 % travaillent en copiant-collant du code, et 50 % ne connaissent pas grand-chose en dehors des puzzles LeetCode. Beaucoup de Makefiles sont constitués de copier-coller
Le Cargo Cult Development désigne une manière de développer qui imite les aspects superficiels d’une technologie sans en comprendre les principes. C’est une approche fondée sur le copier, coller, essayer, ajuster, en espérant que cela fonctionne
Le Makefile est peut-être une mauvaise analogie. Beaucoup de code est copié depuis le web et contient de nombreuses parties inutilisées. Supprimer ce qui est superflu est une bonne habitude
Les outils ou systèmes avec lesquels les développeurs doivent interagir sont souvent perçus comme n’ayant pas assez de valeur pour être appris au quotidien. La configuration de la CI, par exemple, est vue comme quelque chose qu’on « configure puis oublie », et les parties complexes sont prises en charge par une autre équipe. Il faut fournir des outils et une documentation adaptés pour que les développeurs puissent s’en saisir facilement
Des outils comme LaTeX sont utilisés assez rarement, donc on commence souvent par copier-coller. Les outils utilisés peu fréquemment sont difficiles à mémoriser
Make est bien documenté, et si l’utilisateur lit la documentation, il peut le comprendre facilement. En revanche, beaucoup d’outils sont mal documentés, ce qui rend leur compréhension difficile pour les utilisateurs
Les outils complexes sont nécessaires, mais si l’effet Makefile apparaît dans une application simple, cela signifie que l’outil est trop complexe. Pour les petits projets, un Makefile peut être approprié
Le « Copy-Pasta Driven Development » pointe les problèmes causés par le copier-coller de code. Des outils comme Copilot peuvent aggraver ces problèmes