आप समान रूप से उप-इष्टतम डिजाइनों के माध्यम से चलने से कैसे बचते हैं?


10

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


उदाहरण:

मैं आपको एक काल्पनिक उदाहरण देता हूँ जो हाल ही में सामने आए एक वास्तविक पर आधारित है। मान लीजिए कि मैं वंशानुक्रम पर रचना का उपयोग करना चाहता हूं क्योंकि वंशानुगत पदानुक्रमों ने अतीत में कोड की मापनीयता में बाधा उत्पन्न की है। मैं कोड को रिफ्लेक्टर कर सकता हूं, लेकिन फिर पता चलता है कि कुछ संदर्भ हैं जहां सुपरक्लास / बेसक्लस को केवल उपवर्ग पर कार्यक्षमता को कॉल करने की आवश्यकता है, इसके बावजूद प्रयास करने से बचें।

अगला सबसे अच्छा तरीका एक आधा प्रतिनिधि / पर्यवेक्षक पैटर्न और आधा रचना पैटर्न लागू करना प्रतीत होता है ताकि सुपरक्लास व्यवहार को प्रतिनिधि कर सके या ताकि उपवर्ग सुपरक्लास घटनाओं का निरीक्षण कर सके। तब वर्ग कम स्केलेबल और रख-रखाव करने योग्य होता है क्योंकि इसकी अस्पष्टता को कैसे बढ़ाया जाना चाहिए, यह भी मौजूदा श्रोताओं / प्रतिनिधियों को विस्तारित करने के लिए मुश्किल है। जानकारी भी अच्छी तरह से छिपी नहीं है क्योंकि किसी को सुपरक्लास का विस्तार करने के लिए कार्यान्वयन को जानना आवश्यक है (जब तक कि आप टिप्पणियों का बड़े पैमाने पर उपयोग नहीं करते हैं)।

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

फिर मैं एक और दृष्टिकोण की कोशिश कर सकता हूं, लेकिन इसके साथ कई मुद्दे हैं। फिर अगला एक, और एक के बाद एक आदि।


यह पुनरावृत्ति प्रक्रिया बहुत मुश्किल हो जाती है जब प्रत्येक दृष्टिकोण को दूसरों के रूप में कई समस्याएं होती हैं और एक तरह के डिजाइन निर्णय पक्षाघात की ओर जाता है । यह स्वीकार करना भी मुश्किल है कि कोड समान रूप से समस्याग्रस्त हो जाएगा चाहे डिज़ाइन पैटर्न या दृष्टिकोण का उपयोग किया जाए। अगर मैं इस स्थिति में समाप्त हो जाता हूं तो क्या इसका मतलब यह है कि समस्या को खुद से दूर करने की आवश्यकता है? जब वे इस स्थिति का सामना करते हैं तो दूसरे क्या करते हैं?

संपादित करें: उस प्रश्न की व्याख्या की एक संख्या प्रतीत होती है जिसे मैं स्पष्ट करना चाहता हूं:

  • मैंने ओओपी को पूरी तरह से प्रश्न से बाहर कर दिया है क्योंकि यह पता चला है कि यह वास्तव में ओओपी के लिए विशिष्ट नहीं है, साथ ही ओओपी के बारे में मुझे जो कुछ टिप्पणी करनी है, उसकी गलत व्याख्या करना बहुत आसान है।
  • कुछ ने दावा किया है कि मुझे पुनरावृत्त दृष्टिकोण लेना चाहिए और विभिन्न पैटर्न आज़माना चाहिए, या जब मुझे काम करना बंद हो जाए तो मुझे एक पैटर्न को छोड़ देना चाहिए। यह वह प्रक्रिया है जिसका मैं पहली बार उल्लेख करना चाहता हूं। मुझे लगा कि यह उदाहरण से स्पष्ट है लेकिन मैं इसे स्पष्ट कर सकता था, इसलिए मैंने ऐसा करने के लिए प्रश्न को संपादित किया है।

3
"ओओ दर्शन की सदस्यता" न लें। यह एक उपकरण है, न कि एक प्रमुख जीवन निर्णय। इसका उपयोग तब करें जब यह मदद करता है और इसका उपयोग न करें जब यह नहीं करता है।
user253751

यदि आप कुछ पैटर्न के संदर्भ में सोच रहे हैं, तो शायद C में कुछ मामूली जटिल प्रोजेक्ट लिखने की कोशिश करें, यह अनुभव करना दिलचस्प होगा कि आप उन पैटर्न के बिना कितना कर सकते हैं।
user253751

2
ओह C के पैटर्न हैं। वे सिर्फ बहुत अलग पैटर्न हैं। :)
candied_orange

मैंने इनमें से अधिकांश गलत व्याख्याओं को संपादित किया है
जोनाथन

इन समस्याओं का एक बार होना एक सामान्य समय में दिखाई देता है। उनके होने पर अक्सर ऐसा नहीं होना चाहिए। सबसे अधिक संभावना है, आप समस्या के लिए गलत प्रोग्रामिंग प्रतिमान का उपयोग कर रहे हैं या आपके डिजाइन गलत स्थानों में प्रतिमानों का मिश्रण हैं।
डंक

जवाबों:


8

जब मुझे इस तरह का सख्त फैसला लेना है, तो मैं आमतौर पर खुद से तीन सवाल पूछता हूं:

  1. सभी उपलब्ध समाधानों के पक्ष और विपक्ष क्या हैं ?

  2. क्या कोई समाधान है, मैंने अभी तक विचार नहीं किया है?

  3. सबसे महत्वपूर्ण:
    वास्तव में मेरी आवश्यकताएं क्या हैं? कागज पर आवश्यकताओं को नहीं, असली मौलिक हैं?
    क्या मैं किसी तरह समस्या का सुधार कर सकता हूं / अपनी आवश्यकताओं को मोड़ सकता हूं, ताकि यह एक सरल, सीधे-फॉरवर्ड समाधान की अनुमति दे सके?
    क्या मैं अपने डेटा को कुछ अलग तरीके से प्रस्तुत कर सकता हूं, ताकि यह ऐसे सरल, सीधे-फॉरवर्ड समाधान की अनुमति दे सके?

    यह कथित समस्या के मूल सिद्धांतों के बारे में प्रश्न हैं। यह पता चल सकता है, कि आप वास्तव में गलत समस्या को हल करने की कोशिश कर रहे थे। आपकी समस्या की विशिष्ट आवश्यकताएं हो सकती हैं जो सामान्य मामले की तुलना में बहुत सरल समाधान की अनुमति देती हैं। अपनी समस्या के अपने सूत्रीकरण पर सवाल उठाएं!

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

इस दृष्टिकोण का मूल्य है, कि आप कभी-कभी आश्चर्यजनक रूप से अच्छे समाधान पाएंगे। सुरुचिपूर्ण समाधान। इन तीन सवालों के जवाब देने में आपके द्वारा निवेश किए गए समय के लिए अच्छी तरह से समाधान। और आप उन समाधानों को नहीं पाएंगे, यदि आप तुरंत अगली यात्रा दर्ज करते हैं।

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


मैं इसे उत्तर के रूप में अच्छी तरह से चिह्नित कर सकता हूं, यह मेरे लिए सबसे अधिक समझ में आता है और केवल समस्या को फिर से आश्वस्त करने के बारे में आम सहमति प्रतीत होती है।
जोनाथन

मुझे यह भी पसंद है कि आपने इसे कैसे चरणों में तोड़ा है ताकि स्थिति का आकलन करने के लिए किसी प्रकार की ढीली प्रक्रिया हो।
जोनाथन

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

13

पहली चीजें पहली - पैटर्न उपयोगी सार हैं अंत नहीं सभी डिजाइन के सभी हो, अकेले OO डिजाइन करते हैं।

दूसरी बात - आधुनिक OO यह जानने के लिए पर्याप्त स्मार्ट है कि सब कुछ एक वस्तु नहीं है। कभी-कभी सादे पुराने कार्यों का उपयोग करना, या यहां तक ​​कि कुछ अनिवार्य शैली स्क्रिप्ट कुछ समस्याओं के लिए बेहतर समाधान प्राप्त करेंगे।

अब चीजों के मांस के लिए:

यह बहुत मुश्किल हो जाता है जब प्रत्येक दृष्टिकोण के लिए दूसरों के रूप में कई समस्याएं हैं।

क्यों? जब आपके पास समान विकल्पों का एक गुच्छा होता है, तो आपका निर्णय आसान होना चाहिए! आप "गलत" विकल्प चुनकर ज्यादा नहीं हारेंगे। और वास्तव में, कोड तय नहीं है। कुछ आज़माएँ, देखें कि क्या यह अच्छा है। Iterate

यह स्वीकार करना भी मुश्किल है कि कोड बहुत समस्याग्रस्त खत्म हो जाएगा, भले ही डिजाइन पैटर्न या दृष्टिकोण का उपयोग किया जाए।

कठिन नट। कठिन समस्याएं - वास्तविक गणितीय रूप से कठिन समस्याएं सिर्फ कठिन हैं। मुश्किल से ही सही। उनके लिए वस्तुतः कोई अच्छा उपाय नहीं है। और यह पता चला है, आसान समस्याएं वास्तव में मूल्यवान नहीं हैं।

लेकिन सावधान रहें। बहुत बार मैंने लोगों को बिना किसी अच्छे विकल्प के निराश होते देखा है क्योंकि वे समस्या को एक निश्चित तरीके से देख रहे हैं, या कि उन्होंने अपनी ज़िम्मेदारियों को इस तरह से काट दिया है जो हाथ में समस्या के लिए अप्राकृतिक है। "कोई अच्छा विकल्प नहीं" एक गंध हो सकता है जो आपके दृष्टिकोण के साथ मौलिक रूप से कुछ गलत है।

इससे प्रेरणा का नुकसान होता है क्योंकि "क्लीन" कोड कभी-कभी एक विकल्प के रूप में बंद हो जाता है।

परफेक्ट अच्छे का दुश्मन है। कुछ काम कर लें, फिर उसे रिफलेक्टर करें।

क्या डिजाइन के लिए कोई दृष्टिकोण है जो इस समस्या को कम करने में मदद कर सकता है? क्या इस तरह की स्थिति में किसी को क्या करना चाहिए?

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


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

@ जोनाथन - सभी डिज़ाइन ट्रेड ऑफ़ की एक श्रृंखला है। हां, अगर डिजाइन में खामियां हैं, तो आपको तुरंत इसका समाधान करना चाहिए और आपके पास इसे सुधारने का एक स्पष्ट तरीका है। यदि कोई स्पष्ट सुधार नहीं है, तो बकवास करना बंद करें।
तेलस्टिन

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

8

आप जिस स्थिति का वर्णन कर रहे हैं, वह नीचे-ऊपर के दृष्टिकोण की तरह लग रहा है। आप एक पत्ता लेते हैं, इसे ठीक करने की कोशिश करते हैं और यह पता लगाते हैं कि यह एक शाखा से जुड़ा है जो खुद भी दूसरी शाखा से जुड़ा है आदि।

यह एक टायर से शुरू होने वाली कार बनाने की कोशिश करने जैसा है।

आपको एक कदम वापस लेने और बड़ी तस्वीर को देखने की जरूरत है। वह पत्ता समग्र डिजाइन में कैसे बैठता है? क्या यह अभी भी चालू और सही है?

यदि आप इसे खरोंच से डिजाइन और कार्यान्वित करेंगे तो मॉड्यूल कैसा दिखेगा? उस "आदर्श" से कितना दूर आपका वर्तमान कार्यान्वयन है।

इस तरह से आपके पास काम करने की एक बड़ी तस्वीर है। (या यदि आप तय करते हैं कि यह बहुत काम है, तो मुद्दे क्या हैं)।


4

आपका उदाहरण एक ऐसी स्थिति का वर्णन करता है जो आम तौर पर विरासत कोड के बड़े टुकड़ों के साथ उत्पन्न होती है, और जब आप "बहुत बड़ा" बनाने की कोशिश कर रहे हैं।

इस स्थिति के लिए सबसे अच्छी सलाह मैं आपको दे सकता हूं:

  • "मुख्य धमाके" में अपना मुख्य लक्ष्य हासिल करने की कोशिश मत करो ,

  • छोटे चरणों में अपने कोड को सुधारना सीखें!

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

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

यदि आप ध्यान दें कि आप तुरंत उपवर्गों से सुपरक्लास को नहीं हटा सकते हैं, तो आप पहले ऊपर बताई गई कार्यक्षमता को घेरने वाले छोटे घटकों में सुपरक्लास को फिर से शुरू कर सकते हैं। सबसे कम लटकने वाले फलों के साथ शुरू करें, पहले कुछ सरल घटकों को निकालें, जो पहले से ही आपके सुपरक्लास को कम जटिल बना देगा। सुपरक्लास जितना छोटा होगा, उतना ही आसान अतिरिक्त रिफलेक्टर बनेंगे। इन घटकों का उपयोग उपवर्गों के साथ-साथ सुपरक्लास से भी करें।

यदि आप भाग्यशाली हैं, तो सुपरक्लास में शेष कोड इस प्रक्रिया में इतना सरल हो जाएगा कि आप सुपरक्लास को बिना किसी अन्य समस्या के उपवर्गों से निकाल सकते हैं। या, आप देखेंगे कि सुपरक्लास को रखना कोई समस्या नहीं है, क्योंकि आपने पहले से ही उन घटकों में पर्याप्त कोड निकाला है जिन्हें आप विरासत के बिना पुन: उपयोग करना चाहते हैं।

यदि आप अनिश्चित हैं कि कहां से शुरू करें, क्योंकि आप नहीं जानते कि क्या रिफैक्टरिंग सरल हो जाएगी, कभी-कभी सबसे अच्छा तरीका कुछ स्क्रैच रिफैक्टरिंग करना है

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

  • फाउलर द्वारा Refactoring : बहुत छोटे रिफैक्टोरिंग की एक पूरी सूची का वर्णन करता है ।

  • पंख द्वारा विरासत कोड के साथ प्रभावी ढंग से काम करना : बुरी तरह से डिजाइन किए गए कोड की बड़ी मात्रा से निपटने के लिए उत्कृष्ट सलाह देता है और इसे छोटे चरणों में अधिक परीक्षण योग्य बनाता है


1
यह भी बहुत मददगार है। छोटे चरण-वार या स्क्रैच रिफैक्टरिंग एक अच्छा विचार है क्योंकि यह तब कुछ ऐसा बन जाता है जिसे उत्तरोत्तर पूरा किया जा सकता है और साथ ही इसे बिना किसी बाधा के दूसरे काम के साथ पूरा किया जा सकता है। काश मैं कई जवाबों को मंजूरी दे सकता!
जोनाथन

1

कभी कभी सबसे अच्छा दो डिजाइन सिद्धांतों KISS * और YAGNI ** कर रहे हैं। एक प्रोग्राम में हर ज्ञात डिज़ाइन पैटर्न को रटना करने की आवश्यकता महसूस न करें जिसे बस "हैलो वर्ल्ड" प्रिंट करना है।

 * Keep It Simple, Stupid
 ** You Ain't Gonna Need It

प्रश्न अद्यतन के बाद संपादित करें (और कुछ हद तक पीटर बी क्या कहते हैं)

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

लेकिन अगर ऐसा करने के लिए काम अनुपात से बाहर हो जाएगा, तो यह समस्या को कम से कम बदसूरत समाधान के साथ आने का एक व्यावहारिक निर्णय लेता है।


मैंने इसमें से कुछ को संपादित किया है, लेकिन सामान्य तौर पर मैं उन समस्याओं का जिक्र कर रहा हूं जहां कोई सरल समाधान उपलब्ध नहीं है।
जोनाथन

आह अच्छा हाँ वहाँ एक आम सहमति प्रतीत होती है जो समस्या को पीछे छोड़ने और आश्वस्त करने के बारे में उभरती है। यह एक अच्छा विचार है।
जोनाथन

1

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

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

ऊपर से संबंधित डिजाइन या स्वीकारोक्ति द्वारा डिबगिंग है। आप किसी सहकर्मी के पास जाते हैं और कहते हैं, "मैं आपको होने वाली समस्या बताने जा रहा हूं, और फिर मैं आपको उन समाधानों के बारे में बताने जा रहा हूं जो आपके पास हैं। आप प्रत्येक दृष्टिकोण में समस्याओं को इंगित करते हैं और अन्य दृष्टिकोणों का सुझाव देते हैं। । " अक्सर दूसरे व्यक्ति के बोलने से पहले, जैसा कि मैं समझा रहा हूं, मुझे एहसास होना शुरू हो जाता है कि एक रास्ता जो दूसरों के बराबर लग रहा था, वास्तव में मैं जितना सोचा था उससे कहीं ज्यादा बेहतर या बुरा है। परिणामस्वरूप बातचीत या तो उस धारणा को मजबूत कर सकती है, या उन नई चीजों को इंगित कर सकती है, जिनके बारे में मैंने नहीं सोचा था।

तो टीएल; डीआर: एक ब्रेक लें, इसे मजबूर न करें, मदद के लिए पूछें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.