2009-02-20 23 views
17

मैं थोड़ी देर के लिए कोडिंग कर रहा हूं और कुछ प्रोग्रामिंग भाषाओं के साथ confortable हूँ लेकिन अब मुझे लगता है कि मुझे अपनी समस्या हल करने या प्रोग्राम डिजाइन तकनीक में सुधार करने की जरूरत है।मैं अपने प्रोग्राम डिज़ाइन और समस्या निवारण तकनीक को कैसे सुधार सकता हूं?

किसी समस्या के समाधान के रूप में प्रोग्राम को डिजाइन करने में सक्षम होने के लिए मुझे किस कौशल की आवश्यकता है?

अधिक: प्रश्न यह है कि कोड को बेहतर तरीके से कैसे हल किया जाए, समाधान के बारे में है।

उत्तर

21

कई अलग-अलग दृष्टिकोण/सुझाव हैं।

  1. पुस्तकें। पैटर्न, सुरुचिपूर्ण डिज़ाइन इत्यादि द्वारा डिज़ाइन, कुछ दूसरों को सॉफ़्टवेयर पर लागू होते हैं कि इंजीनियरिंग समस्याओं को सामान्य रूप से हल किया जाता है।

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

  3. चुनौती के लिए उठो। जब आप एक समस्या में आते हैं कि एकमात्र समाधान आप "बदसूरत" या "गंदे" के साथ आ सकते हैं। एक सुरुचिपूर्ण समाधान खोजने की चुनौती के लिए उठो। कम से कम जब आप शुरू करते हैं तो सुरुचिपूर्ण समाधान 9 0% जुनूनी बाध्यकारी होते हैं, 10% दुःखद होते हैं।

  4. प्रश्न पूछने के लिए शर्मिंदा मत बनो। मुझे लगता है कि आप इसे नीचे ले सकते हैं। तो बस सवाल पूछते रहो।

+0

मुझे कुछ अच्छी समस्याएं कहां मिल सकती हैं जिनका उपयोग मैं कोड के लिए कर सकता हूं? – Ali

+0

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

+0

अब मैं आपका मतलब क्या है, धन्यवाद के बारे में स्पष्ट हूं। .NET में मेरी पृष्ठभूमि, क्या ऐसी वेबसाइट है जहां लोग अपने विचारों और समस्याओं को प्रकाशित करते हैं? – Ali

6
+0

सहमत हैं, हालांकि यह शुरुआती लोगों के लिए थोड़ा सा हो सकता है, यह वास्तव में सॉफ्टवेयर निर्माण का बाइबल है। –

+1

यह लगभग 1000 पृष्ठ है, क्या यह वास्तव में इसके लायक है? – Ali

+0

@Ali: निश्चित रूप से इसके लायक है। मैं अब इस पुस्तक की सिफारिश नहीं करता क्योंकि मुझे लगता है कि यह बिना कहने के चला जाता है, लेकिन हर पेशेवर डेवलपर को इसे पढ़ना चाहिए। –

2

स्टार्टर्स मैं स्टीव McConnell की पुस्तक "कोड पूरा, 2 संस्करण" पढ़ने सुझाव है के लिए

http://cc2e.com/

2

मैं कोड पूरा विषय में ऊपर पोस्ट से सहमत हैं, टेस्ट ड्राइव डेवलपमेंट और सॉलिड सिद्धांतों पर कुछ शोध भी करें।

7

आपके द्वारा या अन्य लोगों ने आपके कोड को विस्तारित या बनाए रखने वाले सभी मुद्दों की एक सूची रखें।

नियमित रूप से उस सूची के माध्यम से जाएं और इसे कठिनाई की मात्रा से क्रमबद्ध करें। फिर, उन कठिनाइयों को बनाएं या ढूंढें जो कठिनाइयों को कम करते हैं और उन्हें "सर्वोत्तम प्रथाओं" की अपनी सतत विकसित सूची में बनाते हैं।

2

समस्या निवारण तकनीक के लिए, देखें कि अन्य लोगों ने समस्याओं का समाधान कैसे किया है। मैं The Algorithm Design Manual और Algorithms in a Nutshell की अनुशंसा करता हूं। इन दोनों पुस्तकों में आपको अंतिम समाधान पर जाने के बजाए विचार प्रक्रिया दिखाने के लिए समाधान के कई पुनरावृत्तियों के माध्यम से एक समस्या वक्तव्य से लिया जाता है।

2

मुझे मिला सबसे प्रभावी समाधान एक समस्या को ढूंढना और हमला करना है। छोटी समस्याओं से शुरू करें और अपना रास्ता तैयार करें। यदि आवश्यक, समस्याएं बनाएं (हालांकि काम पर नहीं, और निश्चित रूप से प्राथमिक शाखा पर नहीं)।

एक बार जब आप समस्या को समझ लेते हैं, तो इसे स्वयं समझने का प्रयास करें।यदि आप असफल होते हैं, तो Google इसे sh * t से बाहर कर देता है। भले ही Google पर पहली हिट आपकी समस्या को हल करे, वैसे भी अन्य को देखें। यह आपको समस्या सुलझाने की प्रक्रिया और लोगों के दिमाग कैसे काम करता है, इसकी समझ प्रदान करने में मदद करेगा।

+0

उसी प्रश्न से मैंने इन्फैमी से पूछा, मैं उन्हें हल करने में कुछ अच्छी समस्याएं कैसे ढूंढ सकता हूं? – Ali

+0

1: एक बड़ी कंपनी की सॉफ्टवेयर टीम में शामिल हों, उन्हें हमेशा समस्याएं होती हैं। 2: एक ओएसएस परियोजना में शामिल हों जैसे फ़ायरफ़ॉक्स या मेटावेब्लॉग। 3. कुछ तोड़ो। – tsilb

2

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

alt text http://headfirstlabs.com/Images/hfooad_cover.gif

http://headfirstlabs.com/books/hfooad/

0

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

कोड पूर्ण एक उत्कृष्ट पुस्तक है (ऑप्टिमाइज़ेशन पर अध्याय के लिए कीमत के लायक - "कोड ट्यूनिंग" - अकेले), लेकिन डिजाइन के लिए ... मुझे पूरा यकीन नहीं है। दूसरा संस्करण इस पर बेहतर हो सकता है, मेरे पास केवल पहला है ... और अब तक बहुत कुत्ता हो रहा है :-)

-3

कोडिंग में बेहतर होने के लिए, कोड और अधिक।

+0

है सवाल यह है कि कोड को बेहतर तरीके से कैसे हल किया जाए, इसके समाधान के बारे में सवाल है। – Ali

3

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

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

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

+0

यह एक अच्छा विचार है, लेकिन कोई सलाहकार कैसे ढूंढ सकता है? – Ali

+0

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

0

मेरी राय में उन्नत स्तर के लिए मध्यवर्ती से सबसे अच्छा तरीका है:

अच्छा अन्य लोगों द्वारा लिखे गए कोड पढ़ें।

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

+0

आप उन कोड कहां मिल सकते हैं? – Ali

+0

Sourceforge आदि में कई खुली स्रोत परियोजनाएं हैं। हालांकि सभी कोड बहुत अच्छे नहीं हैं, लेकिन आपको शायद कई उन्नत ओपन सोर्स प्रोजेक्ट्स में अच्छे उदाहरण मिलेंगे। –

+0

Sourceforge.net एकमात्र जगह नहीं है। Codeplex.com, code.google.com, github.com जैसे कई अन्य हैं ... –

1

अब आप जिस भाषा का उपयोग कर रहे हैं उससे अलग भाषाओं में खेलना शुरू करें। और इसके साथ मैं जावा का उपयोग नेट डेवलपर के रूप में शुरू करने का नहीं है।

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

यहां विचार यह है कि आप ऐसी भाषा का उपयोग करना शुरू करते हैं जो आपकी सोच के तरीके को बदल देगा। कभी-कभी आपको फिर से मोड़ने के लिए अपने जंगली गियर को एक बड़े स्लेजहैमर के साथ मारने की ज़रूरत होती है। एक अजीब भाषा इस हथौड़ा बन सकती है।

3

एक सलाहकार खोजें - जिसने कई वर्षों से आपकी विशेष समस्या डोमेन में काम किया है - और उनसे सीखें।

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

आपके साथियों से विशिष्ट, रचनात्मक प्रतिक्रिया तुरंत उपयोगी होती है।

1

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

एक सलाहकार सबसे अच्छा है।

उसमें अनुपस्थिति में, कुछ लिखें, फिर इसे हटाएं। फिर दो दिन बाद फिर से लिखना है।

अजीब लगता है, लेकिन दूसरी बार, आप एक बेहतर काम करेंगे :-) चींटियों की तरह, हम अपनी लाइनें जितनी अधिक यात्रा करते हैं उतनी ही अधिक यात्रा करते हैं।

पॉल।

1

मुझे लगता है कि आप Programming Pearls का आनंद लेंगे। यह बहुत पठनीय है, युक्तियों से भरा हुआ है, और मुझे समस्याओं से संपर्क करने के बारे में बहुत सारी जानकारी दी है।

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

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

अब केवल तभी मुझे पता था कि क्या डोनाल्ड नुथ पुरुष है कि धूम्रपान ....

1

स्रोत फोर्ज या गूगल कोड की तरह ओपन सोर्स प्रोजेक्ट के महान पुस्तकालय का उपयोग करें। उन परियोजनाओं में से एक के टुकड़े को लागू करने की कोशिश करें और फिर तुलना करें। आंकड़ा प्रत्येक डिजाइन में बेहतर क्या है। सीखना जांच है जो खोज की ओर ले जाती है।

0

खेद acccidently डुप्लिकेट जवाब भेजने के लिए, पता लगा नहीं किया है को नष्ट करने के लिए कैसे

स्रोत फोर्ज या गूगल कोड की तरह ओपन सोर्स प्रोजेक्ट के महान पुस्तकालय का उपयोग करें। उन परियोजनाओं में से एक के टुकड़े को लागू करने की कोशिश करें और फिर तुलना करें। आंकड़ा प्रत्येक डिजाइन में बेहतर क्या है। सीखना जांच है जो खोज की ओर ले जाती है।

0

1) जितनी किताबें कर सकते हैं उतनी किताबें पढ़ें।

2) जितना आप कर सकते हैं उतना ओपन सोर्स कोड का अध्ययन करें।

3) कोड, कोड समीक्षा और जो भी आप कर सकते हैं जोड़ी प्रोग्रामिंग करते हैं।

शुभकामनाएं :)

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