it-swarm-eu.dev

Kopíruje a vkládá většina programátorů kód?

Dozvěděl jsem se velmi brzy o tom, že řezání a vkládání kódu někoho jiného trvá z dlouhodobého hlediska déle, než když si jej píšete sami. Podle mého názoru, pokud tomu opravdu nerozumíte, bude mít kód vyjmutí a vložení pravděpodobně problémy, které bude noční můrou vyřešit.

Nechápejte mě špatně, myslím tím, že najít jiné národy a učit se z nich je zásadní, ale my je prostě nevkládáme do naší aplikace. My přepíšeme koncepty do naší aplikace.

Ale neustále slyším o lidech, kteří řezají a vkládají, a mluví o tom jako o běžné praxi. Vidím také komentáře ostatních , které naznačují, že je to běžná praxe.

Takže, většina programátorů vyjme a vloží kód?

48
John MacIntyre

Dva obecné případy:

Z jednoho projektu do druhého:

Většina programátorů v této kapacitě vyjme a vloží kód. Mohou najít předchozí projekt nebo něco online a zkopírovat/vložit jej přesně nebo zkopírovat/vložit a provést změny. Myslím, že tato praxe je obvykle v pořádku. To je zvláště dobré, když se jedná o ověřený kód. (Příklady: Nějaký druh obslužného objektu z minulého projektu, který fungoval dobře, nebo možná z blogu s několika potřebnými změnami). Kde to může být špatné, je to, když kopírujete kód, kterému nerozumíte, nebo kde je kód špatný, nebo kde je mnohem lepší alternativní řešení než kód, který vkládáte.

vnitř stejného projektu: Kopírování a vkládání do stejného projektu obvykle není dobrý nápad. To je špatný zápach, že kopírovaný kód by měl být někde v metodě/třídě a opakovaně by se měl volat. Existují některé výjimky z toho, ale obecně by si měl programátor myslet: „ Existuje způsob, jak mohu parametrizovat tento kód, který kopíruji? “.

46
jzd

Většina programátorů to dělá, ale to neznamená, že byste měli

Jedním z mých programovacích manter je: "Pokud kopíruji a vkládám kód, dělám něco špatného" . V zásadě [~ # ~] suché [~ # ~] .

Myslím, že by mělo být zřejmé, že opakované použití kódu znamená použití kódu jako zdroje, nikoli opakování kódu. Někdy jsem zkopíroval a vložil svůj vlastní kód, ve většině případů končím kódem kotlové desky nebo takovými věcmi, které vypadají opravdu podobně.

Poté, co jsem do tohoto kódu investoval více času, skončil jsem s následujícím:

  • A component (see also: separation of concerns )
  • Mohu se uchýlit k reflexi, aby se věci zjednodušily, čistily a v budoucnu se snadněji opakovaly.
  • Lepší design , protože i když to funguje, proč to neudělat znovu poté, co jste se poučili?.
  • Vzorec , který mohu abstraktní, proměnit v komponentu knihovny a odstranit duplicitní kód.

Může být diskutabilní, zda bychom měli nebo neměli kopírovat a vkládat kód, protože klient/šéf to nezajímá (alespoň přímo a v krátkodobém horizontu) a můžete skončit se stejnými výsledky, ale problém skutečně nastane, když vede k chybám, ztrátě modularity a nakonec k peklu údržby.

Co byste měli udělat: refaktor ASAP

Nikdo nenapisuje dokonalý kód, i když to funguje, i když nekopírujete a nevkládáte a je to váš vlastní kód, pokud s ním nejste zcela spokojeni, vložte do komentářů poznámku (např. Docblock "@todo") sami sebe, co má refactor a proč ... i když to nerespektujete sami, může to být pro udržovatele rozdíl mezi štěstím a úplnou frustrací.

Nakonec nakonec skončíte dobrým kódem , i když zkopírujete a vložíte.

Good Code

via [~ # ~] xkcd [~ # ~]

37
dukeofgaming

Když jsem uvízl a hledal věci, které vyřešily můj problém a objevil se nějaký užitečný úryvek kódu, který dělá to, co chci, přirozeně ho zkopíruji. Někdy je to jen její podstata. Pak to změníme tak, aby vyhovovalo mým potřebám. To se stává častěji, když se ponořím do věcí, ve kterých nejsem odborník (v současnosti Objective-C).

Vždycky si udělám čas, abych se něco naučil z kódu, takže pro mě je to skvělý způsob, jak se učit a vyhnout se znovuobjevení kola.

8
Martin Wickman

Budu mluvit o kopírování/vkládání kódu jiných lidí zde. Chytit části mé vlastní práce z mé osobní knihovny je férová hra. Znám je a chápu je podle definice.

Zjistil jsem, že nejčastější situací, kdy kód „vyjímám a vložím“, je situace, kdy mám konkrétní problém, a narazím na blogový příspěvek, který jej řeší. Nejčastěji přepisuji řešení do mého projektu (konec konců je to pravděpodobně napsáno ve stylu autora blogu, pokud nic jiného). Není to opravdu můj kód, ale necítím se špatně z jeho použití v tomto scénáři.

Jít ven a popadnout celé metody nebo systémy a vložit je do mého projektu tak, jak je, a nazvat to hotovým, je něco, čemu nerozumím. Druhý den byla otázka na StackOverflow , která dokonale ilustrovala problém s tím, že něco takového uděláte.

Dláždění Frankensteinovy ​​monstrum z různých částí kódu prostě nemůže být tak efektivní. Myslím, že pokud se vám to dobře povede, znamená to, že replikujete stejné řešení znovu a znovu, nebo jste získali dostatečné porozumění kódu jiných lidí, že by již neměla být nutná stejná úroveň kopírování/vkládání a že produktivita by se zlepšila tím, že by nemusely řešit problémy mezi nekompatibilními vzorky kódu.

Osobně jsem se nesetkal s mnoha programátory, kteří kopírují/vkládají ve velkém měřítku. Viděl jsem spoustu lidí, kteří se kódují do nejhlubších a nejtemnějších koutů, ale to je jiný příběh. Na základě mých osobních anekdat bych řekl, že většina programátorů nekopíruje/nevkládá celé aplikace dohromady, ale je opravdu těžké to s jistotou říci.

6
Adam Lear

Špatné: Kopírování a vkládání stejného bloku kódu znovu a znov

Pokud zjistíte, že to děláte, měli byste asi chvilku přemýšlet o tom, co může být z kopírovaného kódu odebráno, a vytvořit funkci/metodu, která to zvládne. Zde se počítá princip DRY (Don't Repeat Yourself)).

Dobrý: Kopírování bloku kódu, o kterém je známo, že funguje

DRY (Don't Repeat Yourself) také platí zde, jen v jiném smyslu. IE, neopakujte práci, kterou jste již provedli v minulosti. Pokud jste si vzali čas na psaní části kódu, ladění, testování a je prokázáno, že pracuje v produkční kódové základně; bylo by hloupé, kdybyste to znovu nepoužívali.

Většina lidí dává kopírování-vkládání špatné rap, protože mnoho začátečníků programátoři tráví svůj čas praní sítě a kopírování/vkládání mishmash kódu jiných lidí, aniž by pochopili, co to vlastně dělá.

Psaní všeho od začátku není o nic lepší. Vím, že existuje spousta starých školních puristických programátorů, že všechno by mělo být napsáno od nuly a doufám, že s nimi nebudu pracovat. Máte-li pětileté zkušenosti s programováním, měli byste mít poměrně rozsáhlou knihovnu kódů, která je vhodná pro opakované použití. Je to jedna z nejlepších aktiv, které může zkušený programátor přinést ke stolu, protože to potenciálně ušetří spoustu času na vývoj.

Pokud nejprve nerozumíte starému kódu, přečtěte si komentáře a znovu se seznamte. Pokud vaše komentáře sají ... no, to je další problém.

4
Evan Plaice

Po 25 letech psaní kódu byly chvíle, kdy (bez přístupu ke kódu, který jsem napsal pro předchozího zaměstnavatele) jsem si přál, abych mohl vyjmout a vložit. JAK to však bylo velmi vzácné (a čtěte dál).

Snad nejlepším příkladem je opravdu jednoduchý analyzátor příkazového řádku, se kterým jsem se setkal před lety pro unixové operační systémy. Jednoduchá smyčka zipování přes args a zpracování možností. Bylo to podivně jednoduché a elegantní a od té doby jsem to používal (spíše jako vzor, ​​než jako doslovný výřez a vložení). Toto je spíše výjimka než pravidlo.

Obvykle je prostý olejový řez a pasta zcela nevhodný - jeho další řez a vložení koncepce nebo algoritmu, který byl důležitý.

Nejsem moc hrdý - ráda prohledám okolí a najdu opravdu rychlý algoritmus pro ověření parity nebo Hammingova kódu nebo něco takového exotického. Pak strávte pár hodin porozuměním tomu, abyste zjistili, zda je to opravdu nesmírně rychlá věc, po které jsem byl, nebo naivní hromada haraburdí.

Bojím se pokaždé, když někdo pouze zkopíruje kód, aniž by se zastavil, aby mu porozuměl. Jsou to buď génius (pochopte to a na první pohled všechny jeho jemnosti), nebo hlupák. Mezi tím není moc místa pro nic. Jo, a není mnoho skutečných géniusů.

Bez pochopení opravdu nemáte ponětí, co jste právě vrhli do SKUTEČNOSTI, a to nejen za šťastné, ale také za nešťastné okolnosti nebo vstupní podmínky. Někdy to nevadí, protože budete mít štěstí. A někdy to způsobuje mnohem dlouhodobější bolest.

3
quickly_now

Existuje běžná situace, kdy v zásadě POTŘEBUJETE, aby to bylo produktivní.

Jakákoli technologie, která vám není známa, se těžko učí, pokud nemáte na začátku pracovní příklad. Proto to zkopírujete a vložíte, abyste měli něco, co ve skutečnosti běží, a pak s tím začnete hrát.

3
user1249

Jako nový programátor (4 měsíce po mém prvním zaměstnání) se spoléhám na pomoc docela hodně (ať už z SO nebo jiných míst). Chtěl bych poukázat na to, že NENÍ slepě kopírování a vkládání jiných kódů. I přesto, že poskytnutý kód je to, co budu používat, napíšu ho do svého programu a poté strávím trochu času, abych se ujistil, že úplně rozumím tomu, co dělá, a důvodům pro to.

Chci se ujistit, že se neustále učím a ne jen odborník na řezání a vkládání

3
Darren Young

O tomto tématu mám tolik pocitů a nemohu upřímně říci, že žádný z nich je zcela objektivní.

Existuje mnoho argumentů pro vyříznutí a vložení kódu jiných lidí do vaší aplikace. Někteří z nich mohou dávat smysl, jiné ne. Například, pokud máte metodu z někoho blogu, která bere vstup a provozuje nějaký komplikovaný matematický algoritmus, který je mimo vaše matematické schopnosti a vyplivne výsledek - to je argument pro řezání a vkládání - získejte autorovo povolení k použití jejich kódovat a připisovat jim, kde je to vhodné - je to čestné.

Existují argumenty pro to, aby se kolo neobnovilo - opět to má smysl, teoreticky. Ale pokud nechcete věnovat čas tomu, abyste se důkladně seznámili s kódem, který vyřezáváte a vkládáte, nevíte, jestli existuje lepší způsob řešení tohoto problému, nevíte, zda jsou v kódu chyby. . Co když je kolo, které vkládáte, rozbité?

Existují argumenty pro rychlost a efektivitu - vybudujete knihovnu kódu jiných lidí, kterou jste vytrhli, ukradli, plagiovali nebo jinak, pomysli na to, možná ani nebudete muset vědět, jak programovat mimo Frankensteiningovou aplikaci společně z regenerovaných částí.

Jsou chvíle a místa, kde považuji toto chování za naprosto přijatelné. Pro vzájemné hackování rychle vyhození nástrojů, které nejsou navrženy pro dlouhověkost, ale pro splnění úkolu, právě teď háčkem nebo podvodníkem. Za účelem vytváření prototypů a studia koncentrací, abych se učil a postupoval v teoretickém kontextu, si myslím, že je to úplně férová hra.

Řezání a vkládání kódu jiných lidí je plagiátorství - pokud máte jejich požehnání a rozumíte kódu, který vkládáte, a hodí se do konstrukce kódovacích standardů pro vaši aplikaci, pak je v pořádku, připustím, že je to férová hra.

Jako profesionální softwarový inženýr dostávám zaplaceno za udržování standardu a etického kodexu. Nedoplatím se, abych ukradl, plagoval nebo porušil autorská práva jiných lidí, což vystavuje mého klienta riziku stíhání. Kromě toho existuje velmi reálné riziko, že při spuštění řečeného řezaného/vloženého kódu bude mít katastrofické vedlejší účinky.

Necítím na tuto odpověď na tebe, Johne, vím, že jsi velmi eticky nakloněn, pokud jde o témata jako je tato, takže je to opravdu jen obyčejný výkřik ve směru samotné otázky.

Dodatek: To znamená, že mám pocit, že vyjmutí a vložení vlastního kódu mezi projekty je docela přijatelné - pokud to nebylo napsáno jako práce na pronájem pro někoho jiného, ​​v tom případě nevlastníte autorská práva a měli byste získat povolení osoby, pro kterou jste kódovali. Zjistil jsem, že pokud se kód netýká proprietárních funkčních konceptů, většina zaměstnavatelů je v pořádku, když znovu používáte své vlastní nápady pro ostatní klienty.

1
BenAlabaster

Vzhledem k tomu, že v jednom úložišti s otevřeným zdrojovým kódem 15% všech metod je zkopírováno z jednoho projektu do druhého (pdf), odpověď se zdá být jasná ano.

1
nes1983

Ve většině případů kód, který najdete na internetu, nebude odpovídat vašim přesným účelům.

To, co vidím, dělám hodně, je kopírování kódu od někoho, svlékání do samotné podstaty a přidávání kódu, dokud nesplní mé požadavky. Vždy to upravím tak, aby odpovídalo mým pojmenovacím konvencím a stylům kódování.

Osobně to nenávidím, když jsem si přečetl návod a začnou tím, že ukazují kód pro komplikovaný případ. Začněte s podstatou a ukázejte stavební bloky pro rozšíření kódu. Pokud někdy začnu s vlastním blogem, poskytnu lidem příklad s komentovaným kódem, který ukazuje podstatu toho, co chci dělat, jak můžete přidat funkčnost/zvláštní případy a plně funkční příklad základní funkce.

0
J. Maes

Pokud je kód dobrý, místo kopírování a vložení by měl být vytvořen do společné knihovny. Lidé se však s refaktoringem neobtěžují a dávají přednost tomu, aby byla stejná funkčnost rozšířena kopií a metodou.

Místo toho, aby existoval univerzální absolutní zákon kopírování a vkládání, je dobrý nebo špatný, měl by člověk zjistit, kdy je použít.

Výhody pro kopírování a vkládání jsou: Získáte rychlý chod Nevýhody jsou: Stejný kód se šíří na více místech a jakýkoli nalezený/vyřešený problém je třeba vyřešit všude, pokud ho místo kopírování a vložení použil jako běžná knihovna, pak aktualizace propagovat všude. Pro malou počáteční investici do používání knihovny namísto šíření stejného kódu všude na potrubí.

Volba je, zda ušetřit trochu času zpočátku ve srovnání s mnohem později, pak kopírování a vkládání je způsob, jak jít, jinak refactore a dát to do společné knihovny.

0
Arjang