2009-03-02 15 views
20

आपको हल करने के लिए दिलचस्प समस्याएं कैसे मिलती हैं?आपको हल करने के लिए दिलचस्प समस्याएं कैसे मिलती हैं?

मैं अक्सर नई प्रोग्रामिंग भाषाओं को सीखना चाहता हूं। हालांकि, मुझे लगता है कि करने के लिए वास्तव में यह समझते हैं, मैं कुछ है जो लिखना चाहिए:

  • वास्तविक यह कुछ वास्तविक दुनिया समस्या को हल करना चाहिए। उस समस्या को नया होना जरूरी नहीं है (वास्तव में, एक संदर्भ समाधान होना एक अच्छा विचार हो सकता है), लेकिन यह कुछ ऐसा होना चाहिए जो मुझे कुछ गड़बड़, गंदे विवरणों को काम करने के लिए मजबूर करता हो। मैं गणित पहेली को हल नहीं करना चाहता हूं या एल्गोरिदम-और-डेटा-संरचनाओं को कार्यान्वित नहीं करना चाहता, क्योंकि यह केवल मुझे गणित को हल करने के लिए सिखाता है (या डीएस) 'new-language में समस्याएं।

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

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

तो, आप कैसे काम करते हैं (या आप) काम करने के लिए दिलचस्प कुछ खोजने की समस्या को हल करते हैं?

विशेष समाधान-पर, काम करने की समस्याएं बहुत सराहना की जाएगी, लेकिन (अहंकार क्षमा करें) वे सिर्फ "गूंगा ज्ञान" हैं। समस्या से निपटने और हमला करने के नए तरीकों से मैं सबसे ज्यादा प्रभावित हूं (यानी एल्गोरिदम >> डेटा: डी)।

संपादित: विजेताओं अब तक कर रहे हैं "एक खेल बनाने के" और "कुछ है कि आप के बारे में गुस्सा दिलाती है ठीक (प्रोग्रामिंग | comptuers का प्रयोग करके)"।

खेल सुझाव इसके लिए जा रहा है कि बहुत सारे सरल खेल हैं जिन्हें मैं पुन: कार्यान्वित कर सकता हूं (मुझे आक्रमण करने के लिए समस्याओं का एक बड़ा चयन दे रहा है), वे निश्चित रूप से वास्तविक दुनिया हैं, और मैं एक गेमर हूं इसलिए मैं ' मैं अच्छे खेल के बारे में भावुक हूँ।

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

(आप दोनों एक वोट दें अर्जित किया। एक स्वीकार की राह पर हो सकता है)

+0

समुदाय विकी – Malfist

उत्तर

2

हर बार जब मैं कुछ अधिक किया जा रहा है और फिर से मैं पुन: प्रयोज्य कोड के कुछ टुकड़े बनाने का अवसर देख देखें। यह था कि मेरे डीएएल के साथ, और परियोजनाओं के कई अन्य टुकड़े मैंने काम किया।

+0

दयाम होना चाहिए - यह मेरा जवाब था ... तो यह +1 है! –

0

मुझे आमतौर पर पता चलता है कि मुझे पहले से ही एक समस्या है जिसे मैं सामना कर रहा हूं जिसे एक अलग भाषा में आसानी से किया जा सकता है। उदाहरण: कई भाषाओं में पीडीएफ के साथ काम करना।

3

मैं इस "मानक" समस्या यह है कि मैं कई बार उपयोग किया है एक नई भाषा सीखने के लिए एकत्र।

http://homepage.mac.com/s_lott/books/oodesign.html

यह असली है। इसमें कुछ मूर्त मूल्य है। यह खत्म हो गया है।

+0

समस्या दिलचस्प हो सकती है, लेकिन मुझे यह अपरिहार्य महसूस हो रहा है कि पुस्तक में प्रस्तावित डिज़ाइन में बहुत से YAGNI सामान्यीकरण और बहुत से वर्ग शामिल हैं जो डिज़ाइन को आसानी से जोड़ते हैं। –

+0

कुछ सामान्यीकरण भाषा की विशेषताओं को जानने में मदद करने के लिए हैं। कुछ ओओ डिजाइन सिद्धांतों को पढ़ाने के लिए हैं। तो, आप तर्क दे सकते हैं कि वे "बहुत सामान्यीकृत" हैं। एक व्यक्ति का "एक्स्टेंसिबल" हमेशा एक और व्यक्ति यागनी है। एक्स्टेंसिबल हमेशा बहस योग्य होता है जब तक आपको वास्तव में इसकी आवश्यकता नहीं होती है। –

0

हम्म। यदि यह आपका लक्ष्य है, तो आप इसे दो चरणों में आज़मा सकते हैं ... चीजों के एल्गोरिदम पक्ष के लिए, मैं अत्यधिक प्रोग्रामिंग चुनौतियों को out there पर देखने का सुझाव देता हूं, और इसे स्कीना की पुस्तक Programming Challenges पढ़ने के साथ मिलकर करता हूं। यह एक एल्गोरिदम और डेटा संरचना बिंदु से समस्याओं का समाधान करने के तरीके के बारे में सिद्धांत का एक बड़ा सौदा प्रदान करता है, और फिर आपको नमूना प्रश्नों के समूह पर इंगित करता है जहां आप इन विचारों को अपने आप में क्रियान्वित करने का प्रयास कर सकते हैं। यह आपको बहुत ही अच्छे तरीके से मानसिक wringer के माध्यम से निश्चित रूप से डाल देगा। प्रोजेक्ट यूलर के समान ही है, लेकिन गणित लोगों के बजाए हार्ड-कोर एल्गोरिदम और डेटा-स्ट्रक्चर लोगों के लिए।

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

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

+0

"आप उन कुछ दानों से संपर्क कर सकते हैं जिनके आप शौकीन हैं [...]" - मुझे अंतर्निहित ब्याज की भावना (लोगों को निराश होने की सजा से बचने) से अधिक प्रेरित किया जाएगा (जो हासिल करके पुरस्कृत किया जा रहा है मैं कुछ व्यक्तिगत कारणों से चाहता था)। –

+0

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

3

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

12

विचारों को उत्पन्न करने के लिए, मैं इसे पूछने के लिए हमेशा मददगार है लगता है "क्या प्रोग्रामिंग के बारे में कीड़े मुझे" और "क्या कंप्यूटर पर काम करने के बारे कीड़े मुझे।"

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

चुनें ध्यान से जो परियोजनाओं आप समाप्त करने के लिए चाहते हैं, और पीट हेन के शब्दों को याद:

एक जगह में रखो
जहां यह आसान है
देखने गुप्त चेतावनी को

T. T. T. 

जब आपको लगता है कि
धीरे-धीरे आप चढ़ाई,
यह याद रखना महत्वपूर्ण है कि

Things Take Time. 
+1

+1, धैर्य अधिग्रहित किया गया है और दुर्भाग्य से संक्रामक नहीं है। –

7

एक खेल बनाने में अच्छी तरह से है। आप किसी भी भाषा के बारे में एक टन सीखेंगे। यह फैंसी होना जरूरी नहीं है। एक कालकोठरी क्रॉल या कुछ बनाओ।

+0

+1 :) सभी समय का मेरा पसंदीदा खेल 'बार्ड की कहानी' है ..एक नई भाषा सीखते समय इस तरह कुछ लागू करने के लिए इसका मज़ा। –

+0

एक नई भाषा या मंच सीखने के लिए मेरा मानक अभ्यास एक वीडियो पोकर सिम्युलेटर को लागू करना है। यह मामूली नहीं होने के लिए काफी जटिल है, लेकिन यह एक सप्ताहांत में करने योग्य है। –

1

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

कभी-कभी मैं लोगों को लोगों को देखता हूं .. या एक दैनिक तिलचट्टे अपने दैनिक गतिविधियों के बारे में जा रहा है।

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

1

विकसित करने के लिए सॉफ़्टवेयर के बिट्स के लिए "प्रेरणा" का एक अन्य स्रोत (या सिर्फ तकनीक का काम करने का अन्वेषण करें) वह है "यह इसका सामना क्यों नहीं करता है?" या "यह उस के साथ काम करना चाहिए!" क्षणों। मेरे पास उन क्षणों में से कुछ हैं जिनके साथ एक्सएसडी की कोड पीढ़ी जैसी चीजें हैं।

एक अन्य स्रोत वे हैं "ऐसा करने के लिए एक और शानदार तरीका होना चाहिए!" क्षणों। सरल छोटी चीजें जैसे सी # "अगर (एक्स टाइप टाइप है) do_a else अगर (x टाइप_बी है) bo_b else ...."। चीजों को करने के बेहतर तरीके के बारे में सोचने के लिए मुझे शुरू करें।

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

0

मैं "समय और झुकाव प्राप्त करने" के लिए परियोजनाओं/कक्षाओं/कार्यों की एक सूची बनाए रखता हूं। मैं अन्य शौकों के लिए समान सूचियां बनाए रखता हूं। तो अगर मैं ऊब रहा हूं या चुनौती चाहता हूं तो हमेशा कुछ करना है।

1

हालांकि नहीं जाहिरा तौर पर वास्तविक दुनिया, मैं एक विचार परियोजनाओं कि कम से कम finishable, और शायद कुछ आप उसके बाद फिर से ऐसा करने के लिए प्रेरित किया जाना चाहिए (, आप चाहिए हैं का एक अच्छा स्रोत के लिए मिला है फ्लॉस हर दिन: पी)।

समीक्षा की समीक्षा और परीक्षण के लिए, अपने सीएस शिक्षा के हिस्से के रूप में सीखा है कि विभिन्न एल्गोरिदम लागू करें।कुछ परियोजनाएं:

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

IIRC, mona एक परिमित अवस्था automaton एक बिजली के सर्किट की सत्यता की पुष्टि करने के लिए इस्तेमाल thingie है; ISTR मेरे व्याख्याता अर्थशास्त्र में रैखिक प्रोग्रामिंग के अनुप्रयोगों के बारे में बात करते हैं, और जीसीसी आवंटन पंजीकृत करता है (जो ग्राफ रंग है, जो एनपी-पूर्ण है)। निश्चित रूप से क्रिप्टो ऑनलाइन क्रेडिट कार्ड लेन-देन सुरक्षित करता है। तो यह पूरी तरह से अवास्तविक दुनिया नहीं है :)

1

क्या मुझे बहुत देर हो चुकी है? यहां एक "सब-असली" समस्या है। चूंकि आपको गेम चीज़ पसंद आया। यह Java4K देखें, आपको केवल 4096 बाइट्स में एक गेम बनाना चाहिए। आप जावा के बारे में बहुत कुछ सीखेंगे, कोड अनुकूलन के बहुत सारे और निश्चित रूप से, सरल कैसे सोचें।

और दिन के अंत में, आप एक नया खेल :)

0

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

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

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

संबंधित मुद्दे