हालांकि, मैं सभी नुकसानों को सूचीबद्ध नहीं कर सकता, अक्सर, एक प्रश्न तैयार करना और इसे एक आत्म-निहित समस्या में बॉक्सिंग करना अक्सर इतना काम लेता है कि जब तक आप इसे पर्याप्त रूप से तैयार करते हैं, तब तक आप अपने स्वयं के प्रश्न का उत्तर देते हैं समय से अन्यथा ले लिया होता।
मैं the५% प्रश्नों के लिए समान अनुभव करता हूं जो मैं पोस्ट करता हूं।
हालांकि, ऐसा करने के लिए परेशान नहीं करने के लिए एक तर्क नहीं है। यह प्रभावी रूप से रबर बतख डिबगिंग है। आप उन सवालों के जवाब पा रहे हैं जो आपको लगता है कि आपके सवाल के जवाब में फसल कर सकते हैं; जिसका मतलब है कि आप विभिन्न लोगों के दृष्टिकोण से समस्या के बारे में सोच रहे हैं; जिसका अर्थ है कि आप सभी संभावित दिशाओं से समस्या के बारे में सोच रहे हैं; जो दोष खोजने का सबसे अच्छा तरीका है।
सर्वोत्तम रूप से, आपने निर्णायक रूप से सिद्ध कर दिया है कि आप स्पष्ट रूप से यहां के उत्तर के बारे में नहीं सोच सकते हैं। "सबसे खराब" पर, आप अपने खुद के सवाल का जवाब देते हैं। उद्धरणों को ध्यान में रखें, क्योंकि यह बिल्कुल भी बुरा नहीं है। यह शायद थोड़ा समय अक्षम था, लेकिन समस्या को धीरे-धीरे हल करना बेहतर है जल्दी से समस्या से निपटने का निर्णय लेना । आप अंततः समस्या को हल करने में तेज़ हो जाएंगे।
इसका स्पष्ट उदाहरण:
जब मैं एक भाग जाने वाला डेवलपर था, तो मैंने ASP.Net एरोर पेज के साथ बहुत बार डील की। मुझे Google को यह पता लगाने की आवश्यकता है कि क्या गलत है। इससे पहले कि मुझे सही समाधान मिल जाए, इसमें कई घंटे लग सकते हैं। मैंने मूल रूप से पुस्तक में प्रत्येक गलती की और बाद में मुद्दों को डीबग करने के परिणामों से निपटना पड़ा।
अब, जब कोई त्रुटि सामने आती है, तो मैं पहले से ही "सामान्य संदिग्धों" को जानता हूं कि इस समस्या का कारण क्या हो सकता है। "सामान्य संदिग्धों" की मेरी मानसिक सूची प्रभावी रूप से उन समस्याओं पर आधारित है जो मैंने अपने करियर के दौरान सबसे अधिक समस्याओं के साथ की है। Googling के घंटों के समय-अक्षम पैर के काम को करने के बिना, मैंने यह मानसिक सूची कभी नहीं बनाई । लेकिन अब जब मेरे पास वह मानसिक सूची है, तो मैं समस्या निवारण में काफी तेज हूं।
इसके अलावा, जब मैं इस पर अपनी उंगली नहीं डाल सकता, तो मुफ्त बातचीत की जवाबदेही को किसी भी रूप में पाठ्य इंटरनेट की चर्चा से मेल नहीं खा सकता है।
मैं यहां कुछ असहमत हूं। आप सही कह रहे हैं कि इंटरनेट संचार कम उत्तरदायी है, लेकिन आप (मेरी राय में) गलत हैं कि यह आपके लिए बुरा है।
एक अकेला डेवलपर के रूप में, आप रबर बतख डिबगिंग पर निर्भर होंगे। आरडीडी काम करने के लिए महत्वपूर्ण घटक यह है कि आप उन प्रश्नों का अनुमान लगाते हैं जो आपके लिए रबर बतख हो सकते हैं। आप स्पष्ट रूप से इस बात पर भरोसा नहीं कर सकते हैं कि रबर बतख वास्तव में क्या कहता है।
धीमी संदेश प्रणालियों के साथ काम करते समय (StackOverflow पर पोस्ट करना या पत्र लिखकर संवाद करना), आपको यह सुनिश्चित करने के लिए स्वाभाविक रूप से प्रोत्साहित किया जाता है कि आप इसे पहली बार सही समझें। क्योंकि गलती को सुधारने के लिए धीमी और कठिन प्रक्रिया होगी।
तुलना करके, उस तेज संदेश प्रणाली (वार्तालाप, त्वरित संदेश) पर विचार करें, आप तुरंत कुछ ठीक कर सकते हैं । किसी चीज को जल्दी ठीक करने की क्षमता लोगों को यह सुनिश्चित करने के लिए कम प्रोत्साहन देती है कि यह सही है।
बिंदु में चार मामले:
- जब मैं एक डेवलपर के रूप में अपना व्यक्तिगत विश्लेषण / टूडू सूची बना रहा हूं, तब भी मैं कलम और कागज का उपयोग करता हूं। मैंने देखा है कि जब मैं अपने नोट्स टाइप कर रहा होता हूं, तो मैं मान्यताओं और झूठों पर गर्व करता हूं, क्योंकि मेरा दिमाग सोचता है कि "मैं इसे बाद में आसानी से ठीक कर सकता हूं"। हालाँकि, आपके द्वारा कागज पर लिखी गई कुछ चीज़ों को सही करने पर गुस्सा आ रहा है, आपको चीजों को पार करने और लाइनों के बीच लिखने की ज़रूरत है और दस्तावेज़ बहुत खराब दिखता है, जब उस पर स्क्रिब्लिंग होता है। कागज पर लिखने से पहले मैं इसे लिखने के लिए प्रतिबद्ध होने से पहले खुद को जाँच लेता हूँ। यह बहुत सी गलतफहमियों को जल्दी पकड़ता है, इससे पहले कि मैं कोड भी लिखूं जो बग पैदा करेगा।
- मेरी दादी एक सचिव (टाइपराइटर की उम्र) थीं। एक औपचारिक दस्तावेज़ में टाइपो बनाने का मतलब पूरे पृष्ठ को फिर से टाइप करना है। मेरी चाची एक सचिव (शब्द प्रोसेसर की उम्र) है। वह एक स्वचालित वर्तनी परीक्षक पर भरोसा कर सकती है, और गलतियों को आसानी से और न्यूनतम प्रयास के साथ तय किया जा सकता है। अप्रत्याशित रूप से, मेरी दादी मेरी चाची की तुलना में काफी कम टाइपिंग त्रुटियाँ और वर्तनी की गलतियाँ करती हैं।
- कारतूस पर वीडियो गेम छपते थे। रिहाई के बाद बग को ठीक करना असंभव था। आपको सभी कारतूसों को पुनर्मुद्रित करना होगा, उन्हें सभी विक्रेताओं को वितरित करना होगा, और आशा है कि विक्रेता किसी तरह उन ग्राहकों के संपर्क में आ सकते हैं जिन्होंने पहले से ही खेल खरीदा था। इसमें बहुत सारे पैसे खर्च होंगे (भौतिक उत्पादन लागत दोगुना) और फिर भी कुछ ग्राहकों तक नहीं पहुंचेगा। अब, इंटरनेट पैच के युग में, गेम डेवलपर्स ने अपने गेम के परीक्षण में काफी कम निवेश किया है, ताकि वे दिन की बग से बच सकें, क्योंकि सीधे तौर पर प्रत्येक ग्राहक को सीधे फिक्स करना इतना आसान है। एक गलती करने के प्रभाव को उस बिंदु पर कम से कम किया जाता है, जहां तथ्य के बाद मुट्ठी भर समस्याओं को ठीक करना बेहतर होता है, जहां हर संभव परीक्षण करना त्रुटियां जो हो सकती हैं।
- मैं तीसरी कहानी वाले अपार्टमेंट में रहता था, कोई लिफ्ट नहीं थी, और मुझे अक्सर अपनी बिल्डिंग से एक या दो सड़कें पार्क करनी पड़ती थीं। मैं शायद ही कभी अपनी कार से कुछ लेना भूल गया था। अब, मैं ड्राइववे में मेरे बगल में अपनी कार के साथ एक घर में रहता हूं। मैं हर समय अपनी कार से चीजें लेना भूल जाता हूं ।
यहां अंतर्निहित विचार यह है कि एक कठिन विनिमय प्रणाली लोगों को सही और तथ्य-जांच किए गए आदान-प्रदान करने के लिए प्रोत्साहित करती है । सजा की गंभीरता (= कठिन सुधार प्रक्रिया) आपको गलतियाँ न करने की सीख देती है।
इसके अलावा, एक अच्छी तरह से परिभाषित प्रश्न पूछने के लिए विवरणों को छिपाने से किसी ऐसे व्यक्ति की समस्याओं की संभावना समाप्त हो जाती है जिसे आपने नहीं सोचा था।
जब आप एक MCVE बनाते हैं , तो आपको इसे केवल बनाना नहीं चाहिए और इसे प्रश्न में पोस्ट करना चाहिए। आपको पहले इसे अपने लिए बनाना चाहिए , ताकि आप समस्या को अलग कर सकें। और फिर, जब आपको लगता है कि समस्या अब कम नहीं हो सकती है, और आप अभी भी कारण नहीं देखते हैं; तो आपके पास StackOverflow के लिए एक वैध प्रश्न है।
इसका स्पष्ट उदाहरण:
मेरे पास हमेशा एक दूसरा विज़ुअल स्टूडियो है, जो सैंडबॉक्स नामक एक साधारण कंसोल ऐप के साथ चल रहा है। जब भी मैं किसी तकनीकी समस्या में दौड़ता हूं, तो मैं सैंडबॉक्स में आपत्तिजनक कोड को कॉपी करता हूं और उसके साथ खेलना शुरू करता हूं।
- जब मैं यह सेटिंग बदलता हूं तो क्या होता है?
- यदि मैं कोड को छोटा करूं तो क्या मैं इस मुद्दे को पुन: पेश कर सकता हूं?
- कौन सी सेटिंग्स समस्या को पुन: उत्पन्न करना संभव / असंभव बनाती हैं?
90% मामलों में, मुझे इस मुद्दे का कारण लगता है क्योंकि सैंडबॉक्स ने मुझे आस-पास के संदर्भ (या उदाहरण के लिए, कोड के विभिन्न हिस्सों के लिए आने वाले मूल्यों के बारे में किसी भी अनिश्चितता के बिना विचलित हुए कोड को देखने में मदद की।
अन्य 10% मामलों में, मुझे इस मुद्दे को पुन: पेश करने के लिए न्यूनतम कोड के साथ छोड़ दिया गया है, जो स्टैकओवरफ़्लो पर पोस्ट करने के लिए एक आदर्श उदाहरण स्निपेट के रूप में कार्य करता है।
अंतिम लेकिन कम से कम, मैं स्पष्ट कारणों के लिए दुनिया की अपनी पूरी परियोजना को अनंत काल तक देखने के लिए पोस्ट नहीं करना चाहता।
जब आपके पास पहले से ही अपना MCVE है, तो आपको इसमें व्यक्तिगत (या कंपनी) जानकारी के तरीके से बहुत कुछ नहीं होना चाहिए। यदि आप करते हैं, क्योंकि कोड न्यूनतम है, तो चीजों को एक अधिक बुनियादी फू / बार / बाज उदाहरण के लिए नाम बदलना आसान है।