मैं एक अच्छा प्रोग्रामर नहीं हूं (तर्क में), मुझे इसे कैसे ठीक करना चाहिए? [बन्द है]


50

ठीक है, तो यहाँ मेरी समस्या है:

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

लेकिन, जब भी मैं कुछ तर्क समस्या को हल करने की कोशिश करता हूं, तो मुझे समाधान के साथ आने में वास्तव में मुश्किल होती है।

उदाहरण के लिए, conversion of decimal to romanजब मैंने समाधान देखा, तो मुझे पता चला कि यह एक साधारण समस्या है। लेकिन मैं कोशिश करने के 1-2 घंटे के बाद इसे लागू करने में सक्षम नहीं था!

मुझे लगता है कि मैं गूंगा हूं और सॉफ्टवेयर इंजीनियर होने के लायक नहीं हूं। पहेली सुलझाने की क्षमता मूल रूप से एक महान प्रोग्रामर को आनी चाहिए। लेकिन जब मैं कुछ पहेलियों को हल करने की कोशिश करता हूं, तो मुझे कोई हल नहीं मिल पाता है और मैं इसे पूरा कर लेता हूं! .... और मुझे इससे नफरत है

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

मुझे पदावनत महसूस होता है :(

टीएल; डीआर: मैं एक व्यावहारिक दृष्टिकोण (हमारे उत्पाद में सुविधाओं को लागू करने) से सामान को समझता हूं, लेकिन प्रोजेक्टयूलर कहने से समस्या पर काम करने की कोशिश करते समय, मैं बुरी तरह से परेशान हूं! और मुझे अपने दिमाग को तेज करने की आवश्यकता है !

तो, मेरे सवाल हैं:

  1. मुझे इसे ठीक करने के बारे में कैसे जाना चाहिए? क्या मुझे प्रोजेक्ट यूलर समस्याओं को हल करने (और अपने आप को मजबूर करने) के साथ शुरू करना चाहिए? भले ही मुझे कुछ बुनियादी समस्याओं को हल करने में घंटों लग जाएं ?
  2. या मुझे मूल बातों पर वापस जाना चाहिए और कुछ बुनियादी गणित का अध्ययन करना चाहिए?
  3. मुझे वास्तव में पहेली हल करने में मज़ा नहीं आता है। लेकिन मैं इसे अपने स्वयं के लिए मजेदार बनाना चाहता हूं! और मुझे लगता है कि अगर मैं उन्हें बेहतर तरीके से समझूंगा, तो मुझे अच्छा लगेगा!

पुनश्च: मुझे कभी सीएस में शिक्षित नहीं किया गया था (मेरा अंडरग्रेजुएट इलेक्ट्रिशियल था)। लेकिन यह एक आकर्षक डेवलपर होने का बहाना नहीं है।

धन्यवाद!


3
अगर यह आप के लिए पहेली को हल करने में मज़ा नहीं है तो परेशान क्यों!
V4Vendetta 6

3
यह मज़ेदार नहीं है क्योंकि मेरे पास इसे हल करने में कठिन समय है। अगर मुझे यह अच्छा लगता है, तो मुझे यकीन है कि मुझे यह पसंद आएगा!
जॉन

1
तुम हमेशा कोशिश कर सकते यह (यदि आप को गंभीरता से नशे की लत चेतावनी, कर रहे हैं पहेली को हल करने में)
Benjol

2
मूल रूप से कुछ भी नहीं आता है। यहां तक ​​कि सबसे बुनियादी कौशल सीखने की जरूरत है। मैं आवश्यक क्षमताओं के प्रशिक्षण के लिए खेल के मैदानों के रूप में कैलकुलस और शास्त्रीय यांत्रिकी की सिफारिश करता हूं, लेकिन कई अन्य विषय (पूरी तरह से गैर-गणितीय सहित) ऐसा कर सकते हैं।
एसके-लॉजिक

3
@ जॉन ने पुष्टि की। यह एक कठिन समस्या थी। यदि आप इसे 5 मिनट में हल नहीं कर सकते तो आपको बुरा नहीं मानना ​​चाहिए। इसे करने के लिए डेढ़ घंटे, विकी को रोमन अंकों के बारे में पढ़ने के बाद, और केवल एक अन्य कार्यान्वयन के परिणामों के साथ इसके परिणामों की तुलना करके मैं बग को ठीक करने में सक्षम था। मैंने (कई अन्य लोगों की तरह) सोचा था कि आईएल एक वैध संख्या थी। गलत। XXXIX सही संख्या है। इसके अलावा मुझे इसे अनुकूलित करने के लिए अन्य कार्यान्वयन देखने थे (मैं प्री-कैशिंग II, III, XX, XXX इत्यादि था, लेकिन यह बेकार है)। बुरा मत मानना!
xanatos

जवाबों:


24

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

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

इसलिए, समस्या समाधान पर काम करने के अलावा, आपको यह देखने की जरूरत है कि ऐसा करने के लिए आप कौन से टूल और कौशल लाते हैं। यदि आप काम पर एक नई सुविधा पर काम करने जा रहे थे, तो क्या आप बिना आईडीई, कोई डिबगर, कोई प्रलेखन, कोई इंटरनेट और कोई स्रोत कोड नहीं रखते हैं? बिलकूल नही!

समस्याओं को हल करने के लिए उपकरण हैं, आप उन्हें अभी तक नहीं जानते हैं .... अभी तकविकिपीडिया लेख में समस्या सुलझाने की तकनीकों के कुछ लिंक हैं। लेकिन सबसे महत्वपूर्ण उपकरण वैज्ञानिक तरीका हैविकिपीडिया लेख में एक व्यावहारिक दृष्टिकोण शामिल है:

  1. एक प्रश्न को परिभाषित करें
  2. जानकारी और संसाधन इकट्ठा करें (निरीक्षण करें)
  3. एक व्याख्यात्मक परिकल्पना का गठन करें
  4. एक प्रयोग प्रदर्शन और एक प्रतिलिपि प्रस्तुत करने योग्य तरीके से डेटा एकत्र करके परिकल्पना का परीक्षण करें
  5. डेटा का विश्लेषण करें
  6. डेटा की व्याख्या करें और निष्कर्ष निकालें जो नई परिकल्पना के लिए शुरुआती बिंदु के रूप में काम करते हैं
  7. परिणाम प्रकाशित करें
  8. Retest (अक्सर अन्य वैज्ञानिकों द्वारा किया जाता है)

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

अंत में, समस्या समाधान के लिए अन्य प्राथमिक उपकरण सरल चरणों के साथ इसे तोड़ रहा है । उदाहरण के लिए, प्रोजेक्ट यूलर के उदाहरणों में पहली समस्या :

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000.

हमारे यहां दो तथ्य हैं, और एक समस्या है। फैक्ट एक हमें दिखाता है कि 10. 3 * 1,3 * 2,3 * 3,5 * 1 से नीचे तीन या पांच में से कई को कैसे परिभाषित किया जाए। 5 * 2 इसलिए नहीं है क्योंकि यह 10 के बराबर है। फिर, वास्तव में दो हमें बताते हैं कि हम उन्हें 23 पाने के लिए जोड़ते हैं।

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

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


19

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

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

मुझे लगता है कि प्रोग्रामर के लिए लगातार यह सोचना महत्वपूर्ण है कि "मैं जो भी करता हूं उसमें बेहतर कैसे हो सकता हूं?", लेकिन एक अच्छा प्रोग्रामर होने के लिए जरूरी नहीं है कि आप पहेली हल करने में महान हों।

व्यक्तिगत रूप से, मुझे "मिस्ट्री जियोकैश" को हल करके मेरी पहेली हल करने का तरीका मिलता है


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

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

शानदार जवाब। मुझे कम से कम आराम से रखता है ... =]
हार्टले ब्रॉडी

9

मुझे सिर्फ आपको चेतावनी दें, जितना अधिक आप जानते हैं, उतना ही आपको एहसास होता है कि आप कितना कम जानते हैं।

बस इससे हतोत्साहित न हों। सीखते रहें और उन क्षेत्रों पर काम करने की कोशिश करें जिन्हें आप महसूस कर रहे हैं।

अब आपके प्रश्न पर मेरा सुझाव प्रोजेक्ट ईल आर पर समस्याओं पर काम करना शुरू करना होगा ।

इसके लिए मेरे कारण सरल हैं, सबसे लोकप्रिय सवाल पर शुरू करते हैं, ये सामान्य रूप से हल करने के लिए आसान समस्याएं हैं।

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

यदि आप तय करते हैं कि आप इस समस्या को हल नहीं कर सकते हैं, तो समस्या पर शोध करना शुरू करें (उत्तर की तलाश में नहीं)। फिर कोशिश नहीं की।

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

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

यदि आप पर्याप्त अभ्यास करते हैं, तो इन समस्याओं को हल करने के लिए तर्क और सोच आपके लिए आसान और आसान हो जाएगी।


4

अधिकांश प्रोग्रामिंग नौकरियों में बहुत अधिक तर्क की आवश्यकता नहीं होती है। लेकिन ये आपकी पसंद की नौकरियां नहीं हो सकती हैं।

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

प्रोजेक्ट यूलर में पहेलियों की एक विस्तृत विविधता है। इनमें से बहुत से आसानी से एक बुनियादी गणित ज्ञान के साथ उल्लेखनीय हैं। इनमें से कुछ एल्गोरिदम को जानने के बाद दूसरों को आसानी से हल किया जाता है।


2

मैं बहुत विश्वास करता हूं कि आपने अभी-अभी प्रोग्रामिंग में अपनी यात्रा शुरू की है, इसलिए पहली बात तो यह है कि अगर आपको समझ में आने में कुछ समय लगता है और इसे ठीक किया जाता है तो यह एक गैर मुद्दा है। फर्क सिर्फ इतना है कि यह प्रत्येक प्रयास के साथ है आप वाह की तरह कुछ सीख रहे हैं ! ! आखिरी चीज जो मुझे बिल्कुल भी समझ नहीं आ रही थी कि मुझे दशमलव की आवश्यकता थी और दोहरी नहीं

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

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


1

सभी के पक्ष में, अपनी कमजोरी को जानना एक वास्तविक ताकत है, इसलिए आप जानते हैं कि बेहतर खेल पाने के लिए क्या अध्ययन करना चाहिए।

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

चीयर्स, कार्लो


1

मुझे लगता है कि मुझे इससे जोड़ना चाहिए।

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

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

मूल रूप से, हालांकि, सुनिश्चित करें कि आप अभ्यास कर रहे हैं, और सिर्फ पढ़ने के लिए नहीं, और बहुत अभ्यास करें। खेल की तरह, स्पष्ट सोच में समय और मेहनत लगती है।

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

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