आप उन्हें जानते हैं, उन त्रुटियों को जो कोई अर्थ नहीं रखते हैं। जहां ऐसा लगता है कि एक ग्रेमलिन बस अपने चिप्स के अंदर गहरे कूद गया और कुछ गड़बड़ कर दिया। क्या आप टहलते हैं, सामान लिखते हैं, चाचा को बुलाते हैं?
आप उन्हें जानते हैं, उन त्रुटियों को जो कोई अर्थ नहीं रखते हैं। जहां ऐसा लगता है कि एक ग्रेमलिन बस अपने चिप्स के अंदर गहरे कूद गया और कुछ गड़बड़ कर दिया। क्या आप टहलते हैं, सामान लिखते हैं, चाचा को बुलाते हैं?
जवाबों:
वास्तव में भयानक समस्याओं के लिए मेरी रणनीति आमतौर पर इस प्रकार है।
प्रयोग और गूगल। समस्या को हल करने का प्रयास करते रहें। अधिकांश समय यह समस्या को एक घंटे या उससे कम समय में हल करता है।
तो यह काम नहीं किया है। एक ब्रेक ले लो। कॉफी पीते हैं, किसी सहकर्मी से असंबंधित बात करते हैं। अपने दिमाग से समस्या को बाहर निकालें। जब आप समस्या को 5 या 10 मिनट बाद देखते हैं तो आप इसे थोड़ा अलग नजरिए से देख रहे हैं। अधिकांश समय यह काम करता है।
इस मामले में ऐसा नहीं है। इसलिए इसे देखते हुए एक और 10 - 30 मिनट बिताएं। फिर एक सहयोगी में कॉल करें। लेकिन इससे पहले कि आप कुछ नोट करें; आप समस्या को प्रदर्शित करना चाहते हैं, इसे पुन: पेश करते हैं, फिर उन चीजों की सूची बनाएं जो आपने कोशिश की हैं, और सबसे महत्वपूर्ण बात यह साबित करते हैं कि आपने उन्हें आज़माया है। इसलिए पहले सूखा रन करें। कोड में कुछ पुस्तक चिह्न सेट करें, किसी भी खुले दस्तावेज़ को बंद करें आदि। इस तरह से आप या तो स्वयं समस्या का समाधान कर सकते हैं, या जब आप समस्या का प्रदर्शन करते हैं तो आप उनका समय बर्बाद नहीं करेंगे।
अपने सहकर्मी से पूछें कि आप अपनी सभी धारणाओं को साबित करें। क्या वह सेटर वास्तव में आह्वान किया जा रहा है? क्या वह तरीका वास्तव में वापस आ रहा है जो आप दावा करते हैं कि यह है? आपको लगता है कि ऑब्जेक्ट अशक्त नहीं है - उन्हें दिखाएं कि यह शून्य नहीं है।
ज्यादातर समय, या तो समस्या का प्रदर्शन आपको एहसास दिलाएगा कि आपने सभी संभावनाओं की कोशिश नहीं की है या आपके सहयोगी को आपकी गलती दिखाई देगी।
अगर वह गंभीर होने के लिए अपना समय काम नहीं करता है। दस्तावेज़ बिल्कुल वही है जो आप करने की कोशिश कर रहे हैं, आपने क्या कोशिश की है, और यह काम क्यों नहीं किया। इसे अपने सभी सहयोगियों को ईमेल करें। इसे SO पर पोस्ट करें। इस बिंदु पर दस्तावेज़ एक संपूर्ण SO प्रश्न होना चाहिए।
जब आप प्रतिक्रियाओं का इंतजार करते हैं, तो Google google google। आपके पास जो भी प्रश्न है, उसकी हर क्रमिक कोशिश करें। टैब का एक गुच्छा खोलें। आप शायद इस बिंदु पर एक उत्तर पाने के लिए नहीं जा रहे हैं, लेकिन आप विचारों, संभावनाओं, समस्या के दृष्टिकोण के विभिन्न तरीकों की तलाश कर रहे हैं।
कुछ और करें, यदि आपने किसी समस्या पर 5 घंटे बिताए हैं तो उसे दूसरे दिन के लिए छोड़ दें। शायद आपको उपयोगी प्रतिक्रिया मिलेगी। हो सकता है कि जब आप अगले दिन समस्या पर हमला करेंगे तो यह स्पष्ट हो जाएगा।
यदि कोई भी काम नहीं करता है, तो इसका समय एक अलग समाधान की तलाश में है। हो सकता है कि आप एक अलग विधि, एक अलग तकनीक का उपयोग कर सकें। हो सकता है कि आपको अभी के लिए इस सुविधा को छोड़ने पर विचार करना चाहिए। क्या आप ग्राहक को घंटे के हिसाब से बिलिंग कर रहे हैं? क्या आप किसी आंतरिक ऐप पर किसी कंपनी के लिए काम कर रहे हैं? आपको इसे स्वामी को आगे बढ़ाने और उन्हें बताने की ज़रूरत है "देखो, मैंने इस पर एक्स घंटे बिताए हैं और कोई प्रगति नहीं की है, क्या इसके लायक लागत लाभ है?"। आप अपने बॉस के पास नहीं जाना चाहते और उन्हें बताएं कि आपने 16 घंटे एक समस्या पर बिताए हैं, केवल उन्हें घूमने और कहने के लिए, यह महत्वपूर्ण नहीं है, इस रिलीज के लिए इसे छोड़ दें। आपको पहले यह पता लगाना होगा।
और अगर वह काम नहीं करता है? वैसे आपके एकमात्र विकल्प समस्या को दूर रखने या उद्योग विशेषज्ञता प्राप्त करने के लिए हैं। ट्विटर पर प्रौद्योगिकी विशेषज्ञों से पूछें। अपने प्रौद्योगिकी प्रदाता को ईमेल करें।
बाहर निकलें। नहीं, तुम्हारा काम नहीं! बस उठो और घर जाओ। आप दिन या सप्ताहांत के लिए कर रहे हैं। 20 में से 19 बार जब आप अगली समस्या पर वापस आते हैं, तो समाधान एक घंटे के भीतर पेश होगा।
इससे पहले कि दस घंटे गुजर जाएं, मुझे कुछ मदद मिलेगी।
एक शब्द, timebox
किसी चीज़ पर काम करने के लिए सीमित समय निर्धारित करें, और अगर यह हल नहीं होता है, तो किसी और चीज़ पर जाएं और अगले दिन एक नए परिप्रेक्ष्य के साथ वापस आ जाएं।
वह और आँखों का एक और सेट, हमेशा किसी भी चीज को घूरने से ज्यादा बेकार है।
मैं एक घंटे में 45 मिनट से अधिक नहीं बिताऊंगा, जो एक बैठक में कुछ हल करने की कोशिश कर रहा है, यह कम रिटर्न के कानून का उल्लंघन करता है।
किसी और को समस्या बताएं।
किसी और को समस्या की व्याख्या करके, आपको इसे स्पष्ट करना होगा: यह अक्सर आपको समाधान देखने देता है।
(यूके व्यावसायिक कंप्यूटर पत्रिकाओं में से एक ने विशेष रूप से इस उद्देश्य के लिए एक वरिष्ठ प्रोग्रामर के जीवन आकार के कार्डबोर्ड कट-आउट बेचने का प्रस्ताव दिया।)
मुझे एक समस्या पर नींद आती है (कभी-कभी कुछ दिनों के लिए) भी मदद कर सकती है।
मेरे पास तीन चरण की योजना है:
प्रत्येक चरण एक वृद्धि है यदि पिछला चरण विफल हो गया। लगभग हमेशा कुछ और उत्पादक होता है जिसे मैं स्टेज 2 पर काम कर सकता हूं।
मैं आम तौर पर तीन में से एक करता हूं:
तीनों में से कोई भी हाथ में स्थिति से खुद को विचलित करने का अच्छा काम करता है। मुझे लगता है कि कुछ समय के लिए मेरे अवचेतन मस्तिष्क को किसी चीज को चबाने दिया गया है। एक या एक घंटे के बाद, bam, वहाँ समाधान है :-)।
उस सटीक दोष को लक्षित करने के लिए एक परीक्षण हार्नेस का निर्माण करें और इसे अलग करें
केवल दोष को दोहराते हुए अच्छे कोड को खत्म करते रहें। जब तक आप त्रुटि को कवर करने वाले कोड के सटीक टुकड़े को लक्षित नहीं करते। फिर कोड को ट्रेस करें।
अनुशंसित पढ़ने: व्यावहारिक प्रोग्रामर विशेष रूप से अध्याय 10: ट्रेसर की गोलियां
ये सभी सुझाव बहुत अच्छे हैं। हालाँकि, मैं अक्सर एक तकनीक का उपयोग करता हूं जिसका मैंने उल्लेख नहीं किया था। समस्या के बारे में अपने विचारों को व्यवस्थित करने के लिए सूचियाँ बनाएं। यदि मुझे विशेष रूप से चिपचिपी समस्या है तो मैं आमतौर पर कई सूचियाँ लिखता हूँ जैसे: तथ्य, धारणाएँ, प्रश्न, लक्षण आदि, मुझे लगता है कि इस तरह से चीजों को व्यवस्थित करने की प्रक्रिया में मुझे यह पता चलता है कि मुझे ऐसी धारणाएँ मिलीं जिनका मुझे एहसास नहीं था ( वह अक्सर गलत हो जाता है), जिन सवालों का मुझे एहसास नहीं था, उन्हें पूछे जाने की आवश्यकता है, अन्य क्रमपरिवर्तन मैं जांच सकता हूं, आदि।
संपादित करें:
संक्षिप्त उत्तर:
प्रश्न: आप वास्तव में विचित्र त्रुटियों से कैसे निपटते हैं जो आपको 10 घंटे से अधिक समय तक हैरान करती है?
एक: सुनिश्चित करें कि वे कभी नहीं होते हैं: अपने डिजाइन को समझें, अपने कोड को जानें, अपने डिबगर का उपयोग करना सीखें।
स्पष्टीकरण:
"जहां ऐसा लगता है कि एक ग्रेमलिन बस अपने चिप्स के अंदर गहरे कूद गया और कुछ गड़बड़ कर दिया"
ऐसा कभी नहीं होना चाहिए। यदि यह आपका कोड है, तो आपको इसे ठीक करने का प्रयास करने से पहले एक बहुत अच्छा विचार होना चाहिए कि त्रुटि का कारण क्या है।
फ़ुथर्मोर, जब आप अपना कोड लिखते हैं तो आपको पहले से ही पता होना चाहिए कि यह कहाँ और क्यों विफल होने की संभावना है।
कहा गया है कि - एक सहकर्मी से पूछना, एसओ पर पोस्ट करना, अपने चरणों को वापस लेना और रोल करना और ब्रेक लेना - ऊपर उल्लिखित सभी सुझावों से मदद मिलेगी।
दूसरी बात, क्या आप अपने टूल्स को जानते होंगे - आपका डिबगिंग टूलकिट। अपने कोड में संदिग्ध बिंदुओं पर संदेश लॉग करना, अपने कॉल स्टैक की सावधानीपूर्वक जांच करना, सशर्त ब्रेकप्वाइंट और घड़ियों का उपयोग करना, आदि। डिबगिंग कौशल अतिरिक्त नहीं हैं - वे प्रोग्रामिंग का हिस्सा हैं।
मुझे एक समान समस्या थी, ऑब्जेक्टिव-सी में एक स्पष्ट स्मृति भ्रष्टाचार, जिसे मैंने कई घंटों तक संघर्ष किया। लेकिन तब मैंने और मेरे सहयोगियों ने सिर्फ दोपहर के भोजन के लिए सैर की, और मैंने समस्या को समझाया (और एक विशेष रूप से बिट में इसकी वस्तु विधि के deserialization के साथ क्या करना है), और मूल रूप से पूरी समस्या को खुद को समझाया।
(तकनीकी विवरण: मूल रूप से, मैंने आरम्भ किया और किसी वस्तु को स्व के अलावा किसी और चीज़ पर लौटाया, इसलिए दो ऑलोक थे, लेकिन एक वस्तु वापस आ गई। मेमोरी शिफ्ट हो गई और पागल हो गया, क्रैश हो गया, और डीबगर को वास्तव में पता नहीं था कि क्या करना है यह या तो)।
नहाना।
किसी भी रॉडने मैकके प्रशंसकों?
गंभीरता से, हालांकि, अगर इन सभी उत्तरों में एक समानता है, तो ब्रेक लेना और कुछ और करना है ।
मैं इसे आपके अवचेतन के लिए समस्या के रूप में सोचना पसंद करता हूं। यहां तक कि अगर हम अनजान हैं, तो भी हमारे दिमाग (लगता है) समस्या पर काम करना जारी रखते हैं, भले ही हम कुछ और कर रहे हों, जैसे कि स्नान करना ।
इसके माध्यम से चरण दर चरण, विधानसभा में नीचे। कौन क्या कहता है, मेमोरी एक्सेस पर ब्रेक-पॉइंट। यह आमतौर पर बग को तेजी से पकड़ता है।
यदि नहीं, तो टहल लें।
इन सभी का एक संयोजन:
थोड़ी देर के लिए इससे दूर हो जाएं ताकि यह आपके बैक बर्नर पर बैठ सके। नींद, आराम, खाना, टहलना, जो भी हो।
समस्या का अधिक परीक्षण करें , यह और क्या गलत करता है, आप अन्य क्या लक्षण पा सकते हैं?
समस्या पर शोध करें, देखें कि आप क्या पा सकते हैं। अलग-अलग कीवर्ड आज़माना याद रखें
कुछ अलग करने की कोशिश करो । चारों ओर एक काम। एक अलग डिबगिंग तकनीक। एक सत्यापनकर्ता। एक अलग कंप्यूटर।
किसी से बात करो । यहां तक कि अगर वे मदद करने में सक्षम नहीं हैं, या एक प्रोग्रामर भी नहीं है, तो कभी-कभी बात करने पर विचार लाइटबल्ब को ट्रिगर करेगा
पुनः आरंभ करें! यदि उपयुक्त हो, तो अपने कंप्यूटर, सर्वर आदि को पुनः आरंभ करने का प्रयास करें। यदि और कुछ नहीं है, तो आप सोचने के लिए समय का उपयोग कर सकते हैं।
StackOverflow पूछो! हम यहाँ मदद करने के लिए हैं
मुझे वास्तव में सबसे ज्यादा वोट देने वाला उत्तर पसंद नहीं आया, क्योंकि भले ही वह कुछ समय के लिए काम करता हो, लेकिन कुछ समय के लिए आपको उसी दिन यह पता लगाने की जरूरत होती है, इसलिए मैं इस क्रम में क्या सिफारिश करूंगा:
पुष्टि करें कि यह केवल आपके लिए नहीं हो रहा है। इससे आपका काफी समय बच सकता है। हो सकता है कि आपने एक आवश्यक घटक को अनइंस्टॉल किया हो, या अपने वातावरण में बदलाव किया हो, और आपके कोड में कहीं एक अपवाद निगला जा रहा हो। यदि यह केवल आपके लिए हो रहा है, तो मैं एक पर्यावरण तुलना उपकरण का उपयोग करूंगा। मैंने हाल ही में Envy नामक एक सॉफ़्टवेयर के बारे में पढ़ा, जो आपको बस ऐसा करने की अनुमति देता है, हालांकि यह फ्रीवेयर नहीं है, इसकी लागत 10 USD है।
सभी को हो रहा है? ठीक है, अब कोड पर एक इतिहास देखें और हाल के परिवर्तनों के लिए सत्यापित करें जो त्रुटि का कारण हो सकता है, प्रत्यक्ष या अप्रत्यक्ष रूप से।
हाल ही में कोई परिवर्तन नहीं हुए हैं? यदि यह एक बहुत ही विशिष्ट त्रुटि (एक अपवाद) है, तो 'इसे स्टैकओवरफ़्लो करें'। अब यह 'google it' से बेहतर नहीं लगता है, लेकिन मुझे यह कहना अच्छा लगता है कि मैं Google की तुलना में प्रोग्रामिंग रिसर्च के लिए सबसे पहले स्टैकओवरफ्लो खोजता हूं। यदि यह वास्तव में ज्ञात समस्या है, तो यह बहुत संभावना है कि आप यहां एक समाधान पाएंगे। यदि नहीं, तो संबंधित स्टेक्सचेंज साइट पर एक प्रश्न पोस्ट करें। आपको बहुत ही त्वरित उत्तर मिल सकता है, या यदि आप नहीं भी करते हैं, तो आपका शोध और अधिक शोध करने के दौरान आपका प्रश्न वहाँ से बाहर हो जाएगा। यह एक लाभ है।
यदि आपको ऑनलाइन उत्तर नहीं मिला है या यह सामान्य त्रुटि नहीं है, तो चरण दर चरण चरण के माध्यम से चलें, जाँचें कि क्या प्रत्येक चरण के प्राप्त परिणाम आपके द्वारा अपेक्षित परिणाम के लिए मायने रखते हैं। प्रत्येक विधि पर समाप्त करने के लिए प्रारंभ करें, और नीचे एक शीर्ष पर tiered समाधान। (यानी यदि आप प्रदर्शन की समस्या निवारण कर रहे हैं, तो उस कोड से शुरू करें जो रिकॉर्ड्स को पुनः प्राप्त करता है। यूआई में शुरू करने का कोई मतलब नहीं है यदि आप जल्दी से निर्धारित कर सकते हैं कि पहला कदम समस्या है)।
अगर कोड के माध्यम से जाने के बाद एक दो बार आप अभी भी गलत नहीं है, इसके बारे में बात करने के लिए किसी को कॉल करें। जैसा कि किसी ने पहले ही उल्लेख किया है, इसके बारे में ज़ोर से बात करना बल्ब को प्रकाश में ला सकता है। प्लस जोड़ी-प्रोग्रामिंग वास्तव में उपयोगी है।
इस बिंदु पर, यदि यह संभव है, तो कुछ समय के लिए या दिन के लिए दूर चलें। मैंने कल एक बहुत ही सच्चा ट्वीट पढ़ा जिसमें कहा गया था कि "मैं सोच रहा था कि 'कैसे फेक है' और 'लेकिन निश्चित रूप से' सोचकर जाग गया।" सच है।
यदि आपके पास अभी भी कोई उत्तर नहीं है, तो मैं कहूंगा कि आप छोटे कार्यों / विधियों / कार्यों में रिफैक्टरिंग की कोशिश कर सकते हैं। हेनरी फोर्ड ने कहा कि 'ऐसा कोई कार्य इतना जटिल नहीं है जिसे छोटे कार्यों में तोड़कर पूरा नहीं किया जा सकता।' इस बिंदु पर, यदि समाधान बहुत जटिल है और आपने स्वयं या किसी और की मदद से पता नहीं लगाया है, तो कोड को छोटे कार्यों में बदल दें। यहां तक कि अगर आप इसे समाप्त नहीं करते हैं, तो यह आपको इसका कारण खोजने में मदद कर सकता है।
अपने कोड में इंस्ट्रूमेंटेशन जोड़ें।
इसके बारे में ट्वीट करें ??
आपको पीछे हटने की जरूरत है। मेरा मकसद है 'अगर समस्या बहुत कठिन है तो आप गलत समस्या को हल कर रहे हैं।' आपकी धारणाएँ क्या हैं? किसी चीज पर भरोसा मत करो।
उस के लिए 'समस्या का निराकरण, निराकरण समाधान' है। कंप्यूटर की ताकत उसके तर्क है इसलिए आप तर्क पर जीत नहीं सकते। आपके पास एक मस्तिष्क है और इसे आउट-थिंक करना है।
आधुनिक समय में एक सिस्टम पर बातचीत करने वाली बहुत सी अन्य चीजें हैं - फायरवॉल, एवी, एंटीस्पायवेयर, हर रात होने वाले स्वचालित अपडेट - आपको बढ़ते लक्ष्य से निपटना होगा।