क्या आपको एक पुस्तकालय का उपयोग करना चाहिए जब आप इसके बिना कार्य कर सकते हैं? [बन्द है]


33

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

क्या आपको इस स्थिति में वैसे भी लाइब्रेरी का विकल्प चुनना चाहिए (जैसे बेहतर गुणवत्ता कोड के लिए?)


3
आप "गुणवत्ता" कैसे माप रहे हैं। कोड की लाइनों की संख्या से? क्लासेस? जटिलता? रख-रखाव की? लचीलाता?
Laiv

3
जवाब नहीं है, कोई फर्क नहीं पड़ता कि आप गुणवत्ता पर विचार करते हैं या नहीं। लेकिन अगर आप हमें गुणवत्ता का विचार प्रदान करते हैं, तो उत्तर यह बताने के लिए उनके तर्क को संबोधित करेंगे कि पुस्तकालयों की संख्या में सुधार क्यों नहीं होता है जो आप गुणवत्ता पर विचार करते हैं। यह महज दिखावा की बात है। जैसा कि अभी है, एक सरल NO स्पष्टीकरण की आवश्यकता के साथ प्रश्न का उत्तर देगा।
Laiv

4
आपके प्रश्न का सीधा उत्तर नहीं है, लेकिन यह विचार कि "यह संख्या" अनिवार्य रूप से "बेहतर गुणवत्ता" की गारंटी देती है, बढ़ती कोड गुणवत्ता की कठिनाइयों को स्वीकार करने के चेहरे पर उड़ती है। गुणवत्ता सुनिश्चित करने के लिए कोई त्वरित-समाधान नहीं है। अगर वहाँ था, समस्या मौजूद नहीं होगी। जो कोई भी दावा करता है कि एक निश्चित सरल दृष्टिकोण है-ऑल-एंड-एंड-सॉल्यूशन या तो (सबसे अच्छा) ओवरगेंरलाइजिंग या (सबसे खराब) उनके त्रुटिपूर्ण विचार को सच्चाई के रूप में धकेलता है।
फ्लाटर

3
आपको क्या लगता है कि पुस्तकालय के उपयोग से कोड की गुणवत्ता बढ़ जाएगी?
मोनिका

1
बंद करने की कोशिश की गई क्योंकि ऐसा लगता है कि प्रश्न को फिर से तैयार किया गया है, और ऊपरी उत्तर पुराने संस्करण का उत्तर देते हैं ... बेहतर प्रश्न को फिर से पोस्ट करें क्योंकि यह अब अपने आप में खड़ा है (प्लस बोर्ड से बचने के लिए विवरण जोड़ें) "वोट) ...
AnoE

जवाबों:


54

एक इंजीनियर के रूप में, शायद यह एक अनुकूलन समस्या के रूप में सोचने के लिए उपयुक्त है। स्वाभाविक रूप से हमारे पास एक अनुकूलन लक्ष्य होना चाहिए । इस तरह की स्थिति में एक सामान्य स्वामित्व की कुल लागत को कम करना होगा ।

यदि आप मानते हैं कि तीसरे पक्ष के घटक को जोड़ने से लंबे समय में लागत की बचत होगी, तो आपको इसका उपयोग करना चाहिए। यदि आप नहीं करते हैं, तो आपको नहीं करना चाहिए। सुनिश्चित करें कि आप चल रहे रखरखाव की लागत पर विचार करते हैं (उदाहरण के लिए, जब O / S का नया संस्करण जारी किया जाता है, या सुरक्षा दोष पाया जाता है, या कुछ नया W3C विनिर्देश जारी किया जाता है)।

कई तुच्छ समस्याओं के लिए, अपने स्वयं के बढ़ने के लिए यह कम लागत होगी, लेकिन आपके संगठन की मुख्य योग्यता के बाहर मामूली जटिल समस्याओं के लिए, अक्सर तीसरे पक्ष को जाने का कोई मतलब नहीं होगा।

अन्य लक्ष्यों पर भी विचार करना है (जैसे जोखिम) लेकिन TCO बड़ा है।


1
मुझे लगता है कि इस उत्तर को और अधिक बढ़ाने की जरूरत है। - पुस्तकालयों के साथ दीर्घकालिक विश्वसनीयता एक बड़ी समस्या हो सकती है। और यहां तक ​​कि अगर एक पुस्तकालय मौजूद है, तो कौन जानता है कि एपीआई बदल जाएगा? पुस्तकालय अल्पावधि में आसान होते हैं, लेकिन दीर्घकालिक में समस्याएं पैदा कर सकते हैं। (साइड नोट: स्रोत कोड के रूप में पुस्तकालयों में से कुछ समस्याओं को कम करते हैं।)
डेटॉलसीएम

6
@DetlevCM उत्तर भी कह रहा है कि यह बहुत आसानी से दूसरे रास्ते पर जा सकता है। Nontrivial पुस्तकालयों के रखरखाव की लागत उनसे जुड़ी होगी जो आपको पुस्तकालय के एक उपयोगकर्ता के रूप में भुगतान करने की आवश्यकता नहीं है, और संभवत: यदि आपको (यदि आप पुस्तकालय के मालिक थे तो) भुगतान नहीं कर पाएंगे।
घन

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

36

बिल गेट्स ने एक बार प्रसिद्ध कहा था:

"कोड की पंक्तियों द्वारा प्रोग्रामिंग प्रगति को मापना वजन द्वारा विमान निर्माण प्रगति को मापने जैसा है।"

यह उद्धरण दिमाग में आता है क्योंकि पुस्तकालयों की संख्या के लिए भी यही कहा जा सकता है। एक नियम के रूप में, मैं पुस्तकालयों का उपयोग नहीं करता जब तक कि:

  1. इसे पूरा करने का कोई और तरीका नहीं है। समय पर और बजट पर उत्पाद का उत्पादन करने के बिना आर्थिक रूप से व्यवहार्य नहीं होगा।
  2. यह मुझे समय का एक महत्वपूर्ण हिस्सा बचा लेगा क्योंकि मुझे उक्त पुस्तकालय की कई विशेषताओं की आवश्यकता होगी
  3. पुस्तकालय अच्छी तरह से उपयोग किया जाता है और किसी भी संभावित समस्याओं को मैं अच्छी तरह से प्रलेखित कर सकता हूं।

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

सौभाग्य!


4
@BillalBegueradj सार्थक बोली, हाँ। पर्याप्त, नहीं। हम प्रगति के बारे में बात नहीं कर रहे हैं, हम सॉफ्टवेयर की गुणवत्ता के बारे में बात कर रहे हैं, और कोड की लाइनों में पाया दोषों की संख्या के लिए एक बहुत मजबूत सहसंबंध है। पेपर देखें ऑब्जेक्ट-ओरिएंटेड मेट्रिक्स की वैधता पर कक्षा के आकार का जटिल प्रभाव जो अन्य सभी मैट्रिक्स से पता चलता है कि एलओसी द्वारा समायोजित करने के बाद पाए गए दोषों पर कोई भविष्य कहनेवाला शक्ति नहीं है, जिसका अर्थ है कि एलओसी दोषों के लिए सबसे अच्छा पूर्वसूचक है (या उस समय था: 2001)। और, वैसे, वैज्ञानिक कागज प्रसिद्ध उद्धरण धड़कता है।
थरोट

5
@ थेरोट आप सुझाव दे रहे हैं कि चूंकि लाइनों की संख्या उन दोषों की संख्या निर्धारित करती है जिनमें बड़े कार्यक्रमों में छोटे कार्यक्रमों की तुलना में कोड गुणवत्ता बदतर होती है? मैं आपकी मीट्रिक से सहमत नहीं हूँ, क्षमा करें। इसके अलावा, यदि बोली वास्तव में आपको परेशान करती है, तो अनदेखा करने के लिए स्वतंत्र महसूस करें।
नील

3
@ स्पष्ट होने के लिए, लाइनों की संख्या दोषों की संख्या निर्धारित नहीं करती है, इसमें दोषों की संख्या के साथ एक मजबूत संबंध है। यह समझना आसान है: कोड जितना बड़ा होगा, दोषों के लिए उतनी ही अधिकताएं पेश की जाएंगी। निश्चित रूप से, दोष की संख्या कम हो जाएगी जब वे पाए जाते हैं और तय हो जाते हैं। यह सब के बाद ही सहसंबंध है। परिशिष्ट: LOC कई सामान्य मैट्रिक्स को धड़कता है, विवरण के लिए कागज देखें।
थारोट

5
@ थरोट मेरा तर्क पंक्तियों की संख्या के दोषों के सहसंबंध के साथ नहीं था। मेरा तर्क खराब कोड गुणवत्ता के बराबर दोषों की सरासर संख्या के साथ था। क्रोम में वर्षों से दोषों का अपना हिस्सा रहा है, लेकिन मैं किसी भी दावे की वैधता का तर्क दूंगा जो यह बताता है कि यह गीथब पर बुरी तरह से लिखे गए 10-लाइन jQuery प्लगइन से भी बदतर है।
नील

3
@ थरोट "वैज्ञानिक कागज प्रसिद्ध उद्धरण धड़कता है।" - ऐसा लगता है कि आपका पेपर वास्तव में इसे धड़कने के बजाय उद्धरण का समर्थन करता है ...
npostavs

14

(नोट: मूल प्रश्न यह था: क्या पुस्तकालयों की संख्या कोड गुणवत्ता में सुधार करती है?)

आप शायद यह जवाब दे सकते हैं कि आपके लिए एक: नहीं, निश्चित रूप से पुस्तकालयों का उपयोग करने का मात्र तथ्य आपके कोड में सुधार नहीं करता है। यदि यह किया जाता है, तो बिना किसी प्रयास के हर चीज के लिए महान कोड लिखना आसान होगा।

जब लोग रोल-ओन-ओन करने की सलाह देते हैं, तो इसका मतलब यह है कि एक अच्छी तरह से ज्ञात पुस्तकालय में कोड शायद अधिक सही, कुशल और / या प्रयोग करने योग्य है जो आप स्वयं के साथ आएंगे, सिर्फ इसलिए कि लेखकों ने अधिक समय बिताया है आप की तुलना में कार्यक्षमता के एक विशेष क्षेत्र पर (संपूर्ण परियोजना के लिए आपकी समय सीमा के साथ) खर्च कर सकते हैं।

लेकिन यह केवल एक प्रवृत्ति है, एक कानून नहीं है। निश्चित रूप से ऐसे पुस्तकालय हो सकते हैं जो रोल के रूप में उपयोग करने के लिए उतने उपयोगी नहीं हैं-आपका अपना होगा। अक्सर ऐसा होता है जब पुस्तकालय वास्तव में आपकी ज़रूरत से ज़्यादा करता है, और इसे इस तरह से करता है जो आपको अपने स्वयं के कोड आधार को उनके सम्मेलनों के लिए अनुकूल करने के लिए मजबूर करेगा, जो कि उचित है। ऐसा लगता है जैसे यह वही है जो आपने इस उदाहरण में पाया है।


4

सही पुस्तकालयों का उपयोग करते समय आप बहुत सारे काम बचा सकते हैं, बहुत सी छिपी हुई लागत भी है:

  • पुस्तकालयों को अद्यतित रखने की आवश्यकता है। आपको नियमित रूप से जांचने की ज़रूरत है कि क्या उन्हें अपडेट मिला (जो सुरक्षा-प्रासंगिक हो सकता है!) और उन्हें लागू करें। प्रत्येक लाइब्रेरी अपडेट संभवतः आपके एप्लिकेशन में कुछ तोड़ सकता है। इसका मतलब है कि आपको बाद में पूर्ण एकीकरण परीक्षण करने की आवश्यकता है। इसलिए प्रत्येक पुस्तकालय आपकी परियोजना लंबी अवधि के रखरखाव के ऊपरी हिस्से पर निर्भर करती है।
  • कुछ जावास्क्रिप्ट पुस्तकालय इतने शक्तिशाली हैं और इस तरह के अनूठे पैटर्न का उपयोग करते हैं कि लोग उन्हें विशेषज्ञता के अलग-अलग तकनीकी क्षेत्रों के रूप में समझना शुरू करते हैं। इसलिए आपके द्वारा जोड़े गए प्रत्येक अतिरिक्त पुस्तकालय उन डेवलपर्स को डरा सकते हैं जो आत्मविश्वास से भरे संपादन कोड को महसूस नहीं करते हैं, जो एक ऐसे ढांचे पर निर्भर करते हैं जिनसे वे परिचित नहीं हैं। नए रखरखाव प्रोग्रामर को किराए पर लेना जो आपके द्वारा उपयोग किए जाने वाले सभी पुस्तकालयों से परिचित हैं, चुनौतीपूर्ण हो सकते हैं।
  • अपनी वेबसाइट पर लाइब्रेरी जोड़ने से लोडिंग-टाइम्स बढ़ जाता है, क्योंकि उपयोगकर्ता को पूरी लाइब्रेरी लोड करने की आवश्यकता होती है, भले ही आप इसका एक छोटा सा हिस्सा ही इस्तेमाल करें। या और भी बदतर डाउनलोड कस्टम केवल कार्यक्षमता आप की जरूरत के साथ बनाता है करने के लिए कुछ लोकप्रिय पुस्तकालयों आप अनुमति देते हैं, लेकिन फिर भी आप अभी भी है जो कभी नहीं चलेंगे कोड का एक बहुत आम तौर पर शामिल होंगे (: कोड है जो करता है चलाने के लिए, लेकिन कुछ भी उपयोगी नहीं करता है, क्योंकि यह सिर्फ कार्यक्षमता के लिए डेटा-संरचना तैयार करता है जिसका आप उपयोग नहीं करते हैं)।

तो इससे पहले कि आप अपनी परियोजना में एक और निर्भरता जोड़कर कुछ ऐसा शामिल करें जिसे आप स्वयं लिख सकें, एक लागत / लाभ विश्लेषण करें।


और उस विश्लेषण को दोहराएं जब आपके पास वास्तव में वास्तविक डेटा हो। आपने लागत को कम करके आंका हो सकता है / लाभ को कम करके आंका हो, या स्थिति बदल सकती है।
Deduplicator

1

यह एक द्विआधारी निर्णय की जरूरत नहीं है: या तो केवल एक ओएसएस पुस्तकालय का उपयोग करें, या खरोंच से एक नया समाधान प्रोग्राम करें। एक अन्य विकल्प पुस्तकालय के कुछ हिस्सों को फिर से उपयोग करने का हो सकता है, अगर लाइसेंस इसकी अनुमति देता है।

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


0

अगर किसी ने आपके लिए काम पहले ही कर दिया है, तो बेशक आपको इसका इस्तेमाल करना चाहिए।

नियम का अपवाद जावास्क्रिप्ट है। जहां उन्होंने एक दर्जन अन्य पुस्तकालयों (पाठ्यक्रम के अप्रचलित संस्करण) का आयात किया होगा, वे उन भाषा सुविधाओं को जोड़ने के लिए जो वे उपयोग करना चाहते हैं और फिर आपके लिए काम किया।

अपनी रूपरेखा चुनें और उसके भीतर रहें। यदि लाइब्रेरी आपके ढांचे या सादे जेएस के साथ काम करती है, तो ठीक है। लेकिन अगर इसे एक अलग रूपरेखा की आवश्यकता है, तो दूसरे विकल्प की तलाश करें।


4
यहाँ बहुत सारे जावास्क्रिप्ट प्रशंसक हैं
FCin

0

पुस्तकालय और उनका उपयोग कब करना एक जटिल निर्णय है।

एक तरफ आपने अच्छी तरह से परीक्षण किया है, लगभग मानक चीजें (मेरे क्षेत्र में, उदाहरण के लिए एफएफटीडब्ल्यू इस श्रेणी में आती हैं, या कुछ ऐसे लिबासफाइल हैं), जिन्हें आमतौर पर सिर्फ काम करने के लिए स्वीकार किया जाता है, और पिछले 20 वर्षों से मानक चीजें हैं हर कोई उपयोग करता है

दूसरी ओर आपके पास गितुब से यादृच्छिक सामान है, जिसमें कोई परीक्षण सूट नहीं है और केवल 1 अनुरक्षक के बारे में है, आम तौर पर परेशान क्यों होते हैं?

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

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

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

दिन का अंत यह एक निर्णय है जो स्वाद और अनुभव के लिए नीचे आता है, और यहां तक ​​कि अनुभवी कभी-कभी खराब उठाते हैं, अभी भी कम से कम एक पुस्तकालय के साथ, आप हमेशा इसे फाड़ सकते हैं और अपने स्वयं के कार्यान्वयन को लिख सकते हैं यदि यह बहुत कष्टप्रद है।

निर्णय निर्णय....

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