Başlangıç ​​programcısı olarak, üçüncü taraf kitaplıklarını kullanmak yerine kendi kitaplıklarımı oluşturmayı tercih etmeli miyim?


12

Başlangıçta Python programcısı olarak, ihtiyacım olan işlevselliği içeren gelişmiş 3. taraf kütüphanelere geçmeden önce kendi kütüphanelerimi oluşturmak ve anlamak iyi bir fikir mi?

Bazı projeler (örneğin Django gibi web çerçeveleri) bu yaklaşım için muhtemelen çok büyüktür. Ancak diğer projeler (örneğin Web Tarayıcıları, grafik kütüphaneleri, HTML ayrıştırıcısı) uygulanabilir görünmektedir.

Üçüncü taraf kütüphanelerine erken güvenmenin büyümemi engellemesinden endişe ediyorum.

Not: Bu soru ve bu soru , muhtemelen öğrenme yararından ziyade yeniden kullanım verimliliğine daha fazla odaklanmış deneyimli bir programcıya odaklanmaktadır. Benim sorum, sanırım, yeni başlayanlara odaklanıyor.


5
"bir programcıdan çok bir kütüphane entegratöründen başka bir şey değildir": müşteriler üretken olmanızı ister. Mevcut kütüphaneleri değerlendirip entegre edebilmek, üretken olmanız gereken önemli bir beceridir. İhtiyaçlarınıza uygun bir kütüphane yoksa ... aksi takdirde başvurunuzun ele aldığı iş problemini çözmeye odaklanın
Hamish Smith

2
"Kütüphane entegratörü" ve "programcı" arasında ne bir ayrım yapıyorsunuz. 30 yıl içinde - gömülü çip düzeyinde cihaz kontrolörleri bile - hiç kütüphane olmadan çalışmadım. Bu ayrımı açıklayabilir misiniz?
S.Lott

Kötü ifade edildi. Düzenledim.
MikeRand

Bir kütüphane entegratörü kiralamayı tercih ederim. Neden özelliklere konsantre olabileceğinize nasıl odaklanalım? Birkaç düzine kötü icat edilmiş bisiklet gördükten sonra, başka bir bisiklet görme fikrini kaçırdım. Kütüphane tasarımı zor bir çalışma ve dengeleyici bir eylemdir. Tipik bir yazılım mağazası kütüphane tasarımı konusunda uzmanlaşmamış, doğru yapmak için doğru becerilere, kaynaklara ve sabra sahip değildir. Yeniden yazmalara dikkat edin. Başkaları tarafından test edilmiş kodları sıfırdan başlamaktan daha iyidir. Sadece vakum olduğunda İMO icat edilmelidir.
İş

Yanıtlar:


12

Bu her zaman bir değiş tokuştur.

Bir başlangıç ​​programcısı olarak, kodu yeniden kullanmayı ve kare tekerleği yeniden icat etmeyi düşünürken kendinize iki soru sormalısınız:

  1. Her şeyi sıfırdan yazarak ya da sorun alanına odaklanarak ve ilgilendiğim sorun için kritik olmayan karmaşıklığı bir kenara bırakarak çözmek istediğim sorun hakkında daha fazla şey öğrenecek miyim?
  2. Elimdeki sorunu çözmek benim için daha mı önemli, yoksa bazı temel kavramları anladığım daha mı önemli?

Projenizi bitirmeniz gerekmiyorsa, tekerleklerinizi diğer insanların zaten çözdüğü karmaşık sorunlara çevirmek iyidir, çünkü bir şeyler öğreneceksiniz. Ama muhtemelen "bitirmeden" sizin için önemli olan veya olmayan başka bir şeye geçeceksiniz. Diğer projeler, kendiniz çözmeye çalışana kadar basit görünen karmaşık bir alanda başınızı aştığınız zaman hızlı görünmeye başlayacaktır.

Kontrolü bırakmayı takıntı haline getirmeyin, çünkü başka birinin düşünce tarzına ertelersiniz; daha çok neyi başarmaya çalıştığınıza odaklanın.

Hedefiniz, ayrıştırıcıların nasıl çalıştığını anlamak istediğiniz için bir HTML ayrıştırıcısı yazmaksa, bunun için gidin. Amacınız, kullanıcı girişini sterilize etmek veya HTML'nin bazı rastgele parçalarını dönüştürmek istediğiniz için bir HTML ayrıştırıcısı yazmaksa, muhtemelen yanlış şeye odaklanmışsınızdır, çünkü muhtemelen ayrıştırmadan ziyade ayrıştırma uygulamasına daha çok ilgi duyuyorsunuz. . Başka birinin kitaplığını anlamak için zaman ayırmak istemediğiniz için bir HTML ayrıştırıcısı yazmak istiyorsanız, muhtemelen zamanınızı boşa harcıyorsunuz, çünkü en azından bu durumda, bir başkasının nasıl olduğunu anlamak için daha fazla zaman harcadığını garanti ediyorum bu sorunu daha etkili bir şekilde çözmek için. Gerçekten önemsiz durumlarda, kodu yeniden kullanmadan zamandan tasarruf edebilirsiniz, ancak kullandığınız kütüphane berbat değilse veya belgeleri ve kod örneklerini okuyamazsanız,

Öte yandan, kendi grafik kütüphanenizi yazmaya değdiğini söyleyebilirim, çünkü daha sonra da kullanmanız gerekebilecek diğer alanlara uygulayabileceğiniz aktarılabilir, temel algoritmalara ve veri yapılarına daha fazla odaklanacaksınız Bu sorunlar üzerinde çalışırken bir başkasının kütüphanesi.


Sorunu düşünmek için harika bir çerçeve. Çok takdir etmek.
MikeRand

8

Çoğu başlangıç ​​programcısı bir sorunun karmaşıklığını büyük ölçüde hafife alıyor. Bu pek hoş olmayan durumlara yol açıyor, ancak sadece bir tanesine odaklanacağım: "şişirilmiş" veya "çok karmaşık" oldukları için birçok üçüncü taraf kütüphanesini reddediyorlar. Sonra aynı işi yapmak için kendi kodlarını yazmaya çalışırlar ve tam bir karmaşa yaparlar, çünkü ele almaları gereken her şeyi beklemiyorlardı.

Web'de gezinme ve HTML'yi ayrıştırma. Bu görevlere karşı oldukça sıradan bir tavrınız var gibi görünüyor - bu da onları asla çok küçük bir ölçekte yapmayı denemediğinize inanmamı sağlıyor. İşte gerçek bir web tarayıcısının uğraşması gereken potansiyel sorunların kısa, kapsamlı olmayan bir listesi:

  • Hatalı biçimlendirilmiş HTML.
  • Birden fazla karakter kodlaması (tüm dünya ASCII'de çalışmaz).
  • JavaScript tarafından oluşturulan veya değiştirilen bağlantılar.
  • Çoklu gigabayt ikili dosyalara bağlantılar.
  • Yanlış mim tipleri.
  • Tarama oturumunun ortasında çöküyor.
  • Katran çukurları.
  • SEO danışmanları.
  • Microsoft.

6

Üçüncü taraf kütüphanelere erken güvenmenin büyümemi engellemesinden ve bana bir programcıdan ziyade bir kütüphane entegratöründen başka bir şey yapmamasından endişe ediyorum.

Bu yanlış.

3. taraf kütüphanelere erken güvenmek, iyi kütüphanelerin nasıl çalıştığını öğretecektir.

Erken gelişme her zaman zaman kaybıdır. Mevcut kütüphaneleri dikkatle incelemeden (yani kullanmadan) kendi kütüphanelerinizi yazmak sizi kariyerinizin geri kalanı için tekerleği - kötü bir şekilde - yeniden icat etmeye mahkum eder.

Bu karışıklıkları temizlemek için faturalandırılabilir birçok saat geçirdim.


Buna tamamen katıldığımdan emin değilim .. Bazen 3. parti kütüphaneler kötü yazılmış ve aslında kötü alışkanlıklar öğretebilirler. Altta yatan algoritmalar iyi anlaşılmışsa, tekerleği yeniden icat etmek iyi bir fikir olabilir ve daha sonra sizinkilerin diğerlerine ne kadar iyi ya da kötü olduğunu görmek için bunları diğer kütüphanelerle karşılaştırmak olabilir. Her iki durumda da, belli bir mentorluk biçimi son derece faydalıdır :)
Demian Brecht

Söyledikten, mevcut API incelemek için fayda var :)
Demian Brecht

2
@Demian Brecht: "Bazen 3. parti kütüphaneler kötü yazılmış ve aslında kötü alışkanlıklar öğretebilir" Bu doğru olsa da, çoğu açık kaynak projesi bir kullanıcı topluluğu tarafından büyük ölçüde denetlenir ve kötü fikirler kalabalığın bilgeliğine dayanmaz. Ayrıca, "kötü yazılmış" hiçbir n00b'nin etkili bir şekilde veremeyeceği bir karardır.
S.Lott

@ S.Lott: İyi dedi (yeniden: n00b) :) Ve sanırım bazılarının çok küçük (varsa) toplulukları olduğu için hangi üçüncü taraf kütüphanelerine baktığınıza dikkat etmelisiniz . Örneğin, github'da rastgele projelerin etrafından dolaşmak sizi yanlış yola yönlendirmeye başlayabilir.
Demian Brecht

2
@Demian Brecht: Çeşitli kütüphaneler görene kadar herhangi bir yargı geliştiremezsiniz. Bir n00b'nin kullanabilmesi için kitaplıkları "ön filtrelemenin" olası bir yolu yoktur. Hepsi kütüphaneler ya da kütüphaneler yok.
S.Lott

4

İlki olan bu cümle benim için çok mantıklı bir sorundur:

Başlangıçta Python programcısı olarak, ihtiyacım olan işlevselliği içeren gelişmiş 3. taraf kütüphanelere geçmeden önce kendi kütüphanelerimi oluşturmak ve anlamak iyi bir fikir mi?

Gelişmiş (sizin kelimeniz) fonksiyonellik kitaplıklarını, doğru, özellik tamamlanmış ve mevcut kitaplıklar gibi test edilecek bir başlangıç ​​olarak etkili bir şekilde yazabileceğinize nasıl inanabilirsiniz ?

Bu, bir acemi olarak anlamadığınız bir tekerleği yeniden icat etmek için harcayacağınız devasa zamandan bile bahsetmez, nihayetinde şanslıysanız başınızın üzerinde olduğunuzu fark ettiğinizde ve zaten kütüphaneden çıkıyor.

Örneğin HTML çözümlemesini düşünün, bunu mümkün olarak söylüyorsunuz, acemi olarak Güzel Çorba'dan daha iyi bir iş yapmanın bir yolu yok. Sade ve basit başarısız olacak. Mümkün olduğunu düşündüğünüz şeylerin dikkate almadığınız çok büyük karmaşıklık sorunları var, sorun alanını karmaşıklığı anlayacak kadar ayrıntılı olarak bilmiyorsunuz, sadece bundan başarısızlığa mahkumsunuz.

Benim düşüncem, sorununuzu ele alan bir şey bulana kadar, başkalarının neler yaptığını ve sizin için sorununuzu zaten çözdüğünü öğrenmek.


1

Bu sadece benim görüşüm, ama oldukça basit, yeniden kullanılabilir kod için kendi kütüphanelerinizi oluşturmanızı öneririm. Daha karmaşık herhangi bir şey için, kapsamlı bir şekilde oluşturulmuş ve test edilmiş 3. parti kütüphaneleri kullanabilirsiniz (umarım!). Sağlam bir kütüphane oluşturmak , ne olduğuna bağlı olarak çok zaman alabilir . Eminim sadece uygulamanızı oluşturarak bol miktarda programlama uygulaması elde edersiniz!


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.