Kitaplıkları ve kod parçacıklarını çok fazla kullanmamanın somut nedenleri var mı? [kapalı]


42

Genel olarak yaklaşık 8 yıldır programlama yapıyorum ve bana "işi bitirmek" için açık kaynaklı kütüphanelere ve snippet'lere (kahretsin GitHub!) Daha fazla güveniyorum. Zamanla bana kendi uygulamalarını yazabileceğimi biliyorum ama genel tasarıma odaklanmayı seviyorum.

Bu normal mi (şirket dışı ortam)? "Programlamam" farklı kütüphaneleri birbirine yapıştırmaktan başka bir şey yapmazsa ne yanlış olabilir?

"Tekerleği yeniden icat etme" yi biliyorum ama artık tek bir tekerleği icat etmediğinizde ne olacak?


3
" Kurumsal olmayan çevre" veya insanların işbirliği yapmadığı bir ortam mı demek istediniz ?
Bryan Oakley

Arayüzler ve soyut sınıflara yazmamızın sebebinin kütüphanelerimizin daha evrensel, daha az bağımlı, daha esnek olması
gerektiğini düşündüm

1
O kadar kötü, aslında, Babanın kemeri çıkıyor.
Thomas Eding

Sadece saygı göstermeyi ve kredinin geldiği yerde kredi vermeyi unutmayın. Eğer bu kodu kendinizinki gibi iddia ettiyseniz, o zaman The Belt kesinlikle
hanzolo

3
Hayır, sizi kötü programcı yapmaz, ama sizi daha iyi bir programcı yapmaz.

Yanıtlar:


85

Tekerleği yeniden icat etmek yerine kütüphaneleri kullanmak: Harika! Herkes böyle yapmalı. Yaptığın şeyi yapmak için para almazsın.

Pasajları kullanma: Ne kopyaladığınızı anladığınız sürece ve hepsini tutarlı kılmak için zaman harcadığınız sürece (farklı stil ve yaklaşımların bir patchwork yerine), yanlış bir şey yoktur.


Bende böyle düşünmüştüm. Belki bu duygudan kurtulmak için açık kaynak kodlu bir projeye başlamalıyım :)
Henrik P. Hessel

25
Benden +1. İnsanlar asla anlamadıkları bir kod kullanmamalıdır. Parçacıklar ve kütüphaneler için de geçerli.
Tim Post

5
Parçacıklar kadarıyla, kodun her zaman kendimi yeniden yazarım, böylece nasıl çalıştığını bildiğimden emin olurum. Kütüphaneler, herhangi bir nedenden dolayı benim için işe yaramadığı sürece asla tekrar yazmam.
Rei Miyasaka

12
Tim: Kütüphanelere gelince, ne yaptığını bildiğim sürece, bir şeyi nasıl yaptığını anlamam gerekmiyor . Örneğin, çoğumuz kripto kütüphanelerini kullanıyoruz; AES'in nasıl çalıştığını bilmiyorum, ama ne yaptığını ve ne zaman kullanacağımı biliyorum.
user281377

@Rei Miyasaka Snippet'ler genellikle bağımsız bir kütüphaneden daha az kalitede görünüyor. Ben, kendim, kullandığım snippet'lerin bir kısmını yeniden canlandırmalıyım.
Henrik P. Hessel

24

iyi programcılar iyi kod yazarlar; Büyük programcılar büyük kod çalıyor.


Satır için +1. Orijinal mi?
apoorv020

Keşke, hayır, garip bir atasözü.
dan_waterworth

İPhone'dayım ama bence Pablo Picasso'dan bir alıntı (programcıları sanatçılar ile değiştirir)
Henrik P. Hessel

21
Picasso dedi Good artists copy, Great artists steal.
dan_waterworth

3
Harika bir teklif. Sanırım çalacağım ^ H ^ H ^ H ^ H ^ H yeniden kullan.
Wonko Sane

24

Kodlama aslında en düşük programlama seviyesidir. Yapabildiğiniz soyutlama düzeyi ne kadar yüksek olursa, o kadar iyi programcı olursunuz. Doğru kütüphaneleri seçmek (mutlaka açık kaynak kodlu olmayanları seçmek), onları doğru bir şekilde birleştirmek ve yapıyı korumak, her şeyi kendiniz yazmaktan daha zor, daha verimli ve zaman ve maliyet tasarrufu sağlar.


13

Kendi kütüphanelerimi yazmayı seviyorum. Ayrıca projelerimi zamanında bitirmeyi de seviyorum. Bence zamanla, çoğu iyi programcı faydalı ve yeniden kullanılabilir parçalar topluluğu oluşturuyor. Seni bilmiyorum ama beş yıl önce yazdığım bir kütüphaneyi her kullandığımda harika bir his duyuyorum.

Orada hiçbir şey test edilmiş ve zamanla sevilen olmuştur kütüphane kodunu kullanarak yanlış. Nasıl çalıştığını biliyorsunuz, karmaşıklığına güvenebilir ve hızlı bir şekilde uygulayabilirsiniz.

Olduğu söyleniyor, kütüphanedeki kodu anladığını varsayıyorum. Yeterli zaman verilirse, benzer kalitede bir şey uygulayabileceğinizi farz ediyorum.

Ben gerçekten iyi C programcısı biliyor olabilir standart C kütüphanesi uygulamak, egzersiz keskinleştirme bir öğrenme / olarak basitçe olduğunu birkaç tanesi. Hobilerim sırasında yaşadığım en eğlencelilerden bazıları HelenOS'taki C kütüphanesinde çalışıyordu.

Yani, merak etmeye ve öğrenmeye devam ettiğiniz sürece kütüphane kodunu kullanmanın yanlış bir tarafı yoktur. Bu gerektiğini söylemeye gerek yok değil bunun kullanımınız nasıl çalıştığını anlamak için bir çaba sürece, anlamıyorum kodu kullanın.


JQuery'e karşı olan isteksizliğimi +1 olarak tanımladın.
aaaaaaaaaaaa

5

Bu sorudaki diğerlerinden daha iyi gideceğim: Bir kütüphanenin "müşterisi" geliştiricisinin o kütüphanedeki kodu "anlaması" gerektiğini bile sanmıyorum.

Ben (bazıları ile karşılaştırıldığında) nispeten yeni bir iPhone geliştiricisiyim. Her gün kendi başıma üretemeyeceğim ve kodları başımın üzerinden geçen, kullandığım çok sayıda Kütüphane var. SUNULAN en ufak bir önemi yok:

1) Bu kütüphanelerin ara yüzünü tamamen anlıyorum (ASIHTTPRequest ninja!)
2) Genel olarak geniş kullanımlı kütüphaneler seçiyorum , bu yüzden iyi gittiğinden ve problemler için araştırıldıklarından emin olabilirim (örn: ASIHTTP, Stig Brautaset JSON kütüphanesi, Facebook'un obj-c kütüphanesi, vs.)
3) 2. başarısız, ben bu kadar basit yeter olabilir / düzeltme / özelleştir şey üzerinden yoluma almak ve bulmak ihtiyaçları / sabitleme / özelleştirmeye bulma o .

Bu # 2 bunun çekişmeli bir parçası olacak, bahse girerim. Gerçek şu ki, açık kaynak topluluğuna, kesinlikle benden daha deneyimli ve oldukça zeki bir geliştirici topluluğuna güveniyorum. Ancak bu, açık kaynağın tüm meselesi. Al işte ozaman, buyur.


3

Kütüphaneleri kullanmak için bir uyarı vermek istiyorum. Perl a R'da (ve bazılarında Java'da) sıkça rastlanan bir bilimsel kitaplık kullanıcısı olarak, aşırı genel masraflardan kaçınmak için sık sık bir kütüphaneye girmek zorunda kaldım. Kütüphaneleri kullanmak harikadır, fakat gittikçe daha fazla sayıda kütüphane oldukça yaygın bir iş yapmak için standart kütüphaneyi kullanan üçüncü bir kütüphaneyi çağıran diğer kütüphanelere bağımlıdır. Ve işlemdeki her adımda bazı girdi ve çıktı kontrolleri gerekir. Oldukça fazla olan bu çekler tamamen gereksizdir, ancak yine de uygulamayı tartıyorlar. Ve bir döngü içinde kullanıldığında, o zaman oldukça ağır tartmaya başlayabilir.

Bunun yanında, kitaplıkların her zaman uyumluluğunu koruduğundan veya hata içermediğinden emin olamazsınız. Aslında, tüm kütüphaneler birkaç hata içerir, kodun niteliği budur. Bu nedenle, kütüphanelere ne kadar bağımlı olursanız, kodunuzda o kadar fazla potansiyel hata girersiniz. Ve bu böcekleri, kütüphanelere tekrar girmeden kolayca çözemezsiniz.

Ama kütüphaneleri kullanılarak, çok akıllı bir karar olduğunu ancak ve ancak sen kütüphaneler ve davranışlarını oldukça iyi biliyoruz.

Biliyorum, düşünmek acı veriyor ve bilgisayarlar ucuz, ama yine de. Düşünmemek daha fazla acı verebilir.


3

Genellikle, büyük miktarda kaynak kodun kopyalanması pratikte bir uygulama değildir. Kod, şirketinizde başka bir uygulama için geliştirildiyse, her iki uygulama tarafından kullanılmak üzere kodu bir kütüphaneye ayıklayarak yeniden kullanmanız gerekir . Kodu kopyalamamalısın. Kodun kopyalanması, sizi ortak bir kopya yerine iki kopya tutmaya zorlar.


3

Kodun tekrar kullanımı çok iyi bir fikir. Artıklığı azaltır ve sürdürülebilirliği arttırır.

Başlık, kodu bir kütüphane olarak kullanmanızı önerir, ancak sorunuzun metni kaynak kodu yeni bir projeye kopyaladığınız anlamına gelir. Diğer geliştiricilerin kodunu mümkün olduğu kadar kütüphane olarak kullanmaya devam ederdim.

Kod bozuksa veya bir şekilde bozuksa veya uygulamanıza çok iyi uymayan bir modele bağlıysa bir sorun vardır. Bu durumda , kodun bir kısmını veya tamamını not etmek ve sıfırdan başlamak, neden belirli bir şekilde yazıldığını anlamaya çalışmaktan daha basit olabilir . Yine de referans için diğer kodu etrafta tutun; nasıl çözüleceğinden emin olmadığınız bir sorunla karşılaşabilirsiniz. Muhtemelen diğer geliştiricilerin de aynı sorunla karşı karşıya kaldıklarını ve bunun nasıl çözüldüğünü görmeye değeceğini düşünüyorum.


Beni yakaladın. Ayrıca, benim durumumda yasal olduğu için başkalarının eserlerinin (satırları değil) birçok kod satırını kopyalamayı da kastediyorum. Ne düşünüyorsun?
Arman

1
@Arman Hala iyi bir fikir. Bakım açısından bakıldığında, bu kadar iyi değil çünkü orijinal geliştirici kodunda bir hatayı düzelttiğinde, hala sizinkilerde. Yine de hiç yoktan iyidir çünkü en azından kod her iki projede de oldukça benzerdir ve hata düzeltmeyi, çok fazla yapmak zorunda kalmadan ayrı ayrı uygulayabilirsiniz.
pswg

: Son bir soru: Mason'un söylediği gibi, örneğin 2500 kod satırının (yine de kütüphaneleri vurgulayamadığımı) sizin çalışmamı başlatmak için biraz yararlı olduğunu keşfettiyseniz, kopyalamama izin verin, sence benim için iyi mi? Etik mi?
Arman

@Arman Yasalsa, muhtemelen de etiktir. Aynı kuruluş altındaki bir geliştirici tarafından yazılmışsa, genellikle kuruluşun koduna sahiptir ve kullanma hakkınız vardır (kuruluş kurallarına uygun olarak). Farklı bir kuruluş altında yazılmışsa, o kuruluştan izin almanız gerekir. Genel olarak, kod herhangi bir lisans kapsamında değilse, orijinal geliştirici onu nasıl kullandığınızla ilgilenmez, ancak orijinal geliştiriciyi her zaman belirgin kod yorumlarına (mümkünse bir bağlantı ile) yükleyeceğim.
pswg

4
İdeal olarak, kopyalanan kodun nasıl çalıştığını da anlamalısınız .
Mike Partridge

1

Bu genellikle iyi bir fikirdir, bu yüzden uzun zamandır yasal bir sorun yoktur.

Ancak, kütüphanenin ne yaptığını ve nasıl yaptığını anlamak için zaman ayırdığınızdan emin olun. Anlamadığınız şeylerle ilgilenmek için bir "sihir" kütüphanesi kullanmak, bir kısmının sizi havaya uçurması için iyi bir yoldur, çünkü yanlış kullandınız ve sonra onu nasıl düzelteceğinize dair hiçbir fikriniz yok.


1
Cömert dost programcım tarafından yapılan yüzlerce kod satırını "kopyalayıp yapıştırarak" hala etik olup olmadığını merak ediyorum.
Arman

2
@Arman: Ona sormayı dene.
Mason Wheeler

1
Lisans izin veriyorsa, neden etik olmasın? Bir işi halletmeye çalışıyorsanız ve bir tekerlek zaten keşfedilmiş ve size ücretsiz olarak sunuluyorsa, yeniden icat ettiğiniz zamanın bir dakikasını boşa harcamanız yanlış olacaktır (yani etik dışı). Bir tekerleği yeniden icat etmeyi öğrenmeniz gerekirse, bu tamamen farklıdır.
Darius X.

1

Yasal olarak yeniden kullanım kodunun neredeyse hiçbir dezavantajı ve iki büyük tarafı yok:

  1. İşi halleder. Mesleki gelişim için daha önemli olan budur. Sonuçta, iyi para ödeyen bir işin var çünkü programcı olmayanların çoğunu zorlayacak şeylerin nasıl yapıldığını biliyorsun; Yeniden kullanma, bu hedefe daha hızlı ulaşmanıza olanak sağlar, böylece işinizde daha değerli olursunuz.
  2. Bir şeyler öğrenirsin. Bu, kendini geliştirmenin en önemli nedenidir. Kodlamayı geliştirmenin başkaları tarafından yazılmış iyi kodu okumaktan daha iyi bir yolu yoktur. Başkaları tarafından yazılmış kötü kodlar bile genellikle size bir şeyler öğretir! Ayrıca, bir kütüphane, API, dil veya etki alanının nasıl çalıştığını anlamanın daha önce başkaları tarafından yazılmış çözümleri okumaktan ve geliştirmekten daha iyi bir yolu yoktur. Eğer kod mevcut Yeniden kullanıma yokken önceden varolan çözüm şimdiye kadar yapacak çünkü ikisi şeyler genellikle gerçekleşmesi oldukça neye ihtiyacınız - ve bilgi artışı nereden geldiğini kaynağı müdahele takip eden olduğunu.

Bu gerçekten benim amacım, öğrenmek. Şimdilik, projemi bitirmekten daha değerli. Bu yüzden birisinin çalışmasını çok az çabayla (sadece kütüphanelere atıfta bulunmadan) yapmaya çalışırken kendimi kötü hissediyorum.
Arman

1

Ağır kütüphane ve kod pasajı kullanımı sizi kötü bir programcı yapar mı?

Kitaplıkları ve kod parçacıklarını uygun yerlerde kullanırsanız, 'Hayır' , bu kötü bir programcı olduğunuz anlamına gelmez. Bu, başkalarının bilgeliğini uygun yerlerde uygulayabilen akıllı bir programcı olduğunuz anlamına gelir.

Ancak...

Kütüphaneleri bulmak ve kod parçacıklarını bulmak zaman alıyor , bu nedenle kendi başınıza kod yazamıyorsanız ve önemsiz görevleri uygulamak için kitaplıkları ve kod parçacıklarını bulmak için saat harcamanız gerekiyorsa, o zaman 'Evet' , kötü bir programcısınız.


0

Hayır. Programcılar zaten orada bulunan kütüphaneleri kullanmalıdır. Tekerleği yeniden icat etmek yok. Daha iyi bir yönteminiz varsa, bunun için gidebilirsiniz, aksi halde aynı kodu yazarken gerçekten ne yapar. Tek şey, kodun ne olduğunu bilmenizdir (ve sadece önemliyse).


0

Diğer cevaplardaki sebeplere ek olarak, kodu kullanmamanız (sizin için uygun bir durum olduğu sürece) etik dışı sayılabilir, çünkü:

  1. İşverenlerinizi kasıtlı olarak boşa harcıyor olabilirsiniz VEYA
  2. Kasten daha az bir ürün teslim ediyor olabilirsiniz

Aklınızda bulundurun, her ikisinin de önceden belirlenmesi zor.

Ayrıca, genellikle bir anit kalıbı olarak adlandırılan, Bulunmamış Burada da bakın .


0

Tamamlama amaçları için bir karşı argümana izin verin: http://web.archive.org/web/20150326134617/https://michaelochurch.wordpress.com/2015/03/25/never-invent-here-the-even-worse -sibling-of-the-icat değil-burada /

"Burada Hiçbir Zaman İcat Etme" dediğim bir zihniyet. Bu zihniyetle, dış varlıklar fazla değerlidir ve çoğu zaman dolaylı olarak güvenilirdir, mühendislerin rafa hazır varlıkların tuhaflıklarına uyum sağlamaları için daha fazla zaman harcaması ve varlıkları kendi başlarına daha az zaman harcaması için bırakmıştır.

Her zaman bir denge vardır.


-2

Kesinlikle gerekli olmadıkça kütüphaneleri kullanmıyorum. Bağımlılıklar taşınabilirliği ve ömrü sınırlar. Yazılım geliştirme alanında 34 yılım var ve en az 1 programımın erozyona uğramadan tahrip edilmeden 3 yıldan daha uzun sürmesini istiyorum.

COM (Bileşen Nesne Modeli), 17 yıl önce cevap, teoride harika, pratikte sorgulanabilir, yeniden kullanılabilir bileşenler değil, sadece çok temel bileşenleri kullanacağım ve sadece mecbur kalırsam.

API'ler ve SDK'lar pek kullanılmamaktadır. Bir kitaplıktan kullandığım kod satırlarının sayısını, çalışmalarını sağlamak ve yazmak için harcadığım zamanı ayırırsam, bunun bir yıkama olduğunu düşünüyorum. Tamamen SDK'ları kullanmayı bırakıyorum ek yükü aşırı.

Altyapılar: Zend, Silverlight, WCF, .NET, katmanlı sistemler, evet, başlangıçtaki gelişmeyi hızlandırabilirler, ancak sınırlarını aştığımda, çatlakları düzeltmek için harcadığım zaman sadece çabaya değmez. Kaç yaşındalar ve erozyona karşı dayanıklılar mı?

Sadece kütüphanelerimde JavaScript ve HTML'ye gittim. Yalnızca en yaygın ifade türlerini kullanarak JavaScript'i kaldırdım. İnşallah 10 yıl sürecek bir şeyler yazabilirim.


Bu problemin bir kısmı kütüphaneler değil, sürekli teknoloji, dilleri ve programlama araçlarını çalkalar, bu da yeni teknolojide yeni kütüphaneleri bulmanız ve aynı eski şeyleri bulmanız gerektiği anlamına gelir.
gbjbaanb

-2

Her şey değişir. Bir oyunu kodluyorsanız, o zamandan beri bir kütüphane kullanmanız gerekir (örn. Allegro) ancak başkalarının kodunu kopyaladığınızda / çaldığınızda / ödünç alıyorsanız (gerçekten) bir programcı olarak kabul edilemezsiniz. Tekerleği yeniden icat etmek yok ama makul bir noktaya söylüyorum. Tüm programlarınızı başkalarının yazdığı pasajları yapmayın. Bilgisayar başında otur ve kendin yap ... kod çalmayı bırak. Bu günlerde insanlar çok tembelleşiyor ve kopyalayıp yapıştırıyorlar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.