तेजी से प्रोटोटाइप और रीफैक्टरिंग


9

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

तो फिर मेरी विकास प्रक्रिया इस प्रकार है:

  • यह देखने के लिए कि क्या एक मौका है, कोड का एक टुकड़ा लिखें। (दृष्टिकोण जितना अनिश्चित होगा, कोड उतना ही खराब होगा)
  • यदि यह काम करता है, तो जब तक यह सुंदर न हो, तब तक इसे रिफलेक्टर करें

मुझे लगता है कि यह समय की बर्बादी हो सकती है अगर मैंने इस बिंदु पर अपने सॉफ़्टवेयर डिज़ाइन की विस्तार से योजना बनाई, तो यह बिना नक्शे के यात्रा की योजना बनाने जैसा होगा।

क्या यह एग्ली डेवलपमेंट का हिस्सा है? आप सॉफ्टवेयर विकास में अज्ञात इलाके से कैसे निपटते हैं?


इसका उल्लेख स्वच्छ संहिता 2 में पुनरावृत्तियों के विकास के रूप में किया गया है ... चाहे आप उस पुस्तक पर विश्वास करते हों या नहीं।
रिग

जवाबों:


11

फुर्तीलेपन से इसका कोई लेना-देना नहीं है, लेकिन लोग यह मान लेते हैं कि यह इसलिए है क्योंकि उन्हें लगता है कि चंचल है; एक हिप्पी कम्यून में हेडलेस चिकन विकास।

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

आप अज्ञात से कैसे निपटते हैं यह वास्तव में एक अच्छा सवाल है और यह विकल्प पर शोध करने, उनका आकलन करने और फिर एक का चयन करने के लिए नीचे आता है।

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

यदि आप SOLID (एक्रोनिम) सिद्धांतों का पालन करते हुए कोड लिखते हैं, तो आप बाद में एक पुस्तकालय को बदलने के लिए एक अच्छी स्थिति में होंगे यदि आपने गलत विकल्प बनाया है, या, जैसा कि अक्सर होता है, आप अपनी पसंद को आगे बढ़ाते हैं।

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


2

क्या यह एग्ली डेवलपमेंट का हिस्सा है? आप सॉफ्टवेयर विकास में अज्ञात इलाके से कैसे निपटते हैं?

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

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

एक सॉफ्टवेयर डेवलपमेंट सिद्धांत है जिसे SOLID कहा जाता है । मेरे अनुभव में, उन्हें मुद्दों / समस्याओं पर लागू करना हमेशा आपकी परियोजना के कोड आधार को बेहतर बनाने में एक कदम आगे है।


2

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

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

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

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

हालांकि महत्वपूर्ण बात यह है कि कार्यात्मक युक्ति बुलेट बिंदुओं की एक सूची हो सकती है, और तकनीकी कल्पना आमतौर पर एक मॉडल होगी, जिसमें कुछ बुलेट बिंदु और प्रौद्योगिकी स्टीयर, कुछ मामलों में सिर्फ 3 या 4 पृष्ठ होंगे।

फुर्तीली परियोजना चलाते हुए भी हम दस्तावेज बनाते हैं:

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

आप देखते हैं कि हमारी चुस्त प्रक्रिया में एक छोटा सा झरना है।

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

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


1

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

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