क्या यह एक बुरा संकेत है कि मैं अक्सर एक परियोजना विकसित करने के रूप में नया स्वरूप दे रहा हूं?


39

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

  • "अरे, मुझे _ _ करने के लिए एक वर्ग की आवश्यकता है । मैंने इससे पहले ऐसा नहीं सोचा था।"
  • "रुको, यह फ़ंक्शन वास्तव में इस एक के बजाय उस वर्ग में होना चाहिए। मैं इसे खत्म कर दूँगा।"
  • "यह वास्तव में एक के बजाय दो वर्ग होना चाहिए। मैं इसे अलग कर दूंगा।"
  • "मुझे इन तीन स्टैंड-अलोन कक्षाओं को एक सार वर्ग से विरासत में प्राप्त करना चाहिए।"
  • वगैरह, वगैरह।

क्या यह एक बुरा संकेत है कि मैं अक्सर इस तरह से नया स्वरूप दे रहा हूं जैसे मैं साथ जाता हूं? क्या इसका मतलब है कि मैं एक गरीब प्रोग्रामर हूं या यह सामान्य है?

जवाबों:


41

यह विकास का एक सामान्य हिस्सा है। सतत डिजाइन के मुख्य सिद्धांतों में से दो यह है कि:

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

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

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


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

@ मैथ्यू - आप एक डेटाबेस माइग्रेशन लिखते हैं। यह शायद ही कभी लिखने और परीक्षण करने में एक घंटे से अधिक समय लगता है। रूबी ऑन रेल्स में डेटाबेस माइग्रेशन के लिए बहुत अच्छी सुविधा है।
केविन क्लाइन

1
@ हेविन: हमारे पास एक ही डेटाबेस नहीं है जो मुझे लगता है, मेरा कुछ सैकड़ों लाखों लाइनें हैं। प्रवासन कोई विकल्प नहीं है।
मैथ्यू एम।

+1 - आपके द्वारा गलती करने पर बहुत गर्व / हठ होना कोई अच्छी बात नहीं है। कुछ लोग आपकी गलतियों को सप्ताह के संकेत के रूप में स्वीकार करते हुए देखते हैं, लेकिन अधिकांश शायद इसके लिए आपका सम्मान करेंगे, और निश्चित रूप से अगर आपकी गंभीर गलती से मुकाबला करने की रणनीति यह मानने से इनकार करती है कि यह एक गलती है, तो दूसरी गलती बहुत ही घातक है।
स्टीव 314

12

आप जो कर रहे हैं वह लोकप्रिय रूप से "रिफैक्टिंग" के रूप में जाना जाता है। अगर आपने कभी ऐसा करना बंद कर दिया तो आप मुश्किल में हैं।

तथ्य यह है कि अधिकांश कोड जटिल है और मनुष्य, यहां तक ​​कि बहुत स्मार्ट भी, यह सब एक बार में समझ नहीं सकता है।


10

नहीं, आप निम्नलिखित प्रतीत YAGNI और पुनर्रचना दिया उदाहरण से। क्या आपको नहीं लगता कि यह बेहतर समाधान होना बेहतर है और इसे करने में सक्षम होने के बजाय इसे फिर से कुछ के बारे में कभी नहीं सोचना चाहिए?

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


5

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

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

यह बहुत बहुत है बहुत एक डिजाइन के साथ शुरू, और कार्यान्वयन जब तक यह का पालन करने के लिए 100% दुर्लभ। मैंने व्यक्तिगत रूप से ऐसा कभी नहीं देखा है, बहुत छोटे और तुच्छ कार्यक्रमों को छोड़कर।


6
चरण 1: UML आरेख बनाएं। चरण 2: कोड लिखें। चरण 3: यूएमएल आरेख को दूर फेंक दें ताकि कोई भी इसे कभी न देखे और यह भ्रम हो जाए कि कोड वास्तव में कैसे काम करता है।
कुब्बी

4

आप जो कर रहे हैं वह पूरी तरह से सामान्य है (बशर्ते आप हर बार पूरी तरह से खरोंच से शुरू न हों)। मैं इस पर बीस साल से हूँ, और यह अभी भी एक पुनरावृत्त प्रक्रिया है।

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


2

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

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


0

जिसे पुनरावृत्ति प्रक्रिया कहा जाता है और यह सभी आधुनिक सॉफ्टवेयर विकास तकनीकों में एक मूल अवधारणा है।

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