Existe-t-il des raisons concrètes de ne pas utiliser fortement les bibliothèques et les extraits de code? [fermé]

42

Globalement, je suis en programmation depuis environ 8 ans maintenant et il me semble que je compte de plus en plus sur des bibliothèques open source et des extraits (maudits GitHub!) Pour "faire le travail". Je sais qu'avec le temps, je pourrais écrire ma propre mise en œuvre, mais j'aime bien me concentrer sur la conception globale.

Est-ce normal (environnement non-entreprise)? Qu'est-ce qui pourrait mal se passer si ma "programmation" n'est rien de plus que de coller différentes bibliothèques ensemble?

Je sais à propos de "ne pas réinventer la roue" mais que se passe-t-il quand on n'invente plus une seule roue?

Henrik P. Hessel
la source
3
Voulez-vous dire " environnement non- entreprise " ou un environnement où les gens ne coopèrent pas ?
Bryan Oakley
Je pensais que la raison pour laquelle nous écrivons dans les interfaces et les classes abstraites est que nos bibliothèques sont plus universelles, moins dépendantes, plus souples ...
IAbstract
1
Tellement mal, en fait, que la ceinture du père se détache.
Thomas Eding
Rappelez-vous simplement de rendre hommage et de donner crédit lorsque le crédit est dû. Si jamais vous prétendez que le code que le vôtre, puis la ceinture definitly
hanzolo
3
Non, cela ne fait pas de vous un mauvais programmeur, mais cela ne fait pas de vous un meilleur programmeur non plus.

Réponses:

85

Utiliser des bibliothèques au lieu de réinventer la roue: génial! C'est comme ça que tout le monde devrait le faire. Vous n'êtes pas payé pour faire ce qui est déjà fait.

Utilisation d'extraits de code: tant que vous comprenez ce que vous copiez-collez et que vous investissez du temps pour le rendre cohérent (au lieu d'un patchwork de styles et d'approches différents), il n'y a rien de mal à cela.

utilisateur281377
la source
C'est ce que je pensais. Peut-être que je devrais commencer un projet open source pour me débarrasser de ce sentiment :)
Henrik P. Hessel
25
+1 de moi. Les gens ne devraient jamais utiliser de code qu'ils ne comprennent pas. Cela vaut pour les extraits et les bibliothèques.
Tim Post
5
En ce qui concerne les extraits, je réécris moi-même le code pour que je sache comment il fonctionne. Les bibliothèques, je ne réécris jamais à moins que cela ne fonctionne pas pour moi pour une raison quelconque.
Rei Miyasaka
12
Tim: En ce qui concerne les bibliothèques, je n'ai pas à comprendre comment cela fonctionne, tant que je sais ce que ça fait. Par exemple, beaucoup d’entre nous utilisent des bibliothèques de chiffrement; Je ne sais pas comment fonctionne AES, mais je sais ce que ça fait et quand l'utiliser.
user281377
@Rei Miyasaka Il semble que les extraits soient souvent de moins bonne qualité qu'une bibliothèque autonome. J'ai moi-même dû refactoriser plusieurs parties des extraits que j'ai utilisés.
Henrik P. Hessel le
24

les bons programmeurs écrivent du bon code; les grands programmeurs volent du bon code.

dan_waterworth
la source
+1 pour la ligne. Est-ce original?
apoorv020
Je souhaite, non, c'est un étrange adage.
dan_waterworth
Je suis sur mon iPhone mais je pense que c'est une citation de Pablo Picasso (remplace les programmeurs par des artistes)
Henrik P. Hessel le
21
Dit Picasso Good artists copy, Great artists steal.
dan_waterworth
3
Très bonne citation. Pense que je vais voler ^ H ^ H ^ H ^ H ^ H le réutiliser.
Wonko the Sane
24

Le codage est le niveau de programmation le plus bas. Plus le niveau d'abstraction est élevé, meilleur est le programmeur. Choisir les bonnes bibliothèques (pas nécessairement celles qui sont à code source ouvert), les relier correctement et maintenir la structure est beaucoup plus difficile, mais plus efficace, plus rapide et moins coûteux que de tout écrire vous-même.

Bits Alliés d'Eugene Mayevski
la source
13

J'aime écrire mes propres bibliothèques. J'aime aussi que mes projets soient terminés à temps. Je pense qu'avec le temps, la plupart des bons programmeurs construisent une collection de bits utiles et réutilisables. Je ne sais pas pour vous, mais je ressens bien chaque fois que j'utilise une bibliothèque que j'ai écrite il y a cinq ans.

Il n'y a absolument rien de mal à utiliser le code de bibliothèque qui a été testé et apprécié au fil du temps. Vous savez comment cela fonctionne, vous pouvez compter sur sa complexité et l'implémenter rapidement.

Cela étant dit, je suppose que vous comprenez le code de la bibliothèque. Je suppose que, si on vous laisse suffisamment de temps, vous pouvez mettre en œuvre quelque chose de qualité similaire.

Je connais de très bons programmeurs C qui pourraient implémenter la bibliothèque C standard, dont certains ont simplement un exercice d'apprentissage / d'aiguisement. Parmi les activités les plus amusantes que j'ai eues pendant mes loisirs, j'ai travaillé sur la bibliothèque C dans HelenOS.

Il n’ya donc rien de mal à utiliser le code de bibliothèque, tant que vous continuez à être curieux et à apprendre. Il va sans dire que vous ne devez pas utiliser de code que vous ne comprenez pas, sauf si vous en utilisez un effort pour comprendre son fonctionnement.

Tim Post
la source
Vous avez assez bien décrit mon aversion contre jQuery, +1.
aaaaaaaaaaaa
5

Je ferai mieux que certains autres dans cette question: je ne pense même pas que le développeur "client" d'une bibliothèque ait besoin de "comprendre" le code de cette bibliothèque.

Je suis (comparé à certains) développeur relativement nouveau sur iPhone. Il y a BEAUCOUP de bibliothèques que j'utilise tous les jours et que je n'aurais jamais pu générer par moi-même, et dont le code me dépasse largement. Peu importe le moins du monde:

1) Je comprends parfaitement l'interface avec ces bibliothèques (je suis un ninja ASIHTTPRequest!)
2) Je choisis des bibliothèques qui sont généralement utilisées à grande échelle , je peux donc être sûr qu'elles ont bien été explorées et résolues. (par exemple: ASIHTTP, la bibliothèque JSON de Stig Brautaset, la bibliothèque obj-c de Facebook, etc.)
3) À défaut # 2, c'est assez simple pour que je puisse me frayer un chemin à travers et trouver / corriger / personnaliser tout ce qui doit être trouvé / réparé / personnalisé .

Ce n ° 2 va être la partie controversée de cela, je parie. Le fait est que je compte sur la communauté open source, une communauté de développeurs certainement plus expérimentée et probablement plus intelligente que moi. Mais c'est tout l'intérêt de l'open source. Alors voilà.

Dan Ray
la source
3

Je voudrais lancer un avertissement pour utiliser des bibliothèques. En tant qu'utilisateur fréquent des bibliothèques scientifiques de Perl et R (et certaines de Java), je devais souvent pirater une bibliothèque pour éviter des frais généraux démesurés. Utiliser des bibliothèques est une bonne chose, mais de plus en plus de bibliothèques dépendent elles-mêmes d'autres bibliothèques, qui appellent une troisième bibliothèque qui utilise la bibliothèque standard pour effectuer une tâche plutôt commune. Et chaque étape du processus nécessite des vérifications d’entrée et de sortie. Un grand nombre de ces contrôles sont complètement redondants, mais ils pèsent néanmoins sur l'application. Et quand utilisé dans une boucle, alors peut commencer à peser assez lourdement.

À côté de cela, vous ne pouvez pas être sûr que les bibliothèques conservent toujours la compatibilité, ou ne contiennent pas de bogues. En fait, toutes les bibliothèques contiennent quelques bugs, c'est la nature du code. Par conséquent, plus vous dépendez de bibliothèques, plus vous introduisez de bugs potentiels dans votre code. Et ces bugs que vous ne pouvez pas résoudre vous-même aussi facilement sans pirater à nouveau les bibliothèques.

Utiliser des bibliothèques est une décision très intelligente, mais si et seulement si vous connaissez assez bien les bibliothèques et leur comportement.

Je sais, penser fait mal et les ordinateurs ne coûtent pas cher, mais quand même. Ne pas penser peut faire plus mal.

Joris Meys
la source
3

Généralement, copier de grandes quantités de code source est une mauvaise pratique. Si le code a été développé pour une autre application de votre entreprise, vous devez le réutiliser en l'extrayant dans une bibliothèque à utiliser par les deux applications. Vous ne devriez pas copier le code. La copie du code vous obligera à conserver deux copies au lieu d'une copie commune.

Kevin Cline
la source
3

La réutilisation de code est une très bonne idée. Cela réduit la redondance et favorise la maintenabilité.

Le titre suggère que vous utilisez le code en tant que bibliothèque, mais le texte de votre question implique que vous copiez peut-être le code source dans un nouveau projet. J'en resterais à utiliser autant que possible le code d'autres développeurs en tant que bibliothèque.

Il y a un problème si le code est mauvais, cassé ou basé sur un modèle qui ne convient pas très bien à votre application. Dans ce cas, il serait peut- être plus simple de supprimer tout ou partie du code et de repartir à zéro plutôt que d'essayer de comprendre pourquoi il a été écrit d'une manière donnée. Gardez l’autre code pour référence, cependant; vous pouvez rencontrer un problème que vous ne savez pas comment résoudre. Il est fort probable que l'autre développeur ait probablement rencontré le même problème et il est intéressant de voir comment il l'a résolu.

pswg
la source
Vous m'avez bien eu. Je parle également de la copie de nombreuses lignes de codes de travaux d’autrui (pas de bibliothèques), car c’est légal dans mon cas. Qu'est-ce que tu penses?
Arman
1
@Arman C'est toujours une bonne idée. Du point de vue de la maintenance, ce n'est pas aussi bon car lorsque le développeur d'origine corrige un bogue dans son code, il le reste dans le vôtre. C'est toujours mieux que rien car au moins le code est assez similaire dans les deux projets et vous pouvez appliquer le correctif de bogue séparément sans avoir à faire autant.
Pswg
: Une dernière question: comme l’a dit Mason, si, par exemple, je trouvais que vos 2500 lignes de code (encore une fois, je ne souligne pas les bibliothèques) vous sont utiles pour commencer mon travail, et vous me laissez le copier, faites-le. vous pensez que c'est bon pour moi? Est-ce éthique?
Arman
@Arman Si c'est légal, c'est probablement aussi éthique. S'il est écrit par un développeur de la même organisation, c'est généralement l'organisation qui possède le code et vous avez le droit de l'utiliser (conformément aux règles de l'organisation). Si a été écrit sous une organisation différente, vous devez obtenir l'autorisation de cette organisation. Généralement, si le code n'est couvert par aucune licence, le développeur d'origine ne se soucie pas vraiment de son utilisation, mais j'attribuerai toujours le développeur d'origine dans des commentaires de code bien visibles (avec un lien si possible).
pswg
4
Idéalement, vous devez également comprendre le fonctionnement du code copié.
Mike Partridge
1

C’est généralement une bonne idée, aussi longtemps qu’il n’ya pas de problèmes juridiques.

Cependant, assurez-vous de prendre le temps de comprendre ce que fait la bibliothèque et comment elle le fait. Utiliser une bibliothèque "magique" pour prendre en charge des choses que vous ne comprenez pas est un bon moyen de vous faire exploser, car vous ne vous en êtes pas bien servi et vous n'avez aucune idée de la façon de la réparer.

Maçon Wheeler
la source
1
Je me demande si "copier et coller" une centaine de lignes de code créées par mon généreux collègue programmeur sont toujours éthiques.
Arman
2
@Arman: Essayez de lui demander.
Mason Wheeler
1
Si la licence le permet, pourquoi ne serait-ce pas éthique? Si vous essayez d'accomplir un travail et qu'une roue a déjà été inventée et mise à votre disposition gratuitement, il serait erroné (c'est-à-dire contraire à l'éthique) de perdre une minute de votre temps à le réinventer. Si vous devez apprendre à réinventer une roue, c'est complètement différent.
Darius X.
1

Réutiliser le code légalement n'a presque aucun inconvénient et deux avantages énormes:

  1. Il fait le travail. C’est le plus important pour le développement professionnel. En fin de compte, vous avez un travail bien rémunéré, car vous savez comment faire bouger les choses qui gêneraient la plupart des non-programmeurs; la réutilisation vous permet d’atteindre cet objectif plus rapidement, vous permettant ainsi de gagner en valeur dans votre travail.
  2. Tu apprends des trucs. C'est la raison la plus importante de l'amélioration de soi. Il n'y a pas de meilleur moyen d'améliorer le codage que de lire un bon code écrit par d'autres. Même un mauvais code écrit par d'autres vous apprend généralement quelque chose! Et il n'y a pas de meilleur moyen de comprendre le fonctionnement d'une bibliothèque, d'une API, d'un langage ou d'un domaine que de lire et d'améliorer des solutions déjà écrites par d'autres. Les deux choses se produisent généralement lorsque vous réutiliser le code existant, car aucune solution préexistante ne fera jamais tout à fait ce que vous avez besoin - et qui a suivi bricoler avec la source est l' endroit où le coup de pouce de connaissances vient.
Kilian Foth
la source
C'est vraiment mon objectif, apprendre. Pour le moment, cela vaut plus que de terminer mon projet. C'est pourquoi je me sens mal en essayant de faire travailler quelqu'un avec juste un petit effort (ne me référant pas seulement aux bibliothèques).
Arman
1

Est-ce que l'utilisation intensive de la bibliothèque et des extraits de code fait de vous un mauvais programmeur?

Si vous utilisez des bibliothèques et des extraits de code aux endroits appropriés, alors «Non» ne signifie pas que vous êtes un mauvais programmeur. Cela signifie que vous êtes un programmeur intelligent qui peut appliquer la sagesse des autres aux endroits appropriés.

Toutefois...

Il faut du temps pour trouver des bibliothèques et des extraits de code. Par conséquent, si vous ne pouvez pas écrire de code vous-même et que vous devez passer des heures à trouver des bibliothèques et des extraits de code pour implémenter des tâches triviales, alors «Oui» est un mauvais programmeur.

Jim G.
la source
0

Non. Les programmeurs devraient utiliser des bibliothèques déjà existantes. Pas de réinvention de la roue. Si vous avez une meilleure méthode, vous pouvez y aller, sinon que fait-elle vraiment en écrivant le même code. La seule chose à faire est de savoir quel est le code (et seulement si cela compte).


la source
0

En plus des raisons mentionnées dans les autres réponses, ne pas utiliser le code (tant que cela convient bien à votre problème) peut être considéré comme contraire à l'éthique pour les raisons suivantes:

  1. Vous perdez peut-être intentionnellement votre temps d'employeur OU
  2. Vous pourriez être intentionnellement livrer un produit inférieur

N'oubliez pas que ces deux éléments sont difficiles à déterminer à l'avance.

Regardez aussi Not Noted Here , qui est communément appelé un motif anit.

Zachary Yates
la source
0

Pour l'achèvement, autorisez un contre-argument: http://web.archive.org/web/20150326134617/https://michaelochurch.wordpress.com/2015/03/25/never-invent-here-the-even-worse ici

une mentalité que j'appelle "Never Invent Here" (NeIH). Avec cette mentalité, les ressources externes sont surévaluées et font souvent l’objet d’une confiance implicite, ce qui permet aux ingénieurs de passer plus de temps à s’adapter aux bizarreries de ressources standard, et moins de temps à la constitution de ressources propres.

Il y a toujours un équilibre.

Dimitrios Mistriotis
la source
-2

Je suis pour ne pas utiliser les bibliothèques sauf si absolument nécessaire. Les dépendances limitent la portabilité et la durée de vie. J'ai 34 ans d'expérience en développement de logiciel et j'aimerais qu'au moins un de mes programmes dure plus de 3 ans sans être détruit par l'érosion (changement).

COM (Component Object Model), la réponse il y a 17 ans, en théorie génial, en pratique douteux, composants réutilisables pas vraiment, je n'utiliserai que les composants de base et seulement si je suis obligé de le faire.

Les API et SDK ne sont pas très utiles. Si je décompose le nombre de lignes de code que j'utilise réellement dans une bibliothèque, le temps que je passe à les faire fonctionner par rapport à leur écriture, je pense que c'est un lavis. J'ai complètement cessé d'utiliser les kits de développement logiciel (SDK), les frais généraux sont extrêmes.

Frameworks: Zend, Silverlight, WCF, .NET, les systèmes en couches, certes, ils peuvent accélérer le développement initial, mais lorsque je dépasse leurs limites, le temps que je passe à réparer les fissures ne vaut tout simplement pas la peine. Quel âge ont-ils et sont-ils imperméables à l'érosion?

Je suis allé à JavaScript et HTML avec seulement mes bibliothèques. J'ai simplifié JavaScript en n'utilisant que les types d'instructions les plus courants. J'espère que dans 10 ans, je pourrai écrire quelque chose qui durera.


la source
Une partie de ce problème ne concerne pas tant les bibliothèques que la bibliothèque, mais la technologie en constante évolution des langages et des outils de programmation qui vous oblige à rechercher de nouvelles bibliothèques dans la nouvelle technologie pour faire la même chose.
gbjbaanb
-2

Tout dépend. Si vous codez un jeu, il vous faudra utiliser une bibliothèque (ex. Allegro), mais vous ne pouvez pas vraiment être considéré comme un programmeur si vous copiez / volez / empruntez (quel que soit le code d’autre personne). Je dis non pas de réinventer la roue mais à un point raisonnable. Ne faites pas votre programme entier d'extraits que d'autres personnes ont écrit. Asseyez-vous devant votre ordinateur et faites-le vous-même ... arrêtez de voler du code. Les gens sont devenus trop paresseux ces jours-ci et il suffit de copier et coller.

Jadzia
la source