एक प्रारंभिक प्रोग्रामर के रूप में, क्या मुझे तृतीय-पक्ष पुस्तकालयों का उपयोग करके अपने स्वयं के पुस्तकालयों के निर्माण का पक्ष लेना चाहिए?


12

एक शुरुआत पायथन प्रोग्रामर के रूप में, क्या उन्नत 3-पार्टी पुस्तकालयों में कूदने से पहले अपने स्वयं के पुस्तकालयों का निर्माण और समझना एक अच्छा विचार है जिसमें मुझे कार्यक्षमता की आवश्यकता है?

कुछ परियोजनाएं (उदाहरण के लिए Django जैसे वेब फ्रेमवर्क) संभवतः इस दृष्टिकोण के लिए बहुत बड़ी हैं। लेकिन अन्य परियोजनाएं (जैसे वेब क्रॉलर, ग्राफ लाइब्रेरी, HTML पार्सर) संभव लगती हैं।

मुझे चिंता है कि 3-पार्टी पुस्तकालयों पर जल्दी निर्भरता मेरे विकास को प्रभावित करेगी।

नोट: यह सवाल और यह सवाल एक अनुभवी प्रोग्रामर को ध्यान केंद्रित करने के लिए लगता है, जो शायद सीखने के लाभ की तुलना में पुन: उपयोग की दक्षता पर अधिक ध्यान केंद्रित करते हैं। मेरा प्रश्न, मुझे लगता है, शुरुआती लोगों पर केंद्रित है।


5
"प्रोग्रामर के बजाय लाइब्रेरी इंटीग्रेटर से ज्यादा कुछ नहीं": ग्राहक चाहते हैं कि आप उत्पादक बनें। मौजूदा पुस्तकालयों का मूल्यांकन और एकीकरण करने में सक्षम होना एक महत्वपूर्ण कौशल है जिसे आपको उत्पादक होने की आवश्यकता है। यदि कोई उपलब्ध लाइब्रेरी नहीं है जो आपकी आवश्यकताओं के अनुरूप है ... अन्यथा उस व्यावसायिक समस्या को हल करने पर ध्यान केंद्रित करें जिसे आपका एप्लिकेशन संबोधित कर रहा है
Hamish Smith

2
आप "लाइब्रेरी इंटीग्रेटर" और "प्रोग्रामर" के बीच क्या अंतर कर रहे हैं। 30 वर्षों में - यहां तक ​​कि एम्बेडेड चिप-स्तरीय डिवाइस नियंत्रक बना - मैंने कभी भी पुस्तकालयों के बिना काम नहीं किया है। क्या आप इस भेद की व्याख्या कर सकते हैं?
एस.लॉट

बेचारा बहक गया। संपादित किया है।
माइक रैंड

मैं एक लाइब्रेरी इंटीग्रेटर किराए पर लेना चाहूंगा। जब आप सुविधाओं पर ध्यान केंद्रित कर सकते हैं तो आप पर ध्यान केंद्रित क्यों करें? कुछ दर्जन बुरी तरह से पुनर्निर्मित साइकिलों को देखने के बाद मैंने दूसरे को देखने के बारे में सोचा। लाइब्रेरी डिज़ाइन कड़ी मेहनत और एक संतुलनकारी कार्य है। एक विशिष्ट सॉफ्टवेयर की दुकान पुस्तकालय डिजाइन में विशेषज्ञ नहीं है, इसके पास सही कौशल, संसाधन और धैर्य नहीं है। फिर से लिखना से सावधान रहें। कोड का उपयोग करना बेहतर है जो कि खरोंच से शुरू होने की तुलना में दूसरों द्वारा परीक्षण किया गया है। केवल जब कोई वैक्यूम होता है तो एक आविष्कार करना चाहिए, आईएमओ।
जॉब

जवाबों:


12

यह हमेशा एक व्यापार है।

एक प्रारंभिक प्रोग्रामर के रूप में, आपको पुन: कोड कोड पर विचार करते समय दो सवाल पूछने चाहिए।

  1. क्या मैं उस समस्या के बारे में अधिक जानूंगा, जिसे मैं खरोंच से सब कुछ लिखकर हल करना चाहता हूं, या समस्या डोमेन पर ध्यान केंद्रित करके और जटिलता को उस समस्या के लिए महत्वपूर्ण नहीं बना सकता है जिसमें मैं दिलचस्पी रखता हूं?
  2. क्या मेरे लिए समस्या को हल करना अधिक महत्वपूर्ण है या क्या यह अधिक महत्वपूर्ण है कि मैं कुछ मूलभूत अवधारणाओं को समझूं?

यदि आपको अपनी परियोजना खत्म करने की ज़रूरत नहीं है, तो जटिल समस्याओं पर अपने पहियों को स्पिन करना ठीक है जो अन्य लोग पहले से ही हल कर चुके हैं, क्योंकि आप कुछ सीखेंगे। लेकिन आप शायद "खत्म" करने से पहले कुछ और बात कर लेंगे, जो आपके लिए महत्वपूर्ण हो सकता है या नहीं। जब आप अपने आप को हल करने की कोशिश करना शुरू करते हैं, तो जब तक आप एक जटिल डोमेन पर अपने सिर के ऊपर नहीं मिलते, अन्य परियोजनाएं तेजी से चमकदार दिखना शुरू हो जाएंगी।

नियंत्रण छोड़ने के बारे में जुनूनी न हों क्योंकि आप किसी और के सोचने के तरीके के बारे में बता रहे हैं; जो आप पूरा करने की कोशिश कर रहे हैं उस पर अधिक ध्यान केंद्रित करें।

यदि आपका लक्ष्य HTML पार्सर लिखना है क्योंकि आप समझना चाहते हैं कि पार्सर्स कैसे काम करते हैं, तो इसके लिए जाएं। यदि आपका लक्ष्य HTML पार्सर लिखना है, क्योंकि आप उपयोगकर्ता इनपुट को संक्षिप्त करना चाहते हैं या HTML के कुछ यादृच्छिक बिट्स को बदलना चाहते हैं, तो आप शायद गलत चीज़ पर ध्यान केंद्रित करते हैं, क्योंकि आप शायद पार्सिंग के बजाय पार्सिंग के आवेदन में अधिक रुचि रखते हैं। । अगर आपको ऐसा लगता है कि HTML parser लिखना पसंद है क्योंकि आप किसी और की लाइब्रेरी को समझने के लिए समय नहीं लेना चाहते हैं, तो आप शायद अपना समय बर्बाद कर रहे हैं, क्योंकि, कम से कम इस मामले में, मैं गारंटी देता हूं कि किसी और ने अधिक समय बिताया है कि कैसे इस समस्या को प्रभावी ढंग से हल करने की तुलना में आपके पास होगा। वास्तव में तुच्छ मामलों में, आप कोड का पुन: उपयोग न करके समय बचा सकते हैं, लेकिन जटिल लोगों में, जब तक कि आप पुस्तकालय का उपयोग नहीं करते हैं या आपके दस्तावेज़ और कोड नमूने पढ़ने की क्षमता बेकार है,

दूसरी तरफ, मैं कहूंगा कि यह आपकी अपनी ग्राफ़िक्स लाइब्रेरी लिखने के लायक है, क्योंकि आप हस्तांतरणीय, मौलिक एल्गोरिदम और डेटा संरचनाओं पर अधिक ध्यान केंद्रित करेंगे, जिन्हें आप अन्य डोमेन पर लागू करने में सक्षम होंगे, भले ही आप उपयोग कर रहे हों किसी और की लाइब्रेरी जब आप उन समस्याओं पर काम करते हैं।


समस्या के बारे में सोचने के लिए शानदार रूपरेखा। बहुत सराहना की।
माइकंड

8

अधिकांश शुरुआत प्रोग्रामर एक समस्या की जटिलता को बहुत कम करते हैं। यह कई अप्रिय स्थितियों की ओर जाता है, लेकिन मैं सिर्फ एक पर ध्यान केंद्रित करूंगा: वे "फूला हुआ" या "बहुत जटिल" होने के लिए बहुत सारे तीसरे पक्ष के पुस्तकालयों को खारिज कर देते हैं। फिर वे एक ही काम करने के लिए अपना कोड लिखने की कोशिश करते हैं, और इसके बारे में पूरी तरह से गड़बड़ कर देते हैं, क्योंकि वे उन सभी सामानों का अनुमान नहीं लगाते हैं जिन्हें उन्हें संभालना होगा।

वेब क्रॉलिंग और पार्सिंग HTML लें। आपको उन कार्यों के प्रति एक बहुत ही आकस्मिक रवैया दिखाई देता है - जो मुझे विश्वास दिलाता है कि आपने कभी भी उन्हें बहुत छोटे पैमाने पर करने की कोशिश नहीं की। यहां उन संभावित समस्याओं की एक छोटी, गैर-व्यापक सूची है जिनसे निपटने के लिए एक वास्तविक वेब क्रॉलर की आवश्यकता है:

  • विकृत HTML।
  • एकाधिक वर्ण एन्कोडिंग (पूरी दुनिया ASCII पर नहीं चलती है)।
  • लिंक जो जावास्क्रिप्ट द्वारा उत्पन्न या संशोधित किए जाते हैं।
  • बहु-गीगाबाइट बाइनरी फ़ाइलों के लिंक।
  • गलत माइम-प्रकार।
  • क्रॉल सत्र के बीच में दुर्घटनाग्रस्त होना।
  • टार गड्ढे।
  • एसईओ सलाहकार।
  • माइक्रोसॉफ्ट।

6

मुझे चिंता है कि तीसरे पक्ष के पुस्तकालयों पर जल्दी निर्भरता मेरे विकास को प्रभावित करेगी और मुझे एक प्रोग्रामर के बजाय एक पुस्तकालय इंटीग्रेटर से ज्यादा कुछ नहीं करेगी।

वह झूठा है।

3 पार्टी पुस्तकालयों पर शुरुआती निर्भरता सिखाएगी कि अच्छे पुस्तकालय कैसे काम करते हैं।

समय से पहले विकास हमेशा समय की बर्बादी है। अपने स्वयं के पुस्तकालयों को ध्यान से अध्ययन किए बिना (यानी का उपयोग करके) मौजूदा पुस्तकालयों को लिखना आपको पहिया को फिर से मजबूत करने के लिए - बुरी तरह से - अपने कैरियर के बाकी हिस्सों के लिए।

मैंने उन गंदगी को साफ करने के लिए कई बिलियन घंटे बिताए हैं।


निश्चित रूप से मैं इससे पूरी तरह सहमत नहीं हूं .. कभी-कभी 3 पार्टी लाइब्रेरी खराब लिखे जाते हैं और वास्तव में बुरी आदतों को सिखा सकते हैं। यदि अंतर्निहित एल्गोरिदम को अच्छी तरह से समझा जाता है, तो पहिया का फिर से आविष्कार करना एक अच्छा विचार हो सकता है, और फिर उनकी तुलना अन्य पुस्तकालयों से यह देखने के लिए कि दूसरों के लिए आपका कितना अच्छा या खराब स्टैक है। या तो मामले में, जाहिर तौर पर मेंटरशिप का कुछ रूप बेहद फायदेमंद है :)
डेमियन ब्रेख्त

कहा गया है कि, मौजूदा एपीआई :)
डेमियन ब्रेख्त

2
@ डिएमियन ब्रेख्त: "कभी-कभी 3 पार्टी लाइब्रेरी खराब लिखी जाती हैं और वास्तव में बुरी आदतों को सिखा सकती हैं" जबकि यह सच हो सकता है, अधिकांश खुले स्रोत परियोजनाएं उपयोगकर्ताओं के समुदाय द्वारा भारी रूप से अपमानित होती हैं और बुरे विचार भीड़ की समझ का सामना नहीं करते हैं। इसके अलावा, "खराब लिखा हुआ" एक निर्णय है जिसे कोई भी n00b प्रभावी रूप से नहीं बना सकता है।
एसटी २ott

@ S.Lott: अच्छी तरह से कहा (पुनः: n00b) :) और मुझे लगता है कि आपको बस इस बारे में सावधान रहना होगा कि आप किस 3 पार्टी के पुस्तकालयों को देखते हैं, क्योंकि कुछ में बहुत छोटे (यदि कोई हैं) समुदाय हैं। उदाहरण के लिए github पर रैंडम प्रोजेक्ट्स के आसपास पोज़ करना, आपको गलत रास्ते पर ले जाने की शुरुआत कर सकता है।
डेमियन ब्रेख्त

2
@ डेमियन ब्रेख्त: जब तक आप विभिन्न प्रकार की लाइब्रेरी नहीं देख लेते, तब तक आप कोई निर्णय नहीं ले सकते। उपयोग करने के लिए एक n00b के लिए पुस्तकालयों को "पूर्व-फ़िल्टर" करने का कोई संभव तरीका नहीं है। यह सभी पुस्तकालय या कोई पुस्तकालय नहीं है।
S.Lott

4

यह वाक्य, जो पहला है, मेरे लिए बहुत तार्किक रूप से समस्याग्रस्त है:

एक शुरुआत पायथन प्रोग्रामर के रूप में, क्या उन्नत 3-पार्टी पुस्तकालयों में कूदने से पहले अपने स्वयं के पुस्तकालयों का निर्माण और समझना एक अच्छा विचार है जिसमें मुझे कार्यक्षमता की आवश्यकता है?

आप कैसे मान सकते हैं कि आप एक उन्नत के रूप में उन्नत (आपका शब्द) कार्यक्षमता पुस्तकालयों को प्रभावी ढंग से लिख सकते हैं जो मौजूदा पुस्तकालयों के रूप में सही, फीचर पूर्ण और परीक्षण किए जाएंगे?

यह उस समय की भारी मात्रा का भी उल्लेख नहीं करता है जब आप एक पहिया को फिर से आविष्कार करेंगे, जिसे आप एक शुरुआत के रूप में नहीं समझते हैं, अंततः छोड़ देंगे जब आप भाग्यशाली होते हैं तो आपको एहसास होता है कि आप अपने सिर के ऊपर हैं, और आपको सीखना होगा वैसे भी पुस्तकालय से बाहर निकलना।

उदाहरण के लिए HTML पार्सिंग को लें, तो आप इसे व्यवहार्य मानते हैं, एक शुरुआत के रूप में सुंदर सूप से बेहतर काम करने का कोई तरीका नहीं है। सादा और सरल आप असफल होंगे। आपके हिसाब से जो चीजें संभव हैं, उनमें बहुत बड़ी जटिलताएँ हैं, जिन पर आप ध्यान नहीं दे रहे हैं, आप समस्या को समझने के लिए पर्याप्त रूप से समस्या डोमेन को नहीं जानते हैं, आप बस उसी से विफलता के लिए बर्बाद हैं।

मेरी राय यह है कि अन्य लोगों ने क्या किया है और आपके लिए अपनी समस्या पहले ही हल कर ली है, जब तक कि आप कुछ ऐसा नहीं पा सकते हैं जो आपकी समस्या का समाधान करता है।


1

यह सिर्फ मेरी राय है, लेकिन मैं सुझाव दूंगा कि आप अपने पुस्तकालयों का निर्माण बहुत ही सरल, पुनः प्रयोग करने योग्य कोड के लिए करें। कुछ अधिक जटिल के लिए, आप 3-पार्टी लाइब्रेरी का उपयोग कर सकते हैं, जो पूरी तरह से बनाया गया है और परीक्षण किया गया है (उम्मीद है!)। एक मजबूत पुस्तकालय बनाना बहुत समय लेने वाला हो सकता है , जो इस पर निर्भर करता है। मुझे यकीन है कि आप अपने एप्लिकेशन का निर्माण करके बहुत सारे प्रोग्रामिंग अभ्यास प्राप्त करेंगे!


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.