web-dev-qa-db-fra.com

Devriez-vous utiliser une bibliothèque lorsque vous pouvez faire la tâche sans elle?

Je suis dans une situation où je peux utiliser un plugin JavaScript open source pour accomplir une tâche. Mais quand j'ai essayé de l'utiliser, je me suis retrouvé à devoir repenser beaucoup de choses de ce que j'avais déjà fait, 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 le fabriquer moi-même, et sans avoir besoin de changer ce que j'ai fait jusqu'à présent.

Devriez-vous quand même opter pour une bibliothèque dans cette situation (comme pour un code de meilleure qualité?)

33
Billal Begueradj

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 situation courante dans ce type de situation serait de minimiser Total Cost of Ownership .

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

Pour de nombreux problèmes triviaux, il vous en coûtera moins cher de développer votre propre, mais pour des problèmes modérément complexes en dehors des compétences de base de votre organisation, il sera souvent judicieux de recourir à des tiers.

Il y a aussi d'autres objectifs à considérer (par exemple le risque) mais le TCO est le plus important.

54
John Wu

Bill Gates a dit un jour:

"Mesurer la progression de la programmation par des lignes de code, c'est comme mesurer la progression d'un bâtiment en poids."

Cette citation me vient à l'esprit parce que la même chose pourrait finalement être dite pour le nombre de bibliothèques. En règle générale, je n'utilise pas de bibliothèques sauf:

  1. Il n'y a pas d'autre moyen de le faire. Faire sans ne serait plus économiquement viable pour produire le produit à temps et dans les limites du budget.
  2. Cela me ferait gagner beaucoup de temps car j'exigerais de nombreuses fonctionnalités de ladite 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 fin de compte, vous ne devez pas ajouter une bibliothèque à votre programme à moins qu'elle ne serve à quelque chose. Si vous devez vous demander quel est ce but, vous ne devriez probablement pas l'ajouter à votre programme. Le code qualité de votre programme en profite donc car il fait appel avec élégance à chaque bibliothèque sans être alourdi par la nécessité de réécrire nécessairement les bibliothèques à l'intérieur de votre programme.

Bonne chance!

36
Neil

(Remarque: la question d'origine é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 le vôtre, c'est que le code dans une bibliothèque bien connue est probablement plus correct, efficace et/ou utilisable que ce que vous proposeriez vous-même, simplement parce que les auteurs ont passé beaucoup plus de temps sur un domaine particulier de fonctionnalité que vous (avec votre date limite pour l'ensemble du projet) pouvez vous permettre.

Mais ce n'est qu'une tendance, pas une loi. Il peut certainement y avoir des bibliothèques qui ne sont pas aussi utiles à utiliser que le ferait votre propre rouleau. Cela se produit souvent lorsque la bibliothèque fait bien plus que ce dont vous avez besoin, et le fait d'une manière qui vous obligerait à adapter votre propre base de code à leurs conventions beaucoup plus que ce qui est raisonnable. Il semble que ce soit exactement ce que vous avez trouvé dans ce cas.

14
Kilian Foth

Bien que l'utilisation des bonnes bibliothèques puisse vous faire économiser beaucoup de travail, 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 reçu des mises à jour (ce qui pourrait être important pour la sécurité!) Et les appliquer. Chaque mise à jour de 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 frais de maintenance à long terme.
  • Certaines bibliothèques Javascript sont si puissantes et utilisent des modèles si uniques que les gens commencent à les percevoir comme des domaines d'expertise techniques distincts. Ainsi, chaque bibliothèque supplémentaire que vous ajoutez peut effrayer les développeurs qui ne se sentent pas en confiance pour éditer du code qui repose sur un framework qu'ils ne connaissent pas. L'embauche de nouveaux programmeurs de maintenance qui connaissent toutes les bibliothèques que vous utilisez peut devenir difficile.
  • L'ajout d'une bibliothèque à votre site Web augmente les temps de chargement, car l'utilisateur doit charger la bibliothèque entière, même si vous n'en utilisez qu'une petite partie. Certaines bibliothèques populaires vous permettent de télécharger des versions personnalisées avec uniquement les fonctionnalités dont vous avez besoin, mais même alors, vous incluerez généralement beaucoup de code qui ne s'exécutera jamais (ou pire encore: du code qui ne s'exécute, mais ne fait rien d'utile, car il prépare simplement des structures de données pour des fonctionnalités que vous n'utilisez pas).

Donc, avant d'ajouter une autre dépendance à votre projet pour inclure quelque chose que vous pourriez tout aussi bien écrire vous-même, faites une analyse coûts/avantages.

4
Philipp

Cela ne doit pas ê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 avoir des modules de base fins et certains modules spécialisés dont je ne suis satisfait qu'à 80%. J'utiliserais donc les modules de base et j'écrirais 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 durs sont généralement réutilisés à partir de ceux-ci, seul le code d'échafaudage étant modifié. Je peux également nettoyer une partie du code d'origine. Cela s'est avéré une bonne expérience d'apprentissage et un gain de temps par rapport au développement à partir de zéro.

1
esc_2_space

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

L'exception à la règle est le javascript. Où ils auront importé une douzaine d'autres bibliothèques (versions obsolètes bien sûr) pour ajouter les fonctionnalités du langage ils veulent utiliser et alors fait le travail pour vous.

Choisissez votre cadre et restez-y. Si la bibliothèque fonctionne avec votre framework ou plain js, très bien. Mais s'il a besoin d'un cadre différent, recherchez une autre option.

0
Ewan

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

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

D'un autre côté, vous avez des éléments aléatoires de github, sans suite de tests et seulement environ 1 responsable, généralement pourquoi s'embêter?

Le test d'acide pour moi est tout d'abord la bibliothèque s'inscrit-elle dans mon architecture (parfois, si vous savez que vous voulez utiliser une bibliothèque donnée, vous finissez par concevoir autour de cela), et est-ce que je pense que je vais finir par déboguer le code de bibliothèque de quelqu'un d'autre ? Un bon proxy pour la deuxième question est "Existe-t-il une suite de tests automatisée 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 sur ma propre taille de 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 différencierais également les bibliothèques et les cadres, pour autant que la distinction ne soit pas toujours claire, les cadres dans mon monde (petit noyau, DSP lourd) ont tendance à être une douleur dans le cul, 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 est vu très différemment dans la scène des développeurs Web.

En fin de compte, c'est une décision qui dépend du goût et de l'expérience, et même les expérimentés choisissent parfois mal, toujours au moins avec une bibliothèque, vous pouvez toujours l'arracher et écrire votre propre implémentation si cela devient trop ennuyeux.

Ah, prendre des décisions....

0
Dan Mills