इसलिए कुछ डेवलपर्स / प्रबंधक चीजों को प्राप्त करने के लिए कम कोड लिखने में मूल्य देखते हैं ताकि हमारे पास बनाए रखने के लिए कम कोड हो
यह वास्तविक लक्ष्य पर दृष्टि खोने का मामला है।
क्या मामलों में विकास पर खर्च घंटे कम है । यह समय (या समतुल्य प्रयास) में मापा जाता है, कोड की लाइनों में नहीं।
यह कहने की तरह है कि कार निर्माताओं को अपनी कारों को कम शिकंजा के साथ बनाना चाहिए, क्योंकि प्रत्येक स्क्रू को लगाने के लिए एक गैर-शून्य राशि का समय लगता है, जबकि यह उचित रूप से सही है, कार का बाजार मूल्य कितने स्क्रू से परिभाषित नहीं होता है। या नहीं है। इन सबसे ऊपर, एक कार को प्रदर्शन, सुरक्षित और बनाए रखने के लिए आसान होना चाहिए।
बाकी जवाब इस बात के उदाहरण हैं कि स्वच्छ कोड कैसे समय के लाभ को जन्म दे सकता है।
लॉगिंग
एक आवेदन (ए) लें जिसमें कोई लॉगिंग नहीं है। अब एप्लिकेशन B बनाएं, जो एक ही एप्लिकेशन A है लेकिन लॉगिंग के साथ। बी में हमेशा कोड की अधिक लाइनें होंगी, और इस तरह आपको अधिक कोड लिखना होगा।
लेकिन बहुत समय के लिए मुद्दों और कीड़ों की जांच में डूब जाएगा, और यह पता लगाएगा कि क्या गलत हुआ।
आवेदन ए के लिए, डेवलपर्स कोड को पढ़ते हुए अटक जाएंगे, और समस्या के स्रोत को खोजने के लिए कोड के माध्यम से समस्या और कदम को लगातार पुन: उत्पन्न करने के लिए होंगे। इसका मतलब यह है कि डेवलपर को निष्पादन की शुरुआत से अंत तक, प्रत्येक उपयोग की गई परत में परीक्षण करना होगा, और तर्क के हर उपयोग किए गए टुकड़े का निरीक्षण करना होगा।
हो सकता है कि वह तुरंत इसे पाने के लिए भाग्यशाली हो, लेकिन शायद जवाब आखिरी जगह पर होगा जो वह देखने के बारे में सोचता है।
एप्लिकेशन बी के लिए, पूर्ण लॉगिंग को मानते हुए, एक डेवलपर लॉग का निरीक्षण करता है, तुरंत दोषपूर्ण घटक की पहचान कर सकता है, और अब जानता है कि कहां देखना है।
यह मिनट, घंटे या दिनों की बचत के मामले में हो सकता है; कोडबेस के आकार और जटिलता के आधार पर।
प्रतिगमन
एप्लिकेशन A लें, जो DRY-friendly बिल्कुल नहीं है।
अनुप्रयोग B को लें, जो DRY है, लेकिन अतिरिक्त सार के कारण अधिक लाइनों की आवश्यकता समाप्त हो गई है।
एक परिवर्तन अनुरोध दायर किया जाता है, जिसे तर्क में बदलाव की आवश्यकता होती है।
आवेदन बी के लिए, डेवलपर परिवर्तन अनुरोध के अनुसार (अद्वितीय, साझा) तर्क बदलता है।
आवेदन ए के लिए, डेवलपर को इस तर्क के सभी उदाहरणों को बदलना होगा, जहां वह इसे उपयोग किए जाने को याद रखता है।
- यदि वह सभी उदाहरणों को याद रखने का प्रबंधन करता है, तो उसे अभी भी कई बार उसी बदलाव को लागू करना होगा।
- यदि वह सभी उदाहरणों को याद रखने का प्रबंधन नहीं करता है, तो आप अब एक असंगत कोडबेस के साथ काम कर रहे हैं जो स्वयं विरोधाभासी है। यदि डेवलपर कोड के शायद ही कभी इस्तेमाल किए गए टुकड़े को भूल गया, तो यह बग अंत उपयोगकर्ताओं के लिए भविष्य में भी स्पष्ट नहीं हो सकता है। उस समय, क्या अंतिम उपयोगकर्ता यह पहचानने जा रहे हैं कि समस्या का स्रोत क्या है? यदि ऐसा है तो भी, डेवलपर को यह याद नहीं रह सकता है कि परिवर्तन क्या हुआ, और यह पता लगाना होगा कि तर्क के इस भूले हुए टुकड़े को कैसे बदलना है। हो सकता है कि तब तक डेवलपर कंपनी में काम न करे, और फिर किसी और को अब इसे खरोंच से निकालने का प्रयास करना होगा।
इससे भारी समय बर्बाद हो सकता है। सिर्फ विकास में नहीं, बल्कि शिकार और बग को खोजने में। एप्लिकेशन एक ऐसे तरीके से व्यवहार करना शुरू कर सकता है जिसे डेवलपर्स आसानी से समझ नहीं सकते हैं। और इससे लंबी डिबगिंग सेशन होगी।
डेवलपर की परिवर्तनशीलता
डेवलपर ए निर्मित एप्लिकेशन ए। कोड साफ नहीं है और न ही पठनीय है, लेकिन यह एक आकर्षण की तरह काम करता है और उत्पादन में चल रहा है। अप्रत्याशित रूप से, कोई प्रलेखन भी नहीं है।
डेवलपर A छुट्टियों के कारण एक महीने के लिए अनुपस्थित है। एक आपातकालीन परिवर्तन अनुरोध दायर किया जाता है। यह देव ए के लौटने के लिए एक और तीन सप्ताह इंतजार नहीं कर सकता।
डेवलपर बी को इस बदलाव को अंजाम देना है। उसे अब पूरे कोडबेस को पढ़ने की जरूरत है, यह समझें कि सब कुछ कैसे काम करता है, क्यों काम करता है, और इसे पूरा करने की कोशिश करता है। इसमें उम्र लगती है, लेकिन मान लें कि वह इसे तीन सप्ताह के समय में कर सकता है।
उसी समय, एप्लिकेशन बी (जो देव बी बनाया गया) में एक आपातकालीन स्थिति है। देव बी का कब्जा है, लेकिन देव सी उपलब्ध है, भले ही वह कोडबेस को नहीं जानता है। हम क्या करें?
- यदि हम B को A पर कार्य करते हुए रखते हैं, और C को B पर कार्य करने के लिए रखते हैं, तो हमारे पास दो डेवलपर हैं, जो नहीं जानते कि वे क्या कर रहे हैं, और कार्य उप-रूप से निष्पादित किया जा रहा है।
- यदि हम B को A से दूर करते हैं और उसे B करते हैं, और अब हम C को A पर रखते हैं, तो डेवलपर B के सभी कार्य (या इसका एक महत्वपूर्ण भाग) समाप्त हो सकते हैं। यह संभावित दिनों / हफ्तों का व्यर्थ प्रयास है।
देव ए अपनी छुट्टी से वापस आता है, और देखता है कि बी ने कोड को नहीं समझा, और इस तरह इसे बुरी तरह से लागू किया। यह बी की गलती नहीं है, क्योंकि उन्होंने सभी उपलब्ध संसाधनों का उपयोग किया, स्रोत कोड अभी पर्याप्त रूप से पठनीय नहीं था। क्या A को अब कोड की पठनीयता तय करने में समय बिताना होगा?
इन सभी समस्याओं, और कई और अधिक, समय बर्बाद करना । हां, अल्पावधि में, स्वच्छ कोड को अभी और प्रयास करने की आवश्यकता है , लेकिन यह भविष्य में लाभांश का भुगतान करना होगा जब अपरिहार्य बग्स / परिवर्तनों को संबोधित करना होगा।
प्रबंधन को यह समझने की जरूरत है कि अब एक छोटा कार्य आपको भविष्य में कई लंबे कार्यों से बचाएगा। योजना बनाने में असफ़ल होना योजना में असफ़ल होना है।
यदि हां, तो कुछ तर्क क्या हैं जिनका उपयोग मैं इस तथ्य को सही ठहराने के लिए कर सकता हूं कि अधिक एलओसी लिखे गए हैं?
मेरा गोटो स्पष्टीकरण प्रबंधन से पूछ रहा है कि वे क्या पसंद करेंगे: 100KLOC कोडबेस वाला एक आवेदन जिसे तीन महीने में विकसित किया जा सकता है, या 50KLOC कोडबेस जिसे छह महीने में विकसित किया जा सकता है।
वे स्पष्ट रूप से छोटे विकास के समय को उठाएंगे , क्योंकि प्रबंधन KLOC के बारे में परवाह नहीं करता है । केएलओसी पर ध्यान केंद्रित करने वाले प्रबंधक प्रबंधन करने की कोशिश कर रहे हैं, इसके बारे में जानकारी नहीं होने के बावजूद, माइक्रोक्रोमिंग कर रहे हैं।