परियोजना की पहली पुनरावृत्ति में कितना विस्तार करना है?


15

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

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

  1. शुरुआत से ही पूरी तरह से उच्च-गुणवत्ता वाला कोड लिखें, सभी अपवाद हैंडलिंग के साथ और जैसे कि आप जानते हैं कि आपको अंततः आवश्यकता होगी।

  2. प्रारंभ से न्यूनतम रूप से काम कर रहे किसी न किसी मसौदे को लिखें, और बाद में सभी minutiae को भरने के लिए अंदर जाएं।

संबंधित प्रश्न: परियोजना को पूरा करने के लिए डिजाइन की "नीरसता" का त्याग करना कब ठीक है?


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

जवाबों:


10

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

अंतिम परिणाम

क्या आप मार्स ऑर्बिटर कंट्रोल सॉफ्टवेयर लिख रहे हैं? तो फिर आप बेहतर लानत है कि आप सबसे मजबूत कोड संभव लिख रहे हैं, आप बेहतर हो हर अपवाद की जाँच करें एक मामले में संभाला है।

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

आप वहां पहुंचने की उम्मीद कैसे करते हैं?

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

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

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

अब अपना खुद का जवाब ढूंढिए

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

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

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


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

1
@neuronet: कभी-कभी "यह सिर्फ मुश्किल से काम करता है" मजबूती पर्याप्त है। इसके बारे में सोचने का एक तरीका यह है कि सॉफ़्टवेयर के साथ काम करते समय आपको मिलने वाली निराशा की तुलना आवश्यक मजबूती के साथ की जाए। सॉफ्टवेयर के साथ मुद्दों की निराशा जितनी अधिक होती है, उतना ही महत्वपूर्ण यह है कि वे हल हो जाएं।
बार्ट वैन इनगेन शेनॉ

11

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

यह इस प्रकार है कि, यदि सॉफ़्टवेयर पैटर्न को हल करने की समस्या आपके विशेष सॉफ़्टवेयर में मौजूद नहीं है, तो आपको पैटर्न की आवश्यकता नहीं है। इसके अलावा, आपके सॉफ़्टवेयर को किन पैटर्नों की आवश्यकता हो सकती है , इस बारे में कोई भी चर्चा आपके प्रस्तावित सॉफ़्टवेयर की विस्तृत चर्चाओं में शामिल होनी चाहिए: यह क्या करना चाहिए? यह किस समस्या का हल है? कितने उपयोगकर्ता होंगे? क्या उपयोगकर्ता किसी तरह से डेटा साझा करेंगे? इत्यादि।

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

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


अच्छे बिंदु: मैंने अपने प्रश्न में यह स्पष्ट कर दिया है कि मैं उन चीजों को बंद कर रहा हूं जिन्हें मैं जानता हूं (अन्य परियोजनाओं के आधार पर) मुझे अंततः एक तैयार परियोजना में आवश्यकता होगी।
न्यूरॉनट

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

4

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

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

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

इन सभी विशेषताओं में से यह महत्वपूर्ण है कि कार्यक्रम की मुख्य बातें क्या हैं - मुख्य विशेषताएं।

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

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

फिर आप आवश्यकतानुसार शेष सुविधाओं को लागू कर सकते हैं।

कोड गुणवत्ता बनाम सुविधाएँ

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

अब, अपवाद से निपटने के बारे में क्या?

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

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


1
"मैं आमतौर पर इस धारणा पर जाता हूं कि मैं इतना व्यस्त रहूंगा कि मेरे पास फीचर पर वापस आने और इसे ठीक करने का समय नहीं होगा।" यह वह चिंता है जिसका मुझे उल्लेख करना चाहिए था। खुशी है कि आपने इसका उल्लेख किया, और सहायक पोस्ट के लिए।
1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.