Görevi yerine getirmeden bir kütüphane mi kullanmalısınız? [kapalı]


33

Bir görevi yerine getirmek için açık kaynaklı bir JavaScript eklentisi kullanabileceğim bir durumdayım. Ama onu kullanmaya çalıştığımda, kendimi zaten yaptığım şeylerin çoğunu yeniden tasarlamam gerektiğini ve mütevazi görüşüme göre projeye kesin bir karmaşıklık kattığımı fark ettim. Oysa aynı görevi temiz bir kodla başarabilirim, kendim yapabilirim ve şu ana kadar yaptığım şeyi değiştirmeye gerek kalmadan.

Bu durumda bir kütüphane seçmelisiniz (daha iyi kalite kodu olması için mi?)


3
"Kaliteyi" nasıl ölçüyorsunuz? Kod satırı sayısına göre? Sınıflar? Karmaşıklık? İdame? Esneklik?
Laiv

3
Cevap HAYIR, kaliteyi düşündüğünüz veya aldığınızdan bağımsız olarak. Ancak, bize kalite fikrinizi verirseniz, cevaplar, kütüphane sayısının neden kaliteyi düşündüğünüzü iyileştirmediğini açıklamak için akıl yürütmelerini açıklayacaktır. Bu sadece bir ayrıcalık meselesi. Şimdi olduğu gibi, basit bir NO soruyu hiçbir açıklama yapmadan cevaplayacaktır.
Laiv

4
Sorunuza doğrudan bir cevap değil, “bu sayı” nın kaçınılmaz olarak “daha ​​iyi kaliteyi” garanti ettiği düşüncesi, kod kalitesinin artmasının zorlukları kabul edildiğinde karşımıza çıkıyor. Kaliteyi sağlamak için hızlı bir düzeltme yoktur. Olsaydı sorun olmazdı. Kesin basit bir yaklaşımın her şeyden önce sonuçta çözüm olduğunu iddia eden herkes ya (en iyi ihtimalle) aşırı genelleştiricidir ya da (en kötüsü) kusurlu fikirlerini bir gerçek olarak itmektedir.
Flater

3
Kütüphaneyi kullanmanın kod kalitesini artıracağını düşündüren nedir?
Monica'ya

1
Kapatmaya oy verdi, çünkü soru önemli bir şekilde yeniden formüle edilmiş gibi görünüyor ve üst cevaplar eski sürüme cevap veriyor ... soruyu şimdi kendi başına durduğunda daha iyi yeniden gönder (ayrıca "kaçınmak için ayrıntıları ekle" "oylar) ...
AnoE

Yanıtlar:


54

Bir mühendis olarak, belki de bunu bir optimizasyon problemi olarak düşünmek uygundur. Doğal olarak bir optimizasyon hedefimiz olmalı . Bu tür bir durumdaki yaygın olan, Toplam Sahip Olma Maliyetini en aza indirgemek olacaktır .

Üçüncü taraf bileşeninin eklenmesinin uzun vadede maliyetten tasarruf sağlayacağına inanıyorsanız, kullanmanız gerekir. Yapmazsan yapmamalısın. Devam eden bakımın maliyetini göz önünde bulundurduğunuzdan emin olun (örneğin, yeni bir O / S sürümü çıktığında, bir güvenlik hatası bulunduğunda veya bazı yeni W3C spesifikasyonu yayınlandığında).

Önemsiz birçok sorun için, kendi başınıza büyümenin maliyeti daha düşük olacaktır, ancak kuruluşunuzun temel yeterliliği dışındaki orta derecede karmaşık sorunlar için, üçüncü taraflara gitme genellikle mantıklı olacaktır.

Dikkate alınması gereken başka hedefler de var (örneğin risk), ancak TCO en büyüğüdür.


1
Bence bu cevabın daha fazla oy alması gerekiyor. - Kütüphanelerde uzun vadeli güvenilirlik çok büyük bir problem olabilir. Bir kütüphane olsa bile, API'lerin değişip değişmeyeceğini kim bilebilir? Kütüphaneler kısa vadede kolaydır, ancak uzun vadede sorunlara neden olabilir. (Not: kaynak kod olarak kütüphaneler bazı problemleri hafifletmektedir.)
DetlevCM

6
@DetlevCM Cevap ayrıca diğer yöne kolayca gidebildiğini söylüyor. Önemsiz olmayan kütüphaneler, kütüphane kullanıcısı olarak ödemeniz gerekmediği ve belki de ödemeliyseniz (yani kütüphanenin sahibi olmanız durumunda) ödeyemeyeceğiniz bakım maliyetlerine eklenir.
Kübik

Kabul ediyorum ama kütüphanenin maliyetini de dikkate almayı unutmayın - hatalar, kontrolünüz dışındaki tasarım değişiklikleri ve sadece tek bir işlevde kullanmak için kullanmadığınız kodlar. Ayrıca kütüphane çoğu zaman, çözümünüz verdiğiniz sorun için olabileceği kadar etkileyici değildir. Ayrıca, harici bir kütüphaneyi bu kadar kolay hata ayıklayamazsınız ve yaparsanız daha sonra birleştirme sorunlarıyla uğraşmak zorunda kalırsınız. Sadece bir kütüphane çözümünün daha hafif olduğunu varsaymayın, tüm faktörleri göz önünde bulundurun ve kütüphane uygun değilse, kendi çözümünüzü kodlamaktan korkmayın!
Bill K

36

Bill Gates bir zamanlar ünlü dedi:

"Programlama ilerlemesini kod satırlarıyla ölçmek, uçak binasının ilerlemesini ağırlıkça ölçmek gibidir."

Bu alıntı akla geliyor çünkü aynı sonuçta kütüphane sayısı için de söylenebilir. Kural olarak, şu durumlarda kütüphaneleri kullanmıyorum:

  1. Bunu yapmanın başka yolu yok. Yapmadan yapmak, ürünü zamanında ve bütçeye göre üretmek artık ekonomik olarak mümkün olmaz.
  2. Bu, kütüphanenin özelliklerinden birçoğuna ihtiyaç duyduğum için bana önemli bir zaman kazandıracak
  3. Kütüphane iyi kullanılıyor ve sahip olabileceğim olası sorunlar iyi belgelenmiş olacak.

İdeal olarak her üç koşul da yerine getirilir, ancak her ikisine de razı olurdum. Alt satırda, bir amaca hizmet etmedikçe programınıza bir kütüphane eklememelisiniz. Bu amacın ne olduğunu sormanız gerekiyorsa, muhtemelen programınıza eklememelisiniz. Bu nedenle, programınızın kod kalitesi , programınızın içindeki kitaplıkları yeniden yazmak zorunda kalmadan, her kitaplığı zarifçe çağırdığından, yarar sağlar.

İyi şanslar!


4
@BillalBegueradj Anlamlı bir teklif, evet. Yeterli, hayır. İlerlemeden bahsetmiyoruz, yazılım kalitesinden bahsediyoruz ve kod satırları bulunan hataların sayısı ile çok güçlü bir korelasyona sahip. Bkz . Sınıf Büyüklüğünün Nesne Yönelimli Metriklerin Geçerliliği Üzerindeki Etkileyici Etkisi, diğer tüm ölçümlerin LOC tarafından ayarlandıktan sonra bulunan hatalar üzerinde tahmin gücü yoktur; 2001). Ve, bu arada, bilimsel makale ünlü alıntı atıyor.
Theraot

5
@Theraot Satır sayısının, daha büyük programların daha küçük programlardan daha kötü kod kalitesine sahip olduğunu belirten kusur sayısını belirlediği için mi önerirsiniz? Ölçümünle aynı fikirde değilim, üzgünüm. Ayrıca, alıntı gerçekten sizi rahatsız ediyorsa, görmezden gelmekten çekinmeyin.
Neil

3
Netleştirilmemesi gereken satır sayısı, hata sayısını belirlemez, bulunan hata sayısı ile güçlü bir korelasyonu vardır. Bunu anlamak kolaydır: Kod ne kadar büyükse, hataların ortaya çıkması için o kadar fazla fırsat. Tabii ki, kusur sayısı bulunduktan ve tamir edildikten sonra düşecektir. Bu sadece sonuçta korelasyondur. Zeyilname: LOC birçok ortak ölçümü atar, ayrıntılar için makaleye bakın.
Theraot

5
@Theraot Benim argümanım, kusurların satır sayıları ile korelasyonu değildi. Benim iddiam, kötü kod kalitesine eşit olan çok sayıda kusur ile oldu. Chrome, yıllar içinde kusur payına sahipti, ancak github'a kötü yazılmış 10 satırlık bir jQuery eklentisinden daha kötü yazılmış olduğunu iddia eden herhangi bir iddianın meşruiyetini savunuyorum.
Neil

3
@Theraot "bilimsel makale ünlü alıntıyı atıyor." - Kağıdınız aslında onu
yenmek

14

(Not: Asıl soru şuydu: Kütüphane sayısı kod kalitesini arttırıyor mu?)

Muhtemelen bunu kendin için cevaplayabilirsin: Hayır, elbette kütüphaneleri kullanmanın gerçeği kodunu iyileştirmiyor. Öyle olsaydı, çaba harcamadan her şey için harika bir kod yazmak kolay olurdu.

İnsanlar, kendi başınıza çevirmeyi yeniden önerdiklerinde, iyi bilinen bir kütüphanedeki kodun, yazarların çok daha fazla zaman harcadıkları için muhtemelen sizin elde edeceğinizden daha doğru, etkin ve / veya kullanışlı olduğu anlamına gelir. belirli bir işlevsellik alanında sizden (tüm proje için son teslim tarihinizle) karşılayabilecek.

Ama bu sadece bir trend, yasa değil. Kuşkusuz, kendinizinkinin kullanması kadar faydalı olmayan kütüphaneler olabilir. Bu, kütüphane gerçekte ihtiyacınız olandan çok daha fazlasını yaptığında ve kendi kod tabanınızı sözleşmelerine makul olandan daha fazla uyarlamanız için zorlayacak şekilde gerçekleşir. Bu, tam olarak bu örnekte bulduğunuz şeymiş gibi görünüyor.


4

Doğru kütüphaneleri kullanmak size çok fazla iş kazandırır, aynı zamanda çok fazla gizli maliyet vardır:

  • Kütüphanelerin güncel tutulması gerekir. Düzenli olarak güncellemeleri olup olmadığını kontrol etmelisiniz (güvenlikle ilgili olabilir!) Ve uygulayın. Her kütüphane güncellemesi uygulamanızdaki potansiyel bir şeyi bozabilir. Bu, daha sonra tam bir entegrasyon testi yapmanız gerektiği anlamına gelir. Bu nedenle, projenizin bağlı olduğu her kütüphane, uzun süreli bakım giderlerini artırır.
  • Bazı Javascript kütüphaneleri o kadar güçlüdür ki, insanlar onları ayrı bir uzmanlık alanı olarak algılamaya başlarlar. Bu nedenle eklediğiniz her bir ek kitaplık, aşina olmadıkları bir çerçeveye dayanan, kendinden emin bir düzenleme kodu hissetmeyen geliştiricileri korkutabilir. Kullandığınız tüm kütüphanelere aşina olan yeni bakım programcılarının işe alınması zor olabilir.
  • Web sitenize kitaplık eklemek, yükleme süresini artırır, çünkü kullanıcının yalnızca küçük bir bölümünü kullansanız bile, tüm kitaplığı yüklemesi gerekir. İndir özel sadece ihtiyacınız işlevselliği ile Derlemelere bazı popüler kütüphaneler sizi tanır, ancak o zaman bile hala (koşmak asla bir sürü kod içerir genellikle edecek ya da daha kötüsü: Kod yok çalıştırabilir, ancak yararlı bir şey yapmaz, çünkü sadece veri yapılarını kullanmadığınız fonksiyonlar için hazırlar).

Dolayısıyla, projenize kendiniz de yazabileceğiniz bir şey eklemek için başka bir bağımlılık eklemeden önce, bir maliyet / fayda analizi yapın.


Ve gerçekten gerçek verileriniz olduğunda bu analizi tekrarlayın. Maliyeti küçümsemiş olabilirsiniz / faydayı fazla tahmin etmiş olabilirsiniz veya durum değişmiş olabilir.
Deduplicator

1

Bunun ikili bir karar olması gerekmez: Ya yalnızca bir OSS kütüphanesi kullanın ya da sıfırdan yeni bir çözüm programlayın. Başka bir seçenek, eğer izin veriyorsa kütüphanenin bölümlerini yeniden kullanmak olabilir.

Örneğin, benim alanımda (sayısal yazılım) bir kütüphane ince çekirdekli modüllere ve sadece% 80 memnun olduğum bazı özel modüllere sahip olabilir. Bu yüzden çekirdek modülleri kullanır ve özel modüller için bir sarıcı yazardım. Veya OSS modüllerinin tasarımını ve kodunu kullanarak kendi özel modülümü geliştirebilirim. En zor, algoritmik bitler genellikle bunlardan, sadece iskele kodunun değiştirilmesiyle yeniden kullanılır. Orijinal kodun bir kısmını da temizleyebilirim. Bu, sıfırdan geliştirmeye kıyasla iyi bir öğrenme deneyimi ve zaman kazandıran kanıtlamıştır.


0

Birisi sizin için işi zaten yaptıysa, elbette kullanmalısınız.

Kuralın istisnası javascript'tir. Kullanmak istedikleri dil özelliklerini eklemek için başka düzinelerce kütüphaneyi (tabii ki eski sürümler) ithal ettikleri ve sonra da işinizi sizin için yaptıkları yer.

Çerçevenizi seçin ve bunun içinde kalın. Kütüphane sizin çerçeveniz veya düz js ile çalışıyorsa, sorun yok. Ancak farklı bir çerçeveye ihtiyacı varsa, başka bir seçenek arayın.


4
Burada bir çok javascript hayranı var
FCin

0

Kütüphaneler ve onları ne zaman kullanacakları karmaşık bir karardır.

Bir yandan, iyi bir şekilde test ettiniz, neredeyse benim için standart şeyler (benim alanımda, örneğin FFTW bu kategoriye giriyor ya da libsndfile gibi bir şey). herkes kullanır.

Öte yandan, github'dan rastgele şeyler var, test paketi yok ve sadece yaklaşık 1 bakıcı var, genellikle neden rahatsız ediyorsun?

Benim için asit testi, ilk önce kütüphane mimariye uyuyor (Bazen, belirli bir kütüphaneyi kullanmak istediğinizi biliyorsanız) tasarlarsınız, ve birinin kütüphane kodunu hata ayıklamak için kullanacağımı mı sanırım? ? İkinci soru için iyi bir proxy "Otomatik bir test paketi var mı ve belgeleri nasıl?".

Küçük bir hata ayıklama önemli bir sorun değildir, ancak bu noktada kütüphane kodu bir bakım açısından kendi kod büyüklüğüme göre sayılmaya başlar (dahası, eğer düzeltmelerim bir nedenden dolayı yukarı doğru akıtılamazsa).

Ayrıca, kütüphaneler ve çerçeveler arasında da farklılaşacağım, çünkü ayrımın bazen net olmadığı kesin değil, benim (küçük çekirdekli, ağır DSP ağırlığındaki) dünyamdaki çerçeveler, özellikle daha fazla birleştirme yapmaya çalışıyorsanız, eşek için acı verici Bir veya satırların biraz dışında bir şey yapmak, kütüphaneler bazen yararlı olur. Bunun web dev sahnesinde çok farklı göründüğünü biliyorum.

Günün sonu, zevk ve deneyime dayanan bir karardır ve hatta deneyimli kişiler bazen en azından hala bir kütüphaneyle kötü bir seçim yapar, çok can sıkıcı olursa, her zaman yırtıp kendi uygulamanızı yazabilirsiniz.

Kararlar kararlar....

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.