Devez-vous utiliser une bibliothèque quand vous pouvez faire la tâche sans elle? [fermé]

33

Je suis dans une situation où je peux utiliser un plugin JavaScript open source pour remplir une tâche. Mais quand j'ai essayé de l'utiliser, je me suis retrouvé à refondre beaucoup de choses que j'avais déjà faites, et cela ajoute une certaine complexité, à mon humble avis, au projet. Alors que je peux accomplir la même tâche avec un code propre, je peux me fabriquer moi-même et sans avoir besoin de changer ce que j'ai fait jusqu'à présent.

De toute façon, devriez-vous opter pour une bibliothèque dans cette situation (par exemple, pour des codes de meilleure qualité?)

Billal Begueradj
la source
3
Comment mesurez-vous la "qualité"? Par le nombre de lignes de code? Des classes? Complexité? Maintenabilité? Résistance?
Laiv
3
La réponse est NON, peu importe ce que vous considérez comme une qualité ou non. Mais si vous nous fournissez votre idée de la qualité, les réponses aborderont leur raisonnement pour expliquer pourquoi le nombre de bibliothèques n'améliore pas ce que vous considérez comme une qualité. C'est une simple question de précession. En l'état actuel des choses, un simple NON répondra à la question sans avoir besoin d'explication.
Laiv
4
Ce n’est pas une réponse directe à votre question, mais l’idée que "ce nombre" garantit inévitablement une "meilleure qualité" va à l’encontre de la reconnaissance des difficultés liées à l’augmentation de la qualité du code. Il n'y a pas de solution miracle pour garantir la qualité. Si c'était le cas, le problème n'existerait pas. Quiconque prétend qu'une approche simple est la solution miracle est soit (au mieux) généralisant excessivement, soit (au pire, poussant son idée imparfaite comme une vérité).
Flater
3
Qu'est-ce qui vous fait penser que l'utilisation de la bibliothèque augmenterait la qualité du code?
Arrêtez de blesser Monica
1
A voté pour fermer parce que la question semble avoir été reformulée de manière significative, et les réponses du haut répondent à l'ancienne version ... il vaut mieux ré-poster la question telle qu'elle est maintenant (ajouter plus les détails pour éviter le "trop "votes) ...
AnoE

Réponses:

54

En tant qu’ingénieur, il convient peut-être de considérer cela comme un problème d’optimisation. Naturellement, nous devons avoir un objectif d' optimisation . Une solution courante dans ce type de situation serait de minimiser le coût total de possession .

Si vous pensez que l'ajout du composant tiers réduira les coûts à long terme, vous devriez l'utiliser. Si vous ne le faites pas, vous ne devriez pas. Assurez-vous de prendre en compte le coût de la maintenance en cours (par exemple, lorsqu'une nouvelle version de O / S est publiée, qu'un défaut de sécurité est détecté ou qu'une nouvelle spécification W3C est publiée).

Pour développer de nombreux problèmes triviaux, il vous en coûtera moins cher de développer vos propres problèmes, mais pour les problèmes moyennement complexes ne relevant pas des compétences de base de votre entreprise, il sera souvent judicieux de faire appel à une tierce partie.

Il y a aussi d'autres objectifs à prendre en compte (par exemple, le risque), mais le coût total de possession est le principal.

John Wu
la source
1
Je pense que cette réponse a besoin de plus de votes positifs. - La fiabilité à long terme avec les bibliothèques peut être un énorme problème. Et même s'il existe une bibliothèque, qui sait si les API changeront? Les bibliothèques sont faciles à court terme, mais peuvent causer des problèmes à long terme. (Remarque: les bibliothèques en tant que code source atténuent certains des problèmes.)
DetlevCM
6
@DetlevCM La réponse est également de dire qu'il peut très facilement faire l'inverse. Les bibliothèques non triviales se verront imposer des coûts de maintenance que vous n’auriez pas à payer en tant qu’utilisateur de la bibliothèque et que vous ne pourriez peut-être pas payer si vous deviez le faire (c’est-à-dire si vous étiez le propriétaire de la bibliothèque).
Cubique
Je suis d'accord, mais n'oubliez pas de prendre également en compte le coût de la bibliothèque: bogues, modifications de conception indépendantes de votre volonté, et grappes de code que vous n'utilisez pas uniquement pour intégrer une seule fonction. De plus, la bibliothèque n'est souvent pas aussi expressive que votre solution pourrait l'être pour votre problème donné. AUSSI, vous ne pouvez pas déboguer une bibliothèque externe aussi facilement et si vous le faites, vous devrez traiter plus de problèmes de fusion ultérieurement. Ne présumez pas qu'une solution de bibliothèque est plus légère, tenez compte de tous les facteurs et n'ayez pas peur de coder votre propre solution si la bibliothèque ne convient pas!
Bill K
36

Bill Gates a dit un jour:

"Mesurer les progrès de la programmation à l'aide de lignes de code équivaut à mesurer le progrès de la construction d'un avion en poids."

Cette citation me vient à l’esprit car on pourrait en dire autant du nombre de bibliothèques. En règle générale, je n'utilise pas de bibliothèques à moins que:

  1. Il n'y a pas d'autre moyen de le faire. Faire sans ne serait plus économiquement viable de produire le produit à temps et dans les limites du budget.
  2. Cela me ferait gagner beaucoup de temps car il me faudrait beaucoup des fonctionnalités de cette bibliothèque.
  3. La bibliothèque est bien utilisée et tout problème potentiel que je pourrais avoir serait bien documenté.

Idéalement, les trois conditions sont remplies, mais je me contenterais de deux. En bout de ligne, vous ne devriez pas ajouter de bibliothèque à votre programme si cela ne sert à rien. Si vous devez demander quel est cet objectif, vous ne devriez probablement pas l'ajouter à votre programme. La qualité du code de votre programme en profite donc, car elle appelle élégamment chaque bibliothèque sans être alourdie par le besoin de réécrire nécessairement les bibliothèques dans votre programme.

Bonne chance!

Neil
la source
4
@ BillalBegueradj Citation significative, oui. Adéquat, non. Nous ne parlons pas de progrès, nous parlons de qualité logicielle, et les lignes de code ont une très forte corrélation avec le nombre de défauts trouvés. Voir le document L’effet confondant de la taille de classe sur la validité des métriques orientées objet qui montre que toutes les autres métriques n’ont aucun pouvoir prédictif sur les défauts détectés après ajustement par LOC, ce qui signifie que LOC est le meilleur prédicteur de défauts (ou était alors: 2001). Et, en passant, un article scientifique bat la célèbre citation.
Theraot
5
@Theraot Vous suggérez que puisque le nombre de lignes détermine le nombre de défauts, la qualité du code des programmes plus volumineux est inférieure à celle des programmes plus petits? Je ne suis pas d'accord avec votre métrique, désolé. En outre, si la citation vous dérange vraiment, n'hésitez pas à l'ignorer.
Neil
3
@Neil pour être clair, le nombre de lignes ne détermine pas le nombre de défauts, il a une forte corrélation avec le nombre de défauts trouvés. Cela est facile à comprendre: plus le code est volumineux, plus il y a d'opportunités d'introduire des défauts. Bien entendu, le nombre de défauts diminuerait une fois qu'ils ont été trouvés et corrigés. Ce n’est qu’une corrélation après tout. Addendum: La LOC bat de nombreux indicateurs communs, voir le document pour plus de détails.
Theraot
5
@Theraot Mon argument n'était pas avec la corrélation des défauts au nombre de lignes. Mon argument était avec le grand nombre de défauts équivalant à une mauvaise qualité de code. Chrome a eu sa part de défauts au fil des ans, mais je dirais que la légitimité de toute affirmation suggérant qu’elle est écrite est pire qu’un plugin jQuery de 10 lignes mal écrit sur github.
Neil
3
@Theraot "Un article scientifique bat la célèbre citation." - On dirait que votre papier appuie réellement la citation plutôt que de la battre ...
npostavs
14

(Remarque: la question initiale était: le nombre de bibliothèques améliore-t-il la qualité du code?)

Vous pouvez probablement répondre à cette question par vous-même: Non, bien sûr, le simple fait d'utiliser des bibliothèques n'améliore pas votre code. Si c'était le cas, il serait facile d'écrire du bon code pour tout, sans effort.

Ce que les gens veulent dire quand ils recommandent de réutiliser plutôt que de rouler vous-même, c'est que le code dans une bibliothèque bien connue est probablement plus correct, efficace et / ou utilisable que ce que vous imagineriez vous-même, tout simplement parce que les auteurs ont passé beaucoup plus de temps sur un domaine de fonctionnalité particulier que vous (avec votre échéance pour l’ensemble du projet) pouvez vous permettre.

Mais ce n'est qu'une tendance, pas une loi. Il est certain que certaines bibliothèques ne sont pas aussi utiles à utiliser que le ferait soi-même. Cela se produit souvent lorsque la bibliothèque fait bien plus que ce dont vous avez besoin et d’une manière qui vous obligerait à adapter votre propre base de code à leurs conventions beaucoup plus qu’il n’est raisonnable. Il semble que c'est exactement ce que vous avez trouvé dans cet exemple.

Kilian Foth
la source
4

L'utilisation des bonnes bibliothèques peut vous faire économiser beaucoup de travail, mais il y a aussi beaucoup de coûts cachés:

  • Les bibliothèques doivent être tenues à jour. Vous devez régulièrement vérifier s’ils ont bien reçu les mises à jour (qui pourraient avoir un impact sur la sécurité!) Et les appliquer. Chaque mise à jour de la bibliothèque peut potentiellement casser quelque chose dans votre application. Cela signifie que vous devez ensuite effectuer un test d'intégration complet. Ainsi, chaque bibliothèque dont dépend votre projet augmente les coûts de maintenance à long terme.
  • Certaines bibliothèques Javascript sont si puissantes et utilisent des modèles si particuliers que les gens commencent à les percevoir comme des domaines de compétence techniques distincts. Ainsi, chaque bibliothèque supplémentaire que vous ajoutez risque de dissuader les développeurs qui ne se sentent pas confiants de pouvoir éditer du code reposant sur une structure avec laquelle ils ne sont pas familiers. Embaucher de nouveaux programmeurs de maintenance qui connaissent toutes les bibliothèques que vous utilisez peut devenir un défi.
  • L'ajout d'une bibliothèque à votre site Web augmente les temps de chargement, car l'utilisateur doit charger toute la bibliothèque, même si vous n'en utilisez qu'une petite partie. Certaines bibliothèques populaires vous permettent de télécharger sur mesure construit avec seulement les fonctionnalités dont vous avez besoin, mais même alors , vous comprendront généralement encore beaucoup de code qui ne sera jamais courir (ou pire encore: le code qui ne fonctionne, mais ne fait pas quelque chose d' utile, parce qu’il prépare simplement les structures de données aux fonctionnalités que vous n’utilisez pas).

Par conséquent, avant d’ajouter une autre dépendance à votre projet, vous pouvez également inclure, par exemple, une analyse coûts / avantages.

Philipp
la source
Et répétez cette analyse lorsque vous disposez réellement de données réelles. Vous avez peut-être sous-estimé le coût / surestimé le bénéfice, ou la situation a peut-être changé.
Déduplicateur
1

Cela ne doit pas nécessairement être une décision binaire: utilisez uniquement une bibliothèque OSS ou programmez une nouvelle solution à partir de zéro. Une autre option peut être de réutiliser des parties de la bibliothèque, si la licence le permet.

Par exemple, dans mon domaine (logiciel numérique), une bibliothèque peut contenir des modules de base fins et certains modules spécialisés qui ne me satisfont qu'à 80%. J'utiliserais donc les modules principaux et rédigerais un wrapper pour les modules spécialisés. Ou je peux développer mes propres modules spécialisés en utilisant la conception et le code des modules OSS. Les bits algorithmiques les plus difficiles sont généralement réutilisés à partir de ceux-ci, avec uniquement le code d'échafaudage modifié. Je peux aussi nettoyer une partie du code original. Cela s'est avéré une bonne expérience d'apprentissage et un gain de temps comparé au développement à partir de zéro.

Tupolev._
la source
0

Si quelqu'un a déjà fait le travail pour vous, vous devriez bien sûr l'utiliser.

L'exception à la règle est javascript. Où ils auront importé une douzaine d’autres bibliothèques (versions obsolètes bien sûr) pour ajouter les fonctionnalités de langage qu’ils souhaitent utiliser, puis ont effectué le travail pour vous.

Choisissez votre cadre et restez dedans. Si la bibliothèque fonctionne avec votre framework ou votre js simple, c'est bien. Mais si cela nécessite un cadre différent, cherchez une autre option.

Ewan
la source
4
Beaucoup de fans javascript ici
FCen
0

Les bibliothèques et quand les utiliser est une décision compliquée.

D’une part, vous avez bien testé des méthodes presque standard (dans mon domaine, par exemple, FFTW entre dans cette catégorie, ou quelque chose comme libsndfile), qui sont généralement reconnues pour fonctionner et qui sont des méthodes standard depuis 20 ans. tout le monde utilise.

D'autre part, vous avez des éléments aléatoires de github, sans suite de tests et avec à peu près un seul responsable, généralement pourquoi s'embêter?

Le test acide pour moi est d’abord que la bibliothèque s’intègre à mon architecture (parfois, si vous savez utiliser une bibliothèque donnée, vous finissez par concevoir autour de cela), et je pense que je vais finir par déboguer le code de la bibliothèque d’elses ? Un bon proxy pour la deuxième question est "Existe-t-il une suite de tests automatisés et à quoi ressemble la documentation?".

Un petit débogage n’est pas un problème majeur, mais à ce stade, le code de la bibliothèque commence à compter dans la taille de mon code du point de vue de la maintenance (d’autant plus si mes correctifs ne peuvent pas être poussés en amont pour une raison quelconque).

Je ferais également la différence entre les bibliothèques et les frameworks, même si la distinction n’est parfois pas si claire, les frameworks de mon monde (petit noyau, DSP lourd) tendent à être un vrai casse-tête, surtout si vous essayez de fusionner plus que un ou faire quelque chose légèrement en dehors des lignes, les bibliothèques sont parfois utiles. Je suis conscient que cela se voit très différemment sur la scène de développement web.

En fin de journée, il s’agit d’une décision qui relève du goût et de l’expérience. Même les personnes expérimentées choisissent parfois mal, mais au moins avec une bibliothèque, vous pouvez toujours la déchirer et écrire votre propre implémentation si cela devient trop ennuyeux.

Ah, prendre des décisions....

Dan Mills
la source