it-swarm.dev

Çoğu programcı kodu kopyalayıp yapıştırıyor mu?

Başka birinin kodunu kesip yapıştırmanın uzun vadede kendiniz yazmasının daha uzun sürdüğünü çok erken öğrendim. Bence gerçekten anlamadıysanız, kes ve yapıştır kodu muhtemelen çözülecek bir kabus olacak sorunlara sahip olacaktır.

Beni yanlış anlamayın, yani diğer insanların kodlarını bulmak ve ondan öğrenmek çok önemlidir, ancak bunu sadece uygulamamıza yapıştırmayız. Bizim app içine yeniden yazmak the kavramlar.

Ama sürekli kesip yapışan insanları duyuyorum ve onlar bu konuda yaygın bir uygulama gibi konuşuyorlar. Ayrıca başkaları tarafından yorumlar görüyorum ki bu yaygın bir uygulamadır.

Pek çok programcı kodu kesip yapıştırıyor mu?

48
John MacIntyre

İki genel durum:

Bir projeden diğerine:

Çoğu programcı bu kapasitede kodu kesip yapıştırır. Önceki bir projeyi veya çevrimiçi bir şeyi bulabilir ve tam olarak kopyalayıp yapıştırabilir veya kopyalayabilir/yapıştırabilir ve üzerinde değişiklikler yapabilirler. Bu uygulamanın genellikle iyi olduğunu düşünüyorum. Bu özellikle kanıtlanmış kod olduğunda iyidir. (Örnekler: Geçmişteki bir projeden iyi çalışan bir tür yardımcı nesne veya muhtemelen birkaç değişiklik gerektiren bir blogdan). Bunun kötü olabileceği yer, anlamadığınız bir kodu kopyalarken veya kodun zayıf olduğu veya yapıştırdığınız koddan çok daha iyi bir alternatif çözümün bulunduğu yerdir.

Aynı projenin içinde: Aynı projeye kopyalama ve yapıştırma genellikle iyi bir fikir değildir. Bu, kopyalanan kodun sadece bir yerde bir yöntemde/sınıfta olması ve tekrar tekrar çağrılması kötü bir koku. Bunun bazı istisnaları vardır, ancak genellikle programcı düşünüyor olmalı: " Kopyaladığım bu kodu parametreleştirebilmemin bir yolu var mı? ".

46
jzd

Çoğu programcı bunu yapar, ancak bu yapmanız gerektiği anlamına gelmez

Programlama mantralarımdan biri: "Kodu kopyalayıp yapıştırıyorsam, yanlış bir şey yapıyorum" . Esasen, KURU .

Kod yeniden kullanımı kodu kod tekrarlayan bir kaynak olarak kullanmak anlamına gelmesi gerektiğini düşünüyorum. Bazen kendi kodumu kopyalayıp yapıştırdım, çoğu durumda kazan plakası kod veya gerçekten benzer görünen şeyler ile bitiriyorum.

Daha sonra bu kodla biraz daha yatırım yaptıktan sonra aşağıdakilerle karşılaşıyorum:

  • A bileşen (ayrıca bkz: endişelerin ayrılması )
  • Gelecekte işleri daha basit, daha temiz ve daha kolay hale getirmek için yansıma 'a başvurabilirim.
  • Daha iyi bir tasarım , çünkü işe yarar olsa bile, dersleri öğrendikten sonra neden tekrar yapmıyorsunuz ?.
  • Soyutlayabildiğim, kütüphane bileşenine dönüştüğüm ve çoğaltılan kodu kaldırabileceğim bir desen .

İstemci/patron umursamadığı (en azından doğrudan ve kısa vadede) kodun kopyalanıp yapıştırılmaması gerekip gerekmediği tartışmalı olabilir ve aynı sonuçlarla sonuçlanabilir, ancak sorun gerçekten geldiğinde ortaya çıkar. hatalara, modülerlik kaybına ve nihayetinde bakım cehennemine yol açar.

Ne yapmalısınız: ASAP refactor

Hiç kimse mükemmel kod yazmıyor, çalışıyor olsa bile, kopyalayıp yapıştırmadığınızda ve kendi kodunuz olsa bile, oldukça memnun değilseniz, hatırlatmak için yorumlara (örneğin bir docblock "@todo") bir not koyun kendiniz neyi yeniden düzenleyeceğinizi ve neden ... kendiniz yeniden düzenlemeseniz bile, mutluluk ve sürdürücü için toplam hayal kırıklığı arasındaki fark olabilir.

Sonunda, kopyalayıp yapıştırsanız bile sonunda iyi kod ile biteceksiniz.

Good Code

üzerinden XKCD

37
dukeofgaming

Sıkıştığım ve sorunumu çözmek için şeyler aradığımda ve istediğimi yapan bazı yararlı kod snippet'lerinde gerçekleştiğimde, doğal olarak kopyalarım. Bazen sadece bunun özü. Sonra benim ihtiyaçlarına paketi değiştirin. Bu, uzman olmadığım şeylere (şu anda Objective-C) baktığımda daha sık oluyor.

Her zaman koddan bir şeyler öğrenmek için zaman ayırıyorum, bu yüzden benim için tekerleği yeniden keşfetmek ve öğrenmek için harika bir yol.

8
Martin Wickman

Burada başkalarının kodlarını kopyalamak/yapıştırmaktan bahsedeceğim. Kendi çalışmalarımın bir kısmını kişisel kütüphanemden almak adil bir oyundur. Onları tanıyorum ve tanım gereği anlıyorum.

Ben "kesme ve yapıştırma" kod en sık nerede belirli bir sorun var ve bunu çözen bir blog yazı içine çalıştırmak olduğunu bulmak. Çoğu zaman çözümü projeme tekrar yazarım (sonuçta, muhtemelen başka bir şey değilse blog yazarının tarzında yazılır). Gerçekten kodum değil, ama bu senaryoda kullanma konusunda kötü hissetmiyorum.

Dışarı çıkmak ve projemi olduğu gibi yapıştırmak için tüm yöntemleri veya sistemleri kapmak ve bunu yapmak olarak adlandırmak, anlamadığım bir şey. Geçen gün --- böyle bir şey yapmayla ilgili sorunu mükemmel şekilde gösteren bir StackOverflow sorus vardı.

Farklı kod parçalarından bir Frankenstein canavarı birlikte takmak o kadar verimli olamaz. Demek istediğim, eğer başarılı olursanız, aynı çözümü tekrar tekrar çoğalttığınız veya aynı insanların kopya/yapıştırma seviyesinin artık gerekli olmaması gerektiği ve uyumsuz kod örnekleri arasındaki sorunları çözmek zorunda kalmadan verimlilik artacaktır.

Şahsen büyük ölçekte kopyalayan/yapıştıran birçok programcı ile tanışmadım. Kendilerini en derin ve en karanlık köşelere kodlayan çok şey gördüm, ama bu farklı bir hikaye. Kişisel bilgilerime dayanarak, çoğu programcının tüm uygulamaları birlikte kopyalayıp yapıştırmadıklarını söyleyebilirim, ancak kesin olarak söylemek gerçekten zor.

6
Adam Lear

Kötü: Aynı kod bloğunu tekrar tekrar kopyalayıp yapıştırma

Kendinizi bunu yaparken bulursanız, kopyalanan koddan neyin soyutlanabileceğini düşünmek ve işlemek için bir işlev/yöntem oluşturmak için muhtemelen bir saniye ayırmalısınız. DRY (Kendinizi Tekrarlama) prensibi önemlidir.

İyi: Çalıştığı bilinen bir kod bloğunu kopyalamak

KURU (Kendinizi Tekrarlama) burada da farklı bir anlamda geçerlidir. IE, geçmişte yaptığınız işleri tekrarlamayın. Kodun bir bölümünü yazmak için zaman ayırdıysanız, hata ayıklayın, test edin ve bir üretim kod tabanında çalıştığı kanıtlanmıştır; tekrar kullanmamak aptal olur.

Çoğu insan kopyalama işine kötü bir rap verir, çünkü birçok acemi programcı zamanlarını internette gezinmek ve gerçekte ne yaptığını anlamadan başkalarının kodunun bir kopyasını yapıştırmak/yapıştırmak için zaman harcar.

Her seferinde her şeyi sıfırdan yazmak daha iyi değil. Birçok eski okul safkan programcısı olduğunu biliyorum, her şeyin sıfırdan yazılması gerekiyor ve umarım onlarla çalışmaya sıkışmam. 5 yıllık programlama deneyiminiz varsa, yeniden kullanım için en önemli kod kütüphanesine sahip olmalısınız. Deneyimli bir programcının masaya getirebileceği en iyi varlıklardan biridir çünkü potansiyel olarak çok fazla geliştirme süresi kazandıracaktır.

Eski kodunuzu ilk önce anlamazsanız, yorumları okumak ve kendinizi yeniden tanımak için bir dakikanızı ayırın. Yorumlarınız emilirse ... iyi, bu tamamen başka bir sorun.

4
Evan Plaice

25 yıl kod yazdıktan sonra, (önceki bir işveren için yazdığım koda erişim olmadan) kesip yapıştırabilmeyi dilediğim zamanlar oldu. Ancak bu çok nadir olmuştur (ve okumaya devam ediniz).

Belki de en iyi örnek, yıllar önce unix işletim sistemleri için geldiğim gerçekten basit bir komut satırı ayrıştırıcısıdır. Basit bir döngü argümanları sıkıştırma ve seçenekleri işleme. Oldukça basit ve zarifti ve o zamandan beri birçok kez (gerçek bir kesip yapıştırmadan ziyade bir desen olarak) kullandım. Bu kuraldan çok istisnadır.

Genellikle düz bir ole kes ve yapıştır tamamen uygunsuzdur - önemli olan kavram veya algoritmayı daha kesip yapıştır.

Çok gururlu değilim - Gerçekten hızlı bir parite veya hamming kodu doğrulama algoritması veya bunun gibi egzotik bir şey bulmak için mutlu bir şekilde arayacağım. Sonra birkaç saat geçirdim, gerçekten peşimde olduğum muazzam süper hızlı şey mi, yoksa saf bir çöp yığını mı olduğunu anlamak için.

Herkes anlamak için duraklamadan sadece kodu kopyalamak her zaman endişe ediyorum. Ya bir dahi (onu ve tüm inceliklerini bir bakışta anlayın) ya da bir aptaldır. Arada bir şey için fazla yer yok. Oh, ve pek çok gerçek deha yok.

Anlamadan, gerçekten mutlu değil, aynı zamanda mutsuz koşullar veya girdi koşulları altında GERÇEKTEN ne yaptığınızı gerçekten bilmiyorsunuz. Bazen bu şanslı olduğunuz için önemli değil. Ve bazen bu çok uzun süreli ağrıya neden olur.

3
quickly_now

Üretken olmak için temelde yapmanız GEREKEN ortak bir durum vardır.

Başlangıçta çalışan bir örneğiniz olmadığı sürece, size yabancı olan herhangi bir teknolojiyi öğrenmek zordur. Bu nedenle, aslında çalışan bir şeye sahip olmak için kopyalayıp yapıştırın ve ardından onunla uğraşmaya başlayın.

3
user1249

Yeni bir programcı olarak (ilk işime 4 ay), oldukça fazla yardıma güveniyorum (SO veya başka yerlerde) olsun. Başkalarının kodunu körü körüne kopyalama ve yapıştırma DEĞİL Sağlanan kod kullanacağım olsa bile, bunu programıma yazacağım ve sonra ne yaptığını ve nedenlerini tamamen anladığımdan emin olmak için biraz zaman harcayacağım.

Kesim ve yapıştırma konusunda uzman değil, sürekli öğrendiğimden emin olmak istiyorum

3
Darren Young

Bu konuyla ilgili çok fazla hisim var ve dürüstçe bunların hiçbirinin tamamen nesnel olduğunu söyleyemem.

Başkalarının kodunu kesmek ve uygulamanıza yapıştırmak için birçok argüman vardır. Bazıları mantıklı olabilir, bazıları olmayabilir. Örneğin, birinin blogundan bir girdi alan ve matematiksel yeteneklerinizin dışında olan ve bir sonuç veren - karmaşık bir matematiksel algoritma çalıştıran bir yönteminiz varsa - bu kesme ve yapıştırma için bir argüman - yazarın kodlayın ve gerekli durumlarda kredi verin - bu onurlu bir şey.

Tekerleği yeniden icat etmemeye yönelik argümanlar var - yine, bu teoride mantıklı. Ancak, kesip yapıştırdığınız kodu yakından tanımak için zaman ayırmazsanız, bu sorunu çözmenin daha iyi bir yolu olup olmadığını bilmiyorsanız, kodda hata olup olmadığını bilmiyorsunuz . Yapıştırdığınız tekerlek kırılırsa ne olur?

Hız ve verimlilik için argümanlar var - diğer insanların kodlarını söktüğünüz, çaldığınız, intihal ettiğiniz veya başka türlü düşündüğünüz bir kütüphaneyi oluşturuyorsunuz. geri kazanılmış parçalardan birlikte.

Bu davranışı tamamen kabul edilebilir bulduğum zamanlar ve yerler var. Uzun ömürlülük için tasarlanmamış, ancak şimdi kanca veya dolandırıcı ile bir görev yapmak için hızlı atma araçlarını bir araya getirmek için. Sonuçların prototipini oluşturmak ve incelemek, teorik bir bağlamda öğrenmek ve ilerlemek için bunun tamamen adil bir oyun olduğunu düşünüyorum.

Diğer insanların kodlarını kesmek ve yapıştırmak intihal - eğer onların nimetine sahipseniz ve yapıştırdığınız kodu anlarsanız ve uygulamanız için kodlama standartlarının yapısına uyuyorsa, o zaman, adil bir oyun olduğunu kabul edeceğim.

Profesyonel bir yazılım mühendisi olarak, bir standart ve bir Etik Kurallarını korumam için bana ödeme yapılıyor. Müvekkilimin yargılanma riskini doğurarak başkalarının telif hakkını çalması, intihal etmesi veya ihlal etmesi için bana para ödenmiyor. Bunun yanı sıra, söz konusu kesilmiş/yapıştırılmış kodu çalıştırdığınızda felaketli yan etkileri olması çok gerçek bir risktir.

Bu cevabı size hedeflemiyorum John, bunun gibi konular söz konusu olduğunda etik açıdan çok eğimli olduğunuzu biliyorum, bu yüzden bu gerçekten sorunun kendisinin yönündedir.

Zeyilname: Bu, kendi kodunuzu projeler arasında kesmenin ve yapıştırmanın oldukça kabul edilebilir olduğunu hissediyorum - başka biri için işe alınma olarak yazılmadığı sürece, bu durumda telif hakkı ve kod yazdığınız kişinin iznini almalısınız. Kod, işlevsel kavramlar ile ilgili olmadığı sürece, çoğu işveren, diğer müşteriler için kendi fikirlerinizi yeniden kullanarak sizin için iyi olduğunu buldum.

1
BenAlabaster

Bir açık kaynak havuzunda tüm yöntemlerin% 15'i bir projeden diğerine kopyalanır (pdf), cevap açık bir evet gibi görünüyor.

1
nes1983

Çoğu durumda, nette bulacağınız kod kesin amaçlarınıza uymaz.

Kendimi çok yapan şey, kodları birinden kopyalamak, özüne sıyırmak ve daha sonra gereksinimlerimi karşılayana kadar kod eklemektir. Adlandırma kurallarımıza ve kodlama stilime uyması için her zaman yeniden düzenleyeceğim.

Bir öğretici okuduğumda kişisel olarak nefret ediyorum ve karmaşık bir durum için kod göstererek başlıyorlar. Özü ile başlayın ve kodu genişletmek için yapı taşlarını gösterin. Kendi blogumu başlatırsam, insanlara ne yapmak istediğimin özünü, işlevsellik/özel durumlar nasıl ekleyebileceğinizi ve temel özelliklerin tam olarak çalışan bir örneğini gösteren yorumlanmış bir kod örneği sunacağım.

0
J. Maes

Kod iyiyse, kopyala yapıştır yerine ortak bir kütüphaneye yapılmalıdır. Ancak insanlar yeniden düzenleme ile uğraşamazlar ve kopyalama ve yöntemle yayılmış aynı işlevselliğe sahip olmayı tercih ederler.

Evrensel bir mutlak kopyalama ve yapıştırma yasasına sahip olmak yerine iyi ya da kötü, ne zaman kullanılacağını görmek gerekir.

Kopyalama ve yapıştırma için artıları şunlardır: Hızlı gitmenizi sağlar Eksileri: Aynı kod birden fazla yere yayılır ve bulunan/çözülen herhangi bir sorunun her yerde çözülmesi gerekir, kopyalamak ve yapıştırmak yerine ortak bir kütüphane olarak kullanılmışsa güncelleme her yerde yayılır. Her yerde aynı kodu yaymak yerine kütüphane kullanmak için küçük bir başlangıç ​​yatırımı için.

Seçim, başlangıçta çok daha sonra biraz zamandan tasarruf edip etmemeniz, daha sonra kopyalayıp yapıştırmanın gidilecek yoldur, aksi takdirde yeniden saklayın ve ortak bir kütüphaneye koyun.

0
Arjang