दिलचस्प पोस्ट
सफारी में CSS3 एनीमेशन काम नहीं कर रहा है गैर-सदस्य का उपयोग सी ++ 11 में शुरू और अंत का उपयोग क्यों करें? जावास्क्रिप्ट का उपयोग कर यूआरएल में आप # हश के लिए कैसे जांच सकते हैं? IOS5 पर "kCTMessageReceivedNotification" सूचना प्राप्त करते समय संदेश कैसे प्राप्त करें एंटीवायरस मेरे निष्पादन योग्य में गलत सकारात्मक जावा: कोई सुरक्षा प्रबंधक नहीं: आरएमआई वर्ग लोडर अक्षम पता लगाने के तरीके कि क्या सी ++ वर्चुअल फ़ंक्शन को एक व्युत्पन्न कक्षा में बदल दिया गया है या नहीं जावा स्थिर प्रारंभिक आदेश जीसीसी, स्ट्रैफिकेशन और इनलाइन जीएलएसएल? sqlite3.ऑपरेशन त्रुटि: निकट "?": सिंटैक्स त्रुटि यूनिकोड को MySQL में कैसे स्टोर करना है? JQuery के AJAX का उपयोग करके PHP फ़ंक्शन कॉल करें संकल्प एक दूसरे के बाद वादे (यानी अनुक्रम में)? जावास्क्रिप्ट / HTML5 में एक्सेल फाइल को कैसे पार्स करना है LINQ – क्वेरी वाक्यविन्यास बनाम विधि श्रृंखला और लैम्ब्डा

कोड की "कॉपी और पेस्ट" खतरनाक क्यों है?

कभी-कभी, मेरे मालिक हमसे शिकायत करेंगे:

एक सुविधा को लागू करने के लिए हमें इतने लंबे समय की आवश्यकता क्यों है?

दरअसल, इस सुविधा को पहले एक और आवेदन में लागू किया गया है, आपको वहां से कोड को कॉपी और पेस्ट करना होगा लागत कम होना चाहिए

यह वास्तव में एक कठिन प्रश्न है, क्योंकि कॉपी और पेस्ट कोड मेरी दृष्टि में ऐसी कोई साधारण बात नहीं है

क्या आपके पास अपने गैर-तकनीकी मालिकों को इसकी व्याख्या करने के लिए कोई अच्छा कारण है?

Solutions Collecting From Web of "कोड की "कॉपी और पेस्ट" खतरनाक क्यों है?"

यदि आपको अपनी कॉपी-पेस्ट कोड में कोई बग मिल गया है, तो आपको उसे हर जगह ठीक करना होगा और आशा है कि आप उन सभी को याद कर सकते हैं (यह भी परिवर्तित आवश्यकताओं के लिए रखती है)।

यदि आप एक ही स्थान पर तर्क रखते हैं, तो आवश्यक होने पर बदलना आसान होता है (इसलिए यदि आप तय करते हैं कि एप्लिकेशन को अपडेट करने की आवश्यकता है, तो आप इसे केवल एक ही स्थान पर कर सकते हैं)।

अपने बॉस को DRY सिद्धांत के बारे में पढ़ा है (खुद को दोहराएं मत)

क्या आप ध्वनि का वर्णन कर रहे हैं जैसे पुस्तकालयों के लिए सही इस्तेमाल की तरह, जहां आप कोड साझा करते हैं और केवल एक ही स्थान पर रखते हैं

मैं केवल तभी कॉपी-पेस्ट कोड करता हूं अगर मैं इसे तुरंत बाद पुनरिक्षण करना चाहता हूं – यह सुनिश्चित करने के बाद कि मैं बाद में सामान्य कोड निकाला, ताकि मैं जितना संभव हो सके उतना तर्क पुन: उपयोग कर सकूं। और इसके तुरंत बाद, मेरा मतलब है मिनट और घंटे बाद, दिन और सप्ताह नहीं।

कॉपी और पेस्ट का उपयोग कर कोड की प्रतिलिपि बनाने के बजाय आप लाइब्रेरी बनाकर कोड को बांटने से बेहतर होगा।

आपको अभी भी पुनः लिखने पर एक गति लाभ मिलेगा (सूखा देखें), लेकिन कोड बनाए रखने के लिए केवल एक स्थान होगा।

स्पष्ट कारण यह है कि आप भविष्य के लिए एक 'ऋण' लेते हैं: किसी भी परिवर्तन को आपको कभी भी कोड में बनाने की ज़रूरत है (न केवल बग निर्धारण, कोई भी परिवर्तन) अब दो बार जितना महंगा होगा क्योंकि आपको दो जगहों को अपडेट करना होगा – और अधिक जोखिम भरा है क्योंकि आप अंततः उनमें से एक को भूल जाएंगे। दूसरे शब्दों में, इसे तेजी से काम करना अब भविष्य में आपके काम को धीमा कर देगा, जो कि अच्छी व्यावसायिक समझ हो सकती है लेकिन आमतौर पर नहीं है।

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

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

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

  • "ज़रूर, मुझे पहले से कोड मिल गया है जो वास्तव में ऐसा करता है!"
  • "रुको, कोड के इन पांच संस्करणों में से कौन सा एक है जिसे मैं अपने स्रोत के रूप में उपयोग करना चाहता हूं?"
  • "हम्म्, ये सभी 'यूट_फंक्स -2013' कार्यों क्या करते हैं? क्या मैंने उन्हें दस्तावेज नहीं बनाया? उनमें से मुझे अब क्या चाहिए?"
  • "ओह, हाँ, यह कोड कोड बेस वाई का उपयोग करता है। मुझे लगता है कि [ एक का चयन करें: मेरी नई परियोजना में कोड बेस वाई की प्रतिलिपि बनाएँ / एक दिन का खर्च करें जो मैं कोड बेस वाई से चाहता हूं / एक सप्ताह खर्च करता हूं। एक समारोह जो मुझे कोड बेस वाई से चाहिए)। "
  • "मैंने सब कुछ कॉपी किया, यै!"
  • "यह काम क्यों नहीं कर रहा है?"
  • यह वह बिंदु है जहां आप उस कोड को लिखने के बजाय जो आप वास्तव में शुरू करना चाहते हैं, लिखने के बजाय मौजूदा कोड डीबग करने के घंटे / दिन / सप्ताह खर्च करते हैं

संक्षेप में, मौजूदा कोड जो सीधे उपयोग नहीं किया जा सकता है, सबसे अच्छी तरह से, समान कोड लिखने के लिए एक अच्छा संदर्भ के रूप में सेवा कर सकते हैं। यह निश्चित रूप से पूरे नहीं उठाया जा सकता है और पूरी तरह से अलग प्रणाली में काम करने की उम्मीद है। सामान्य तौर पर, यह एक सुरक्षित धारणा है कि लिखित और पूर्ण होने वाला कोई भी कोड संभवतः जितना संभव हो उतना ही गड़बड़ किया जाना चाहिए – तब भी जब यह एक प्रति है और मूल स्वयं नहीं है

यदि आप कॉपी-चिपकाने पर अपना प्रोजेक्ट बेस करना चाहते हैं, तो आपको उस तरीके से शुरू करने के लिए कोड मिल गया है जो आसानी से पुनः उपयोग करने में सक्षम होगा, उस मूल कोड की प्रतिलिपि बनाने और इसके साथ घूमने के बिना । यह करने योग्य है, और अगर यह आपके बॉस की अपेक्षा कर रहा है, तो आपको दोनों को यह सुनिश्चित करने की आवश्यकता है कि आप जिस तरह से पहली जगह पर डिज़ाइन और काम करते हैं

प्रतिलिपि बनाने और चिपकाने के लिए होने वाली एक आपदा है। आपके बॉस को जल्द ही अंत उपयोगकर्ता को भेज दिया गया कोड टूटने की कीमत के संबंध में शिपिंग की कीमत का मूल्यांकन करना चाहिए।

यदि आपने पहले से ही सुविधाएं लागू की हैं और उन्हें कॉपी और पेस्ट करने की आवश्यकता है, तो ऐसा लगता है कि आपने कुछ गलत किया है क्या आप इन सुविधाओं को एक पुस्तकालय में नहीं डाल सकते हैं ताकि आप उन्हें प्रतिलिपि / पेस्ट के बिना पुन: उपयोग कर सकें?

शुष्क सिद्धांत (दोहराएं न दोहराएं): विकिपीडिया पर शुष्क ।

"ज्ञान के प्रत्येक टुकड़े में एक एकल, स्पष्ट, एक प्रणाली के भीतर आधिकारिक प्रतिनिधित्व होना चाहिए।"

अन्य लिंक

यह मेरे लिए सबसे खराब ग़लतफ़हमी है जैसे आपके गैर-तकनीकी मालिक हैं, यह है कि आपका काम मुख्य रूप से टाइप करना है उन्हें लगता है कि आप टाइपिंग को नष्ट करके बहुत समय बचा सकते हैं

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

ज़रूर, टाइपिंग को समाप्त करने से कुछ समय बचा होगा। लेकिन फिर बहुत बड़ा, गैर-टाइपिंग, आपकी नौकरी का हिस्सा बड़ा हो जाता है और किसी भी समय की बचत और ज्यादा खाती है।

क्या आप सुनिश्चित हैं कि आपका बॉस सूखा सिद्धांत, बग और अन्य तकनीकी सामान के बारे में सुनना चाहता है?

उस तरह की टिप्पणियां जो आप आमतौर पर सुनते हैं जब आपके बॉस या कंपनी को कुछ परियोजना को पूरा करने के लिए समय को कम करके आंका गया। और गलत अनुमान के आधार पर एक अनुबंध पर हस्ताक्षर किए गए थे, आदि। ज्यादातर मामलों में प्रोग्रामर अनुमानों में शामिल नहीं थे।

ऐसा क्यूँ होता है? कभी-कभी परियोजना प्रायोजक में बहुत छोटा बजट होता है। हो सकता है कि आपके द्वारा सॉफ़्टवेयर का उपयोग करने के लिए स्वचालित रूप से एक व्यावसायिक प्रक्रिया आपकी टीम के प्रयासों के लायक नहीं है प्रबंधकों को आमतौर पर ऐसे मामलों में बुरी खबरों के लिए बहुत बंद किया जाता है। परियोजना की शुरुआत में इच्छाशक्ति की सोच है तब प्रबंधक प्रोग्रामर्स को दोष देने का प्रयास करते हैं। आपके मामले में अप्रत्यक्ष रूप से प्रति-पेस्ट के माध्यम से। चरम मामलों में यह एक मौत मार्च कहा जाता है ।

कोड को कॉपी और चिपकाने से आमतौर पर संयोग द्वारा प्रोग्रामिंग की ओर जाता है

मुझे लगता है कि " अन्य एप्लिकेशन " यहां कुंजी है, यदि अन्य एप्लिकेशन को पहले ही परीक्षण और उपयोग में किया गया है, तो उसे एक सामान्य लाइब्रेरी का उपयोग करने के लिए नहीं बदला जाना चाहिए, इसलिए आप इसके साथ कोड साझा नहीं कर सकते।

एक ही आवेदन के भीतर, "कॉपी और पेस्ट" खराब है, लेकिन कोड बेस के बीच जो अलग-अलग टीमों द्वारा विकसित होते हैं या अलग-अलग जारी चक्रों के साथ "कॉपी और पेस्ट" सबसे अच्छा विकल्प हो सकते हैं

मैंने एक समान कंपनी के लिए काम किया एक प्रशिक्षु होने के नाते, मुझे बेहतर नहीं पता था, इसलिए जब मैंने एक नई परियोजना शुरू की तो मेरे मालिक ने कोड को कहीं और से चिपकाने का सुझाव दिया। ठीक है, जैसा कि आप सोच सकते हैं, पूरे सॉफ़्टवेयर काफी गड़बड़ी थी, इस बात पर कि जब आप किसी बग को ठीक करने की कोशिश करेंगे, तो दो नई बग दिखाई देंगे।

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

एक पुस्तकालय में प्रश्न में कोड को सम्मिलित करना सम्मोहक होता है, लेकिन यह अन्य सिस्टम के निर्माण के आधार पर, यह ध्वनि की तुलना में अधिक कठिन हो सकता है। उदाहरण के लिए उस सुविधा का कोड निकालना कठिन हो सकता है क्योंकि यह बहुत से अन्य कोडों को अशुद्ध तरीके से इंटरफेस करता है (उदाहरण के लिए बहुत से वैश्विक चर आदि का उपयोग करके)

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

आपके सामने तत्काल कार्यक्षमता के विकास की गति के बीच ट्रेड-ऑफ हैं (विशेष रूप से जब आवेदन छोटा होता है), और आवेदन बढ़ता है तो लंबे समय तक रखरखाव लागत।

कॉपी और पेस्ट तेज कार्यक्षमता के लिए तेज़ हो जाता है, लेकिन आप की कीमत बहुत अधिक होगी, क्योंकि आवेदन में आकार बढ़ता है, बग फिक्सिंग और सिस्टम में व्यापक परिवर्तन और आवेदन के विभिन्न घटकों के बीच कार्यप्रवाह बनाए रखने के मामले में।

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

वह सही है कि यदि टीम ने इसी तरह की कार्यक्षमता लागू की है, तो दोहराए जाने से यह दूसरी बार आसान हो जाएगा।

हालांकि, आपको शायद यह समझा जाना चाहिए कि प्रत्येक आवेदन अलग है सिर्फ इसलिए कि आप एक घर में एक दरवाज़ा लगाया है इसका मतलब यह नहीं है कि आप किसी समय में दूसरे घर में किसी दूसरे दरवाजे को स्थापित कर सकते हैं – आप अनुभव (# दरवाजे स्थापित) की वजह से तेज़ी से होंगे, लेकिन अब भी आपको उपकरण प्राप्त करने में समय लगेगा , दरवाजा माउंट, सुनिश्चित करें कि यह साहुल है, और फ्रेम में इसे स्क्रू।

हाँ, सबसे बड़ी समस्या यह है कि यह सिर्फ कॉपी और पेस्ट नहीं है – इसकी कॉपी तो पेस्ट करें और थोड़ा संशोधित करें

फिर बाद में जब चिपकाए हुए संस्करणों में से कोई एक समस्या है, तो इसे बदल दिया जाता है फिर बाद में, एक और संस्करण बदल जाता है।

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

और आप इसे नहीं जानते, इस प्रकार की भद्दी कोडिंग आमतौर पर टिप्पणियों के लगभग पूरी तरह से शून्य है।

मेरे लिए, अंतर यह है कि जब आपके पास कोड की एक से अधिक प्रतियां एक जैसी होती हैं, तो आपके पास क्या कोड का गुच्छा है जब आपके पास केवल एक विशेष प्रकार का कोड होता है, तो आपके पास एक सिस्टम है

किसी सिस्टम के व्यवहार को एकल बिंदु संशोधनों के साथ बहुत आसानी से बदला जा सकता है – कोड के एक गुच्छा के व्यवहार को बदलने के लिए कोड का एक गुच्छा आवश्यक है।

मुझे सिस्टम पसंद है, कोड का कोई गुच्छा नहीं।

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