J'ai appris très tôt que couper et coller le code de quelqu'un d'autre prend plus de temps à long terme que l'écrire vous-même. À mon avis, à moins que vous ne le compreniez vraiment, couper et coller du code aura probablement des problèmes qui seront un cauchemar à résoudre.
Ne vous méprenez pas, je veux dire que trouver le code d'autres personnes et en tirer des leçons est essentiel, mais nous ne le collons pas à notre application. Nous réécrivons les concepts dans notre application.
Mais j'entends constamment parler de gens qui coupent et collent, et ils en parlent comme si c'était une pratique courante. Je vois aussi des commentaires d'autres personnes qui indiquent que c'est une pratique courante.
Alors, la plupart des programmeurs coupent-ils du code?
la source
Réponses:
Deux cas généraux:
D'un projet à l'autre:
La plupart des programmeurs coupent et collent le code de cette manière Ils peuvent trouver un projet précédent ou quelque chose en ligne et le copier / coller exactement ou le copier / coller et le modifier. Je pense que cette pratique est généralement bien. Ceci est particulièrement utile lorsqu'il s'agit de code éprouvé. (Exemples: une sorte d'objet utilitaire d'un projet précédent qui a bien fonctionné, ou éventuellement d'un blog avec peu de modifications nécessaires). Là où cela peut être mauvais, c'est lorsque vous copiez du code que vous ne comprenez pas, ou que le code est médiocre, ou qu'il existe une solution alternative bien meilleure que le code que vous collez.
Dans le même projet: Copier et coller dans le même projet n'est généralement pas une bonne idée. C'est une mauvaise odeur que le code en cours de copie devrait juste être dans une méthode / classe quelque part et appelé à plusieurs reprises. Il y a quelques exceptions à cela, mais généralement le programmeur devrait se dire: " Est-il possible de paramétrer ce code que je copie? ".
la source
La plupart des programmeurs le font, mais cela ne signifie pas que vous devriez
L'un de mes mantras de programmation est le suivant: "Si je copie et colle du code, je fais quelque chose de mal" . Essentiellement, SEC .
Je pense qu'il devrait être évident que la réutilisation du code signifie utiliser le code comme une ressource, et non le répéter. Parfois, j'ai copié et collé le code de mon propre code. Dans la plupart des cas, je termine par un code de plaque de chaudière ou des éléments très similaires.
Après avoir investi un peu plus de temps avec ce code, je termine avec les éléments suivants:
On peut se demander si nous devrions ou non copier / coller du code puisque le client / responsable ne s’en soucie pas (du moins directement et à court terme) et que vous pourriez vous retrouver avec les mêmes résultats, mais le problème vient vraiment de la situation. conduit à des bugs, à une perte de modularité et, finalement, à la maintenance.
Ce que vous devriez faire: refactor ASAP
Personne n’écrit un code parfait, même si cela fonctionne, même si vous n’êtes pas copier / coller et qu’il s’agit de votre propre code, si vous n’êtes pas complètement satisfait, il suffit de mettre une note dans les commentaires (par exemple, un docblock "@todo") pour le rappeler. vous-même quoi refactoriser et pourquoi… même si vous ne le faites pas vous-même, cela pourrait faire la différence entre le bonheur et la frustration totale du mainteneur.
Finalement, vous finirez avec un bon code , même si vous copiez et collez.
via XKCD
la source
Lorsque je suis coincé et que je cherche des éléments pour résoudre mon problème et que je tombe sur un extrait de code utile qui fait ce que je veux, je le copie naturellement. Parfois, c'est juste l'essentiel. Je le change ensuite pour répondre à mes besoins. Cela se produit plus souvent lorsque je fouille dans des domaines pour lesquels je ne suis pas un expert (actuellement, Objective-C).
Je prends toujours le temps d'apprendre quelque chose du code. C'est donc pour moi un excellent moyen d'apprendre et d'éviter de réinventer la roue.
la source
Je vais parler de copier / coller le code d'autres personnes ici. Obtenir des parties de mon propre travail à partir de ma bibliothèque personnelle est un jeu juste. Je les connais et les comprends par définition.
Je constate que la situation la plus fréquente dans laquelle je code "copier-coller" est lorsque j'ai un problème particulier et que je rencontre un article de blog qui le résout. La plupart du temps, je ressaisis la solution dans mon projet (après tout, c'est probablement écrit dans le style de l'auteur du blog, si rien d'autre). Ce n'est pas vraiment mon code, mais je ne me sens pas mal de l'utiliser dans ce scénario.
Sortir et saisir des méthodes ou des systèmes entiers pour les coller dans mon projet tel quel et appeler cela fait est quelque chose que je ne comprends pas. Il y avait une question sur StackOverflow l'autre jour qui illustrait parfaitement le problème de faire quelque chose comme ça.
Concilier un monstre Frankenstein à partir de différentes parties de code ne peut tout simplement pas être aussi efficace. Je veux dire, si vous y arrivez bien, cela signifie que vous reproduisez la même solution encore et encore ou que vous avez suffisamment compris le code des autres personnes pour que le même niveau de copie / collage ne soit plus nécessaire. la productivité s'améliorerait si on n'avait pas à résoudre les problèmes entre les échantillons de code incompatibles.
Personnellement, je n'ai pas rencontré beaucoup de programmeurs qui copient / collent à grande échelle. J'en ai vu beaucoup qui se codent dans les coins les plus profonds et les plus sombres, mais c'est une autre histoire. Sur la base de mon anecdata personnelle, je dirais que la plupart des programmeurs ne copient / colle pas des applications entières ensemble, mais il est très difficile de dire avec certitude.
la source
Bad: copier et coller le même bloc de code encore et encore
Si vous faites cela, vous devriez probablement prendre une seconde pour réfléchir à ce qui peut être extrait du code en cours de copie et créer une fonction / méthode pour le gérer. C’est là que le principe DRY (ne vous répétez pas) compte.
Bon: Copier un bloc de code connu pour fonctionner
DRY (Don't Repeat Yourself) s'applique également ici, mais dans un sens différent. IE, ne répétez pas le travail que vous avez déjà fait dans le passé. Si vous avez pris le temps d'écrire une section de code, de la mettre au point, de la tester et que son efficacité est prouvée dans une base de code de production; vous seriez stupide de ne pas le réutiliser.
La plupart des gens donnent l’impression de ne pas bien copier-coller parce que beaucoup de programmeurs débutants passent leur temps à parcourir le net et à copier / coller un méli-mélo du code d’autrui sans comprendre ce qu’il fait réellement.
Tout écrire à partir de rien à chaque fois n'est pas mieux. Je sais qu'il y a beaucoup de programmeurs puristes de la vieille école qui pensent que tout devrait être écrit à partir de rien et j'espère ne pas rester coincé à travailler avec eux. Si vous avez 5 ans d’expérience en programmation, vous devriez avoir une bibliothèque assez substantielle de code à réutiliser. C'est l'un des meilleurs atouts qu'un programmeur expérimenté peut apporter à la table, car il permet potentiellement de gagner beaucoup de temps de développement.
Si au début vous ne comprenez pas votre ancien code, prenez un moment pour lire les commentaires et ré-familiarisez-vous. Si vos commentaires sont nuls ... eh bien, c'est un tout autre problème.
la source
Après 25 ans d'écriture de code, il y a eu des moments où (sans accès au code que j'ai écrit pour un employeur précédent), j'ai souhaité pouvoir copier et coller. CEPENDANT, cela a été très rare (et continuez à lire).
Le meilleur exemple est peut-être un analyseur en ligne de commande très simple que j'ai rencontré il y a des années pour les systèmes d'exploitation Unix. Une simple boucle permettant de parcourir les arguments et de traiter les options. C'était incroyablement simple et élégant, et je l'ai utilisé (plus comme un motif que comme un copier-coller littéral) plusieurs fois depuis. C'est l'exception plutôt que la règle.
Habituellement, couper et coller un ole uni est tout à fait inapproprié - il faut davantage couper et coller le concept, ou l’algorithme, qui a été important.
Je ne suis pas trop fier - je me ferai un plaisir de chercher un algorithme de vérification de parité ou de code de blocage très rapide ou quelque chose d'exotique comme ça. Ensuite, passez quelques heures à comprendre si c’est vraiment ce que je cherchais, ou une pile naïve de bêtises.
Je m'inquiète chaque fois que quelqu'un copie simplement du code sans s'arrêter pour le comprendre. Ils sont soit un génie (comprenez-le et toutes ses subtilités en un coup d'œil), soit un imbécile. Il n'y a pas beaucoup de place pour rien entre les deux. Oh, et il n'y a pas beaucoup de vrais génies non plus.
Sans compréhension, vous n'avez vraiment aucune idée de ce que vous venez d'introduire VRAIMENT, dans des circonstances non seulement heureuses mais malheureuses, mais également dans des conditions d'entrée. Parfois, cela n'a pas d'importance car vous avez de la chance. Et parfois, cela cause beaucoup de douleur à long terme.
la source
Il existe une situation courante dans laquelle vous devez BESOIN de le faire pour être productif.
Toute technologie qui ne vous est pas familière est difficile à maîtriser à moins d’avoir un exemple concret pour commencer. Par conséquent, vous copiez et collez-le pour que quelque chose fonctionne réellement , puis vous commencez à le bricoler.
la source
En tant que nouveau programmeur (après 4 mois d’activité), je compte beaucoup sur l’aide (que ce soit de SO ou d’autres lieux). Je tiens à ne pas copier et coller aveuglément le code des autres. Même si le code fourni correspond à ce que je vais utiliser, je le dactylographierai dans mon programme, puis je passerai un peu de temps à vérifier que je comprends parfaitement ce qu'il fait et les raisons qui le motivent.
Je veux m'assurer que j'apprends constamment et pas simplement un expert en couper-coller
la source
J'ai tellement de sentiments sur ce sujet, et je ne peux honnêtement pas dire qu'aucun d'entre eux soit tout à fait objectif.
Il existe de nombreux arguments pour couper et coller le code d'autres personnes dans votre application. Certains d'entre eux peuvent avoir un sens, d'autres non. Par exemple, si vous utilisez une méthode d'un blog qui prend une entrée et exécute un algorithme mathématique complexe qui sort de vos capacités mathématiques et crache un résultat - c'est un argument pour couper / coller - obtenez l'autorisation de l'auteur pour utiliser leurs code et les créditer où il est dû - c'est la chose honorable à faire.
Il existe des arguments pour ne pas réinventer la roue - encore une fois, cela a du sens, en théorie. Mais si vous ne prenez pas le temps de vous familiariser avec le code que vous copiez et collez, vous ne savez pas s'il existe un meilleur moyen de résoudre ce problème, vous ne savez pas s'il y a des bogues dans le code. . Et si la roue que vous collez est cassée?
Il existe des arguments en faveur de la rapidité et de l'efficacité: vous construisez une bibliothèque de codes d'autres personnes que vous avez volés, volés, plagiés ou autrement. ensemble de pièces récupérées.
Il y a des moments et des endroits où je considère ce comportement comme totalement acceptable. Pour bidouiller ensemble des outils rapides à jeter qui ne sont pas conçus pour durer, mais pour accomplir une tâche, en ce moment, que ce soit par gré ou de force. Dans le but de prototyper et d'étudier les accords, d'apprendre et de progresser dans un contexte théorique, je pense que c'est un jeu totalement juste.
Couper et coller le code des autres utilisateurs est du plagiat - si vous avez la bénédiction et comprenez le code que vous collez et si cela cadre avec les normes de codage de votre application, alors je vous concède que c'est un jeu juste.
En tant qu’ingénieur logiciel professionnel, je suis rémunéré pour maintenir une norme et un code d’éthique. Je ne suis pas payé pour voler, plagier ou enfreindre le droit d'auteur d'autrui, exposant ainsi mon client à des poursuites. En dehors de cela, il existe un risque très réel que lorsque vous exécutez un code coupé / collé, il ait des effets secondaires catastrophiques.
Sans cibler cette réponse sur vous John, je sais que vous êtes très enclin à l’éthique quand il s’agit de sujets comme celui-ci, alors c’est vraiment un discours général qui va dans le sens de la question elle-même.
Addendum : Cela dit, j’estime que couper et coller votre propre code entre les projets est tout à fait acceptable - à moins que cela ait été écrit en tant que travail à la location pour quelqu'un d'autre, auquel cas vous ne possédez pas le droit d'auteur et vous devriez obtenir la permission. de la personne pour laquelle vous l'avez codé. J'ai constaté que, à moins que le code ne concerne les concepts fonctionnels relatifs à la propriété, la plupart des employeurs acceptent que vous réutilisiez vos propres idées pour d'autres clients.
la source
Étant donné que, dans un référentiel open source, 15% de toutes les méthodes sont copiées d'un projet à un autre (pdf), la réponse semble être clairement un oui.
la source
Si le code est bon, au lieu de copier et coller, il devrait être transformé en une bibliothèque commune. Mais les gens ne peuvent pas s’embêter à penser à la refactorisation et ils préfèrent avoir la même fonctionnalité répartie par copie et par méthode.
Au lieu d'avoir une loi absolue universelle de copier et coller est bonne ou mauvaise, il faut voir quand l'utiliser.
Les avantages du copier-coller sont les suivants: vous permet d'aller vite Les inconvénients sont les mêmes: le même code est répandu à plusieurs endroits et tout problème détecté / résolu doit être résolu partout, si au lieu de copier-coller, on l'utilisait comme bibliothèque commune, puis la mise à jour se propager partout. Pour un petit investissement initial consistant à utiliser une bibliothèque au lieu de répandre le même code partout, de multiples variétés.
Le choix consiste à gagner du temps au lieu de gagner beaucoup de temps par la suite, puis copier et coller est la meilleure solution, sinon refactorez-le et placez-le dans une bibliothèque commune.
la source
Dans la plupart des cas, le code que vous trouverez sur le net ne correspondra pas à vos objectifs.
Ce que je vois faire beaucoup, c’est copier le code de quelqu'un, le réduire à l'essentiel, puis l'ajouter jusqu'à ce qu'il réponde à mes exigences. Je le restructurerai toujours pour qu'il corresponde à mes conventions de nommage et à mon style de codage.
Personnellement, je déteste quand je lis un tutoriel et ils commencent par montrer du code pour un cas compliqué. Commencez avec l'essence et montrez les blocs de construction pour étendre le code. Si jamais je commence mon propre blog, je fournirai aux gens un exemple de code commenté qui montre l'essentiel de ce que je veux faire, comment ajouter des fonctionnalités / des cas spéciaux et un exemple pleinement fonctionnel de la fonctionnalité de base.
la source
Pourquoi réinventer la roue si vous comprenez ce que fait le code, si vous êtes autorisé à le réutiliser (ou à son ouverture) et si vous n'avez pas nécessairement besoin de tout le code écrit par l'autre personne. Je copie souvent une implémentation d'algorithme et le modifie selon mes propres besoins. Habituellement, cependant, quand je viens de couper et coller c'est parce que je n'ai pas besoin de tout ce qui était dans l'exemple, donc ajouter un autre fichier serait juste un gaspillage (ou c'est quelque chose dans une fonction). Je suis d’accord avec jzd si vous copiez et collez votre propre code dans le même projet, il ya un problème et vous devriez probablement trouver un moyen économique de le libérer ou de partager la fonction.
la source
Je trouve que les membres de l'équipe "d' intégration " ou ceux qui n'ont pas autant d'expérience en code ou en programmation ont tendance à copier-coller plus souvent et à ne pas comprendre ce qu'ils ont fait (se lancer dans les problèmes mentionnés dans votre question).
Je trouve également que les programmeurs évitent souvent le copier / coller car ils aiment le code et réinventent souvent la roue, simplement parce qu'ils veulent le faire mieux ou en apprendre davantage.
la source