TL; DR: cela dépend de ce que vous essayez de résoudre.
J'ai eu une conversation similaire avec mes Gramps à ce sujet, alors que nous parlions de la façon dont Func et Action en C # sont géniaux. Mon Gramps est un très ancien programmateur, qui utilise les codes sources depuis que les logiciels ont été exécutés sur des ordinateurs qui occupaient toute une pièce.
Il a changé de technologie plusieurs fois dans sa vie. Il a écrit du code en C, COBOL, Pascal, BASIC, Fortran, Smalltalk, Java et a finalement commencé à utiliser le C # comme passe-temps. J'ai appris à programmer avec lui, assis sur ses genoux alors que j'étais tout petit, découpant mes premières lignes de code sur l'éditeur bleu de SideKick d'IBM. À 20 ans, j'avais déjà passé plus de temps à coder qu'à jouer à l'extérieur.
C’est un peu de mes souvenirs, alors excusez-moi si je ne suis pas tout à fait pratique lorsque je les raconte. J'aime un peu ces moments.
C'est ce qu'il m'a dit:
"Devrions-nous vous demander de généraliser un problème ou de le résoudre de manière spécifique? Eh bien, c'est une ... question."
Gramps prit une pause pour y réfléchir un instant tout en fixant la position de ses lunettes sur son visage. Il jouait un match 3 sur son ordinateur, tout en écoutant le disque d'un Deep Purple sur son ancien système audio.
"Cela dépend du problème que vous essayez de résoudre", m'a-t-il dit. «Il est tentant de croire qu’une solution unique et sacrée existe pour tous les choix de conception, mais qu’il n’en existe pas. L’architecture logicielle est comme le fromage, vous voyez».
"... Du fromage, Gramps?"
"Peu importe ce que tu penses de ton favori, il y aura toujours quelqu'un qui pense que ça sent mauvais".
Je clignai des yeux de confusion pendant un moment, mais avant que je puisse dire quoi que ce soit, poursuivit Gramps.
"Quand vous construisez une voiture, comment choisissez-vous le matériau d'une pièce?"
"Je ... Je suppose que cela dépend des coûts impliqués et de ce que la pièce devrait faire, je suppose."
"Cela dépend du problème que cette partie tente de résoudre. Vous ne ferez pas un pneu en acier, ni un pare-brise en cuir. Vous choisissez le matériau qui résoudra le mieux le problème que vous avez sous la main. solution générique? Ou un problème spécifique? À quel problème, à quel cas d'utilisation? Devrait-on adopter une approche fonctionnelle complète pour donner un maximum de flexibilité à un code qui ne sera utilisé qu'une seule fois? Faut-il écrire un code très spécialisé et fragile? Des choix de conception comme ceux-ci sont comme les matériaux choisis pour une partie de voiture ou la forme de la brique Lego que vous choisissez pour construire une petite maison. Quelle brique Lego est la meilleure? "
Le programmeur âgé chercha un petit modèle de train Lego qu'il avait sur sa table avant de continuer.
"Vous ne pouvez répondre à cela que si vous savez pour quoi vous avez besoin de cette brique. Comment diable saurez-vous que la solution spécifique est meilleure que la solution générique, ou inversement, si vous ne savez même pas quel problème vous êtes Vous ne pouvez pas voir au-delà d’un choix que vous ne comprenez pas. "
"..Vous venez de citer The Matrix? "
"Quoi?"
"Rien, continue."
"Eh bien, supposons que vous essayez de créer quelque chose dans le système national de facturation. Vous savez à quoi cette API infernale et son fichier XML de trente mille lignes ressemble de l'intérieur. A quoi ressemblerait une solution" générique "pour la création de ce fichier Le fichier contient de nombreux paramètres facultatifs, remplis de cas que seules des branches d'activité spécifiques doivent utiliser. Dans la plupart des cas, vous pouvez les ignorer en toute sécurité. Vous n'avez pas besoin de créer un système de facture générique si vous ne voulez Créez simplement un système de vente de chaussures et faites-en le meilleur système de facturation de vente de chaussures dans le monde. Maintenant, si vous deviez créer un système de facturation pour tout type de client, pour une application plus large - être revendu en tant que système de vente générique indépendant,par exemple, il est maintenant intéressant de mettre en œuvre les options qui ne sont utilisées que pour le gaz, les aliments ou l’alcool.Maintenant, ce sont des cas d'utilisation possibles. Avant qu’ils ne soient que des cas hypothétiques Ne pas utiliser de cas et vous ne voulez pas mettre en œuvre Ne pas utiliser de cas. Ne l'utilisez pas, c'est le petit frère de Pas besoin . "
Gramps a remis le train de lego à sa place et est revenu à son match de match 3.
"Ainsi, pour pouvoir choisir une solution générique ou spécifique à un problème donné, vous devez d'abord comprendre en quoi il consiste. Sinon, vous devinez, et deviner, c'est le travail des gestionnaires, pas celui des programmeurs. tout dans l'informatique, ça dépend. "
Donc, là vous l'avez. "Ça dépend". C'est probablement l'expression la plus puissante de deux mots lorsque l'on pense à la conception de logiciels.