अभ्यास में सुधार के सुझाव देना

अभ्यास में सुधार सुझाने से पहले किन बातों का ध्यान रखें


तो आपको किसी अभ्यास में कुछ ऐसा दिखा है जिसे आप बेहतर बनाना चाहते हैं। सबसे पहले, यह परवाह दिखाने के लिए और हमें बताने का समय निकालने के लिए धन्यवाद! 💙

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

लेकिन उससे पहले, कुछ सामान्य बातें हैं जिन पर ध्यान देना चाहिए।

अभ्यास बदलने के कई परिणाम होते हैं

किसी अभ्यास को बदलने के काफी परिणाम होते हैं:

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

इन सभी कारणों से हम बहुत सावधानी बरतते हैं और सिर्फ उन्हीं अभ्यासों को बदलते हैं जहाँ कोई स्पष्ट और पहचानने लायक लाभ दिखता है।

अव्यवस्था की ओर बढ़ने से बचिए

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

लर्निंग अभ्यास

लर्निंग अभ्यास एक ही उद्देश्य से बनाए जाते हैं: कॉन्सेप्ट सिखाना। किसी अभ्यास में किए जाने वाले हर बदलाव को सबसे पहले इस बात पर परखा जाता है कि वह कॉन्सेप्ट सिखाने को बेहतर बनाता है या नहीं।

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

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

प्रैक्टिस अभ्यास

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

अभ्यासों में बदलाव का यह भी मतलब हो सकता है कि सिलेबस में उनसे जुड़े कॉन्सेप्ट उलझ जाएँ, या फिर अभ्यास को हल करने के लिए अतिरिक्त फीचर चाहिए हों, जिससे यह भी बदल जाता है कि वे कब अनलॉक होते हैं। बदलाव स्वीकार करने से पहले सभी ट्रैकों में इस पर भी विचार करना पड़ता है।

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

अपने बदलावों को स्वीकृति कैसे दिलाएँ

हालाँकि ऐसे बहुत से कारण हैं जिनकी वजह से हम सुझाव नहीं स्वीकार करते, लेकिन बहुत बार लोग ऐसे शानदार विचार लेकर आते हैं जिन्हें हम स्वीकार कर लेते हैं!

जो बदलाव बात को और साफ बनाते हैं, उनके लिए हम लगभग हमेशा तैयार रहते हैं, खासकर लर्निंग अभ्यासों में।

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

  • यह बदलाव जो ठोस सुधार लाएगा (सबसे अच्छा होगा कि कोड के उदाहरण भी दें, जो दिखाएँ कि आपका बदलाव क्या संभव बनाता है और क्या रोकता है)।
  • मौजूदा हलों पर इसका क्या असर पड़ेगा, और यह क्यों करने लायक है।
  • सिखाए जाने या इस्तेमाल किए जाने वाले कॉन्सेप्ट में कोई बदलाव हो तो वह।
  • यह समझ कि चीज़ें जैसी हैं, वैसी क्यों हैं। (कृपया Chesterton's Fence पर हमारी पोस्ट पढ़िए।)

और याद रखिए, राय को राय की तरह और तथ्यों को तथ्यों की तरह रखिए। इससे सबसे ज़्यादा काम की बातचीत होती है।

सुझाव देने का समय निकालने और यह दस्तावेज़ पढ़ने के लिए एक बार फिर धन्यवाद!