मैं अपनी समस्या को सुलझाने की क्षमता कैसे सुधार सकता हूं?


50

हर कोई एक ही बात कहता है: "एक वास्तविक प्रोग्रामर जानता है कि वास्तविक समस्याओं को कैसे संभालना है।" लेकिन वे भूल जाते हैं कि उन्होंने यह क्षमता कैसे सीखी या कहाँ: यह स्कूलों में नहीं पढ़ाया जाता है।

मैं जटिल प्रोग्रामिंग समस्याओं से निपटने की अपनी क्षमता में सुधार करने के लिए क्या कर सकता हूं? आपके लिए क्या रणनीति काम की है? क्या ऐसे विशिष्ट क्षेत्र हैं जिन पर मुझे ध्यान केंद्रित करना चाहिए, जैसे एल्गोरिदम या डिज़ाइन पैटर्न?


3
कोड कम्प्लीट में उल्लिखित दो उपयोगी पुस्तकें हैं: जेम्स एडम्स द्वारा अवधारणात्मक ब्लॉकबस्टिंग , और एडवर्ड डी बोनो द्वारा लेटरल थिंकिंग
mctylr

1
आह! मैं यहाँ वापस पोस्ट करने के लिए भूल गया जब यह सिर्फ कुछ जवाब था।
मार्क सी

जवाबों:


25

कुछ तकनीकें जो काम कर सकती हैं या नहीं:

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

अंतिम बिंदु उत्कृष्ट है। कभी-कभी समस्या के समाधान के लिए बस इसे ज्यादातर मामलों के लिए काम करना होता है और फिर देखें कि इसे कहां सुधारना है।
जेएफओ

4
हालाँकि, ध्यान रखें कि "मैं इसे बाद में ठीक करूंगा" की संख्या जो "मैंने इसे ठीक कर दिया है" है (कम से कम मेरे अनुभव में) आंशिक रूप से छोटा है।
गैरेथ

3
गैरेथ: सच है, लेकिन विचार यह नहीं है कि इसे अगले सप्ताह, अगले महीने या जब भी बेहतर किया जाए, लेकिन काम करने के तुरंत बाद। यह हार्ड नट्स को क्रैक करने के लिए एक विधि के रूप में है।
user281377

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

1
Geek: मुझे पता है कि # 4 थोड़ा विरोधाभासी लगता है, लेकिन कभी-कभी, यह वास्तव में मेरे लिए काम करता है; विशेष रूप से ऐसी स्थितियों में जहां एक से अधिक दृष्टिकोण संभव हैं और समस्या उन दृष्टिकोणों में से एक का चयन है। # 6 का मतलब हमारे पेशे में सामान्य डॉन द्वारा बहुत अधिक प्रतिबंधित नहीं होना है। कभी-कभी हमारे पास आंतरिक नियम हैं जैसे "वैश्विक चर से बचें" इस बिंदु पर कि हम अनजाने में हर समाधान को अस्वीकार कर देते हैं जो इस तरह की पदावनत तकनीक का उपयोग करता है।
user281377

20

आवश्यकतानुसार आर-मोड या एल-मोड सोच का उपयोग करें

आर-मोड रचनात्मक, गैर-मौखिक दृष्टिकोण है जिसे हम आमतौर पर अवचेतन के साथ जोड़ते हैं। एल-मोड आपकी "आंतरिक आवाज" के साथ जुड़ा हुआ रैखिक, तार्किक, मौखिक दृष्टिकोण है।

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

आर-मोड सोच का उपयोग कैसे करें

कई तरीके हैं, लेकिन शायद पॉइंकेयर विधि (प्रसिद्ध गणितज्ञ के नाम पर) की कोशिश करें।

समस्या के बारे में आपको जो कुछ भी पता है उसे लिख लें। इसके सभी आसान पहलुओं (यदि कोई हो) को तुरंत हल करें। "कठिन समस्याओं" सूची में से एक भी आइटम चुनें और फिर टहलने के लिए रवाना हो जाएं जहां आप परेशान या विचलित नहीं होंगे।

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

कुल्ला और दोहराएं जब तक कि सभी समस्याओं में अंतर्दृष्टि न हो। फिर अंतर्दृष्टि की खोज शुरू करें।

पुस्तक की सिफारिश

व्यावहारिक सोच और सीखने को पढ़ने से आपको एक बेहतर समस्या हल करने में मदद मिल सकती है। (मुझे लगता है कि यह पुस्तक हाल ही में संदर्भित हो रही है ...)


4
व्यावहारिक सोच और सीखना उत्कृष्ट था
ब्रैड कपिट

रेफरी: drawright.com/theory.htm (आर-मोड और एल-मोड क्या है)
mctylr

17

किसी और से पूछें...

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

जैसा कि आप इसे मौखिक रूप से करते हैं अक्सर आप इसे बाहर काम करेंगे।

कभी-कभी दूसरा व्यक्ति एक प्रश्न पूछेगा या एक विस्तार को इंगित करेगा जो मानसिक बाढ़ की स्थिति को अनलॉक करेगा।

आखिरकार आप कठपुतली के उपयोग के बिना अपने सिर में चीजों को मौखिक रूप से सीखना सीखेंगे, और समस्या के प्रमुख विवरण को जल्दी से बताएंगे।

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


दूसरों से पूछना या अध्ययन समूह बनाना सीखने का एक शानदार तरीका है।
गैरी रोवे

मैं भी ऐसा ही करता हूं, बस मुझसे विचार लेने के लिए और यह सबसे अच्छे तरीकों में से एक है।
विस्वा

इस तकनीक को रबर डकिंग के रूप में जाना जाता है, इसके बारे में उत्कृष्ट लेख हॉरर कोडिंग में कोडिंग हॉरर कोडिंग / www.blog/2012/03/rubber-duck-problem-solve.html & wiki भी सहायक है en.wikipedia.org/wiki-Rubber_duck_debugging
spats

9

वास्तव में मेरा संक्षिप्त जवाब "अधिक समस्याओं को हल करना" है। लेकिन मुद्दा यह है: वास्तव में समस्याओं पर ध्यान केंद्रित करें और हार न मानें। StackOverflow या जो कुछ भी मदद के लिए मत पूछो। (स्टैकऑवरफ्लो पढ़ना निश्चित रूप से ठीक है!) जब तक आप लगभग काम करने का हल नहीं निकाल लेते, तब तक आप पूरी तरह से अपने लक्ष्य तक पहुँच चुके हैं। और तब तक जारी रखें जब तक आपके पास एक संतोषजनक समाधान न हो।

मेरे लिए समस्या समाधान दो चीजें हैं:

  • समस्या सुलझाने की रणनीति
  • दृढ़ता और हताशा सहिष्णुता

बिंदु 2 वास्तव में मेरी राय में महत्वपूर्ण है क्योंकि यह आपको अपनी सोच को बदलने में मजबूर करता है जितनी देर आप एक समस्या से चिपके रहते हैं। यह आपको समस्या समाधान के साथ अधिक समय बिताने की अनुमति देता है जिससे आप अपने कौशल को और भी बेहतर बना सकते हैं। ;-)

वैसे, मैं आपको एडवर्ड डी बोनो पढ़ने की सलाह देता हूं। हालाँकि मैंने अपनी समस्या सुलझाने के कौशल को मुख्य रूप से भौतिकी का अध्ययन करके हासिल किया, लेकिन उनका लेखन वास्तव में दिलचस्प है।

टूलकिट को हल करने में मेरी और मेरी समस्या यह है:

  • बेतरतीब ढंग से कुछ कोशिश करो
  • विषय से संबंधित यादृच्छिक लेख / ब्लॉग / पोस्ट पढ़ें (या एक निकट से जुड़ा विषय)
  • एक अच्छी ड्राइंग बनाना
  • समस्या को कई लेकिन सरल समस्याओं में विभाजित करें
  • कुछ और करो
  • Google कुछ ऐसा है जो किसी न किसी तरह से समस्या से संबंधित है
  • समस्या के बारे में दूसरों से बात करें
  • TODO सूची बनाएं
  • आप समस्या के प्रभाव के बारे में जानते हैं, ताकि आप और अधिक आसानी से पैटर्न पा सकें

कृपया ध्यान दें कि इनमें से अधिकांश उपकरण पुनरावर्ती रूप से लागू किए जा सकते हैं।

और मेरा एल्गोरिथ्म यह है:

  1. टूलकिट को हल करने में मेरी समस्या का कौन सा उपकरण इस समय सबसे अधिक समझ में आता है?
  2. समस्या हल नहीं हुई? 1 के साथ जारी; ;-)

चरण 1 एक कठिन निर्णय है, लेकिन आप बेहतर निर्णय लेते हैं जितना अधिक आप अभ्यास करते हैं।

ओह और मैं लगभग सबसे महत्वपूर्ण घटक को भूल गया हूं:

पूरी प्रक्रिया के बारे में सकारात्मक सोचें। मत सोचो "मुझे उम्मीद है कि XYZ अब समस्या का समाधान करेगा।" इसके बजाय सोचें: "अगर XYZ काम नहीं करता है तो मुझे पता है कि YZX समस्या का स्रोत नहीं हो सकता है और मैं जांच करूंगा कि क्या YYZ काम करता है।" समस्या को हल करना कभी-कभी विशेष रूप से मजेदार हो सकता है यदि आपकी समस्या को खोजने की प्रक्रिया सुरुचिपूर्ण और ज्ञानवर्धक हो।


मैंने इस पृष्ठ को "भौतिकी" शब्द के लिए खोजा कि क्या कोई पहले से ही इसके बारे में लिखे। गणित दूसरा है।
मार्क सी

मुझे लगता है कि आपकी समस्या को सुलझाने की क्षमता के संबंध में भौतिकी का अध्ययन कठिन है, मुझे लगता है।
मार्क सी

सकारात्मक सोचने के लिए +1। यदि आप अपने आप को काम करते हुए पाते हैं तो आपकी समस्या सुलझाने की क्षमता क्षीण हो जाती है। समस्या को देखें क्योंकि यह आपको ज्ञान देता है।
गैरी रोवे

7

समस्याओं की पहचान करने के कौशल पर भी काम करना शुरू करें। कभी-कभी आपको पहचानना पड़ता है कि इसे हल करने से पहले आपको कोई समस्या है। स्कूल में उन्हें बहुत अधिक उत्तरों की आवश्यकता होती है और छात्रों से पर्याप्त प्रश्नों की नहीं।

अपने आसपास के लोगों को खोजें जो समस्याओं को हल करते हैं और उनसे पूछते हैं कि वे इसके बारे में कैसे जाते हैं।

गलत होने के लिए तैयार रहें। यदि आप उन सभी को अपने पास रखते हैं और आप किसी काम के नहीं रहेंगे तो आप सुधार नहीं करेंगे।


+1 के लिए "स्कूल में उन्हें बहुत अधिक उत्तरों की आवश्यकता होती है और छात्रों से पर्याप्त प्रश्नों की नहीं।" यह सच है और सही सवाल पूछने के लिए सीखने में समय लगता है ... हर जगह जाँचें कि बुरे सवाल के बहुत सारे उदाहरण हैं
Rémi

4

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

अंशों को पहचानना और बनाना सीखें :

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

वैज्ञानिक विधि का उपयोग करके समस्याओं को हल करना सीखें :

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

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

इस तरह से वैज्ञानिक रूप से सोच - सामान्य रूप से - केवल एक विज्ञान पृष्ठभूमि में अनुभव होने से आ सकता है। कभी-कभी किसी समस्या को हल करने को A से B तक के रैखिक पथ के रूप में नहीं देखा जा सकता है।

संक्षेप में, कंप्यूटर विज्ञान का अध्ययन करें, अन्य वैज्ञानिक क्षेत्रों का अध्ययन करें, कार्यात्मक प्रोग्रामिंग सीखें। ये आपको एक वैज्ञानिक की तरह सोचने और बॉक्स के बाहर सोचने में मदद करेंगे।


ठीक ठीक। छोटी समस्याओं में बड़ी समस्याओं को तोड़ो।
बिल माइकेल

3

यह सब इस बात पर निर्भर है कि आप किस प्रकार की समस्याओं को हल करना चाहते हैं, लेकिन अगर आप पहले से ही अच्छी बात नहीं है तो तार्किक रूप से सोचना सीखें।

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


3

मुझे लगता है कि आप जो देख रहे हैं, वह कंप्यूटर विज्ञान की सांख्यिकी है।

जब यह पता चलता है कि हम में से ९९% लोग खाइयों में क्या करते हैं, तो वास्तव में सूरज के नीचे कुछ भी नया नहीं है। तो आप एक समस्या को देख सकते हैं और इसे DP समस्या के रूप में पहचान सकते हैं, या किसी अन्य को समस्या के रूप में पहचान सकते हैं, जो संस्मरण आदि से लाभान्वित हो सकते हैं ...

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

आप इसे अपने दम पर कर सकते हैं, लेकिन यह शायद कठिन होगा। मैं इन दो पाठ्यक्रमों के साथ शुरू होगा:

एल्गोरिदम के लिए परिचय

सैद्धांतिक सीएस में महान विचार


2

मेरे उत्तर विशेष रूप से कोडिंग से संबंधित हैं, लेकिन किसी भी चीज़ पर लागू किए जा सकते हैं।

  1. कीबोर्ड से दूर कदम। टहलने की बात करें, दौड़ने के लिए जाएं, कॉफी पर अपने सहकर्मी से बात करें
  2. 10 साल का हो गया! मेरे अनुभव ने मुझे बहुत मदद की है।
  3. बाइनरी चॉप का उपयोग करें। समस्या को दो में विभाजित करें और समस्या को कम करें: दोहराएं।
  4. शरलॉक होम्स याद रखें: जब आपने संभव को समाप्त कर दिया है, तो जो भी शेष है (कोई बात नहीं) कितना अजीब है
  5. अपना परीक्षण डेटा जांचें। खैर मेरी वास्तव में मुश्किल समस्याओं के आधे से अधिक दोषपूर्ण डेटा और दोषपूर्ण कोड या एल्गोरिदम के कारण हुआ है।

1

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


1

इस पर बहुत अच्छा सवाल है।

मेरा जवाब था:

सुधार करने का सबसे अच्छा तरीका अभ्यास करना है!

आरएसएस फ़ीड की सदस्यता लें: http://www.mensa.org.uk/patalog/ और उन्हें पूरा करने के लिए समय निकालें क्योंकि वे बाहर आते हैं।

एक पहेली-ए-डे डेस्क कैलेंडर (जैसे http://www.calendars.com/product.asp?PID=1&MGID=-1&IID=46387&cm_mmc=Affiliate_Program--performics--k133/666-_-DDI%20Link ) एक अच्छा है विचार भी करें क्योंकि यह आपको नियमित, काटने के आकार और विभिन्न समस्याओं को हल करने के लिए देगा।

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

संपादित करें: यह भी देखें: http://www.mindtools.com/pages/main/newMN_TMC.htm अच्छी समस्या सुलझाने के टिप्स के लिए।


1

शतरंज खेलो

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

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

शतरंज दर्शाता है कि कैसे अध्ययन और अभ्यास एक बहुत ही रैखिक फैशन में ठोस सुधार का नेतृत्व करते हैं। यह प्रोग्राम की समस्या को हल करने के साथ ही सच है।

शतरंज खेलना आपको सीखने में कितना अच्छा है, इस पर एक अच्छी समझ पाने में मदद कर सकता है। भले ही आप 10 साल से प्रोग्रामिंग कर रहे हों (या शतरंज खेल रहे हों), आप अभी तक ग्रैंडमास्टर नहीं हैं।


मैंने नियमित रूप से शतरंज खेलने के साथ अपने दिमाग को तेज किया है।
पॉल नाथन

1

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


1

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


0

समस्या-समाधान का सबसे कठिन हिस्सा "अवधारणात्मक संकीर्णता" है।

आप कुछ ऐसा उठाते हैं जो समस्या के रूप में प्रतीत होता है और जब तक आप थक नहीं जाते और आगे नहीं बढ़ रहे हैं, तब तक डॉगली उसके बाद जाते हैं।

ऐसा करने का तरीका सुनिश्चित करना है - बिल्कुल सुनिश्चित - आप वास्तव में समस्या को समझते हैं। "समस्या का समाधान" समस्या-समाधान का सबसे महत्वपूर्ण हिस्सा है।

कभी-कभी वे इसे "बॉक्स के बाहर की सोच" कहते हैं। "बॉक्स" एक संकीर्ण दृष्टिकोण है जिसमें वास्तविक, मौलिक समस्या शामिल नहीं हो सकती है। बॉक्स के बाहर सोचकर हल करने के लिए सही समस्या को देखना है।

गलत समस्या पर समय से पहले ध्यान देने वाली संकीर्णता से बचने के लिए रणनीतियों पर कई किताबें हैं।

अधिकतर ट्रिक यह पहचानने के लिए है कि वास्तविक परिणाम क्या होना चाहिए। फिर यह पता लगाएँ कि क्या वांछनीय परिणाम को अवरुद्ध करता है।


0

ईमानदारी से, मुझे लगता है कि हर कोई अलग है, इसलिए बेहतर समस्या हल करने के लिए हर किसी का रोड मैप अलग है। आप अन्य लोगों के अनुभव से सीख सकते हैं, लेकिन अंत में आपको अपना रास्ता खुद बनाना होगा। यह अनिवार्य रूप से कुछ "कठिन तरीका" सीख रहा है, लेकिन यह इस मामले में प्रभावी है।

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

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


0

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


0

प्रोग्रामर के लिए यह आसान है कि वह अपनी पसंदीदा प्रोग्रामिंग भाषा के साथ समस्या को हल करने की कल्पना करके मानसिक रूप से किसी समस्या पर हमला करे। क्लासिक बढ़ई की तरह जो नाखूनों के रूप में सभी समस्याओं को देखता है जब उसका पसंदीदा उपकरण हथौड़ा होता है।

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

मेरे लिए एक पुराना व्यावहारिक उदाहरण यह है कि मैंने सीखा कि कैसे कुशल सहकारी मल्टीटास्किंग को लागू किया जाए जब मुझे एहसास हुआ कि मेरी समस्या को वास्तव में प्रीमेप्टिव थ्रेड्स की आवश्यकता नहीं है, भले ही मैं आमतौर पर उन सभी म्यूटेक्स को पीटते हुए अपने कम्फर्ट ज़ोन से आगे निकल गया हूं। अंततः हमेशा कुछ बिंदु पर सहज होने से रोकने के लिए लगता है ..)।


0

अनुप्रयोग विकास में, हम जिन समस्याओं का सामना करते हैं उनमें से कई या तो हमारे अपने आविष्कार हैं या उस बेवकूफ के आविष्कार से जो हमें विरासत में मिला है। किसी समस्या को हल करना अक्सर स्रोत को खोजने के लिए नीचे आता है । अक्सर, एक बार जब हम पाते हैं कि यह कहाँ हो रहा है, तो केवल क्षमता है कि इसे हल करने के लिए क्या आवश्यक है ।

उस अंत तक:

  1. अपना मंच जानें।
  2. अपने उपकरण जानें।
  3. जानें कि आपके प्लेटफ़ॉर्म के लिए कौन से टूल उपलब्ध हैं जिनका आपने अभी तक सामना नहीं किया है।

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

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


0

आपके उत्तर के दो भाग हैं:

a) वास्तविक समस्या समाधान के लिए तकनीक

ख) सोच और समस्या को सुलझाने में अपने मस्तिष्क को स्वाभाविक रूप से "बेहतर" बनाना

तकनीक पर हमेशा कुछ बेहतरीन जवाब होते हैं (मान लीजिए आप समस्या आदि जानते हैं) तो मैं उतना कवर नहीं करने वाला हूं। अपने मस्तिष्क को प्रशिक्षित करने के लिए, उन चीजों का एक जोड़ा है जो आप उन synapses को पार करने और अधिक परस्पर संबंध बनाने के लिए कर सकते हैं

1) एक नई भाषा सीखें, एक वास्तविक भाषा (जैसे फ्रेंच, या चीनी इन दिनों एक अच्छी शर्त हो सकती है)

२) नया वाद्य बजाना सीखें

३) कुछ कलात्मक काम करें जैसे पेंट, ड्रॉ या स्कल्प्चर

4) स्क्रैबल खेलें या क्रॉसवर्ड करें

५) आप जैसा डांस करते हैं, उससे मतलब है। नहीं, मैं मजाक नहीं कर रहा हूं। नृत्य से आपके मस्तिष्क और सोच पर प्रभाव पड़ता है

6) अपने अनुभवों को व्यापक बनाएं, एक क्षेत्र में एक सिद्धांत को दूसरे क्षेत्र में लागू करने से अभिनव समाधान आए हैं इसलिए विभिन्न क्षेत्रों और क्षेत्रों में अध्ययन करें जो आपको दिलचस्प लगते हैं

7) विचार प्रक्रिया को बेहतर बनाने के लिए व्यायाम, व्यायाम महत्वपूर्ण रूप से महत्वपूर्ण है

अंत में, मैं कठिन समस्याओं को हल करने के लिए अपना सर्वश्रेष्ठ सुझाव देने जा रहा हूं: एक लंबी सैर करें। मैंने पाया है कि यह आपके सिर को साफ करने और एक चिंतन समस्याओं को दूर करने के लिए चमत्कार का काम करता है



0

मेरी सलाह होगी कि किताब बाहर फेंक दो!

सचमुच नहीं। मेरा क्या मतलब है, मौजूदा विषय के बारे में जानने के बिना, एक विषय क्षेत्र दर्ज करें जिसमें आपको बहुत कम अनुभव है, और वहां कठिन समस्याओं को हल करें। आपकी रचनात्मकता और आलोचनात्मक सोच और शायद संदर्भ पुस्तिका के अलावा कुछ नहीं।

आप एक छवि प्रारूप तैयार कर सकते हैं। या एक वेब सर्वर। या कंप्रेशन स्कीम। फाइल सिस्टम। कर्नेल। कृत्रिम होशियारी। प्रोग्रामिंग भाषा। कंप्यूटर दृष्टि प्रणाली।

कुछ ऐसा जो आपको दिलचस्प लगे, जो कि काफी जटिल है, और जिसके बारे में आपने कभी नहीं सीखा। इसके बारे में पढ़ें: बस सीधे कूदें। प्रयोग करें गलतियाँ करना। किसी कार्य को दोहराना।

मदद के लिए मत पूछो। ट्यूटोरियल से दूर रहें। सिद्धांत से दूर रहो। शेल्फ से एक समाधान न खींचें।

क्यों?

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

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

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

अपने समाधान को सही बनाने की कोशिश मत करो। बस अपने आप को साबित करें कि आप समस्या को हल कर सकते हैं । "कैन-डू" रवैया अपनाएं, और यदि आप समस्या से भयभीत महसूस करते हैं, तो याद रखें कि जिस व्यक्ति ने पहली बार इसे हल किया था, वह शायद उतना ही जानता था जितना आप करते हैं (वास्तव में, उन्हें पता नहीं था कि इसका कोई हल है!)।


0

समस्या को हल करना कुछ ऐसा नहीं है जिसे पढ़ाया जा सकता है या पढ़ा भी जा सकता है। समस्याओं को हल करने में बेहतर होने का एकमात्र तरीका समस्याओं को हल करना है।

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

मैं व्यावहारिक सोच और सीखने की एक प्रति लेने की सलाह देता हूं : एंडी हंट द्वारा रिफ्लेक्टर योर वेटवेयर । यह समझने के बारे में एक किताब है कि आप कैसे सोचते हैं, प्रतिक्रिया करते हैं और सीखते हैं। यह व्यवहार सिद्धांत और अन्य संज्ञानात्मक विज्ञान से प्रासंगिक सिद्धांतों को लाता है। यह विशेष रूप से सॉफ्टवेयर डेवलपर्स की ओर सक्षम है, लेकिन किसी भी ज्ञान कार्यकर्ता के लिए लागू है।


0

खुद की तरह प्रोग्रामिंग में नए शौक के लिए मैं "थिंक लाइक अ प्रोग्रामर" पुस्तक की सिफारिश करता हूं। पहले अध्याय में यह समस्या को हल करने और विभाजित करने के रूप में ऐसी समस्या को सुलझाने की तकनीकों को शामिल करता है, जो आप जानते हैं, कम करना, सादृश्य और प्रयोग के साथ शुरू करते हैं।

फिर सी ++ में उदाहरणों के साथ अधिक उन्नत तकनीकें हैं: सरणियों, बिंदुओं और गतिशील मेमोरी, कक्षाएं, पुनरावृत्ति, कोड के उपयोग के साथ समस्याओं को हल करना। मैं इस हिस्से पर टिप्पणी नहीं कर सकता क्योंकि यह अभी तक मेरे लिए बहुत कठिन है।


-1

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


-1

समस्याओं का एक बहुत हल करके अलविदा!

आप आसान समस्याओं के साथ शुरू करते हैं और समस्याओं के बजाय आसान दिनचर्या बन जाने पर आप अधिक कठिन समस्याओं की ओर बढ़ते हैं।


-4

अपने आप को सिद्धांत के लिए न रखें, अधिक अभ्यास करें। अभ्यास के साथ अनुभव आता है।

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