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