सॉफ्टवेयर प्रोजेक्ट की शुरुआत में मुझे चीजें कैसे मिल सकती हैं? [बन्द है]


64

मैं 1 साल के अनुभव के साथ प्रोग्रामर हूं, हाल ही में मुझे एहसास हुआ कि मैं शायद ही कभी एक परियोजना को सही ढंग से शुरू करता हूं (मेरी तरफ की अधिकांश परियोजना), आमतौर पर परियोजना का चक्र ऐसा ही होता है

  1. कुछ उपयोग-मामलों के साथ शुरू करें
  2. कोडिंग शुरू करें
  3. कुछ चीजों को महसूस करें जिन्हें मैंने अच्छी तरह से हैंडल नहीं किया है, और वर्तमान कोडबेस में अच्छी तरह से फिट नहीं है।
  4. कोड का अधिकांश भाग फिर से लिखें

और यह कुछ बार जा सकता है

तो मेरे सवाल हैं

  1. क्या इस तरह की प्रथा आम है, या इसका मतलब है कि मैं सक्षम नहीं हूं?
  2. मैं इस पहलू पर खुद को कैसे सुधार सकता हूं?

29
उत्तम! इसे सीखने कहा जाता है :) और सक्षम! = दिन 1 पर कुशल

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

6
यदि आपको हर प्रोजेक्ट को पूरी तरह से शुरू करने की विधि मिल जाए, तो हमें बताएं। या इसके बारे में एक किताब लिखें और करोड़पति बनें।
मस्तूल

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

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

जवाबों:


70

आपके द्वारा वर्णित चक्र सामान्य है। चीजों को बेहतर बनाने का तरीका इस चक्र से बचना नहीं है, बल्कि इसे कारगर बनाना है। पहला कदम यह स्वीकार करना है कि:

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

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

  1. कुछ उपयोग-मामलों के साथ शुरू करें
  2. कोडिंग शुरू करें
  3. कुछ चीजों को महसूस करें जिन्हें मैंने अच्छी तरह से हैंडल नहीं किया है, और वर्तमान कोडबेस में अच्छी तरह से फिट नहीं है।
  4. कोड का अधिकांश भाग फिर से लिखें

यह वास्तव में एक महान प्रारंभिक बिंदु है। यहां बताया गया है कि मैं इसे कैसे देखूंगा:

1. कुछ उपयोग-मामलों के साथ शुरू करें

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

सॉफ्टवेयर का सबसे छोटा, सबसे सरल टुकड़ा मैं आपको दे सकता हूं जो आपकी स्थिति को बेहतर करेगा?

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

2. कोडिंग शुरू करें।

महान। आप जल्द से जल्द काम करें। जब तक आपने कोड नहीं लिखा है, तब तक आपके ग्राहकों को शून्य लाभ मिला है। जितना अधिक समय आप प्लानिंग में बिताते हैं, क्लाइंट ने लंबे समय तक बिना पेबैक के इंतजार किया है।

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

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

ऐसा करने से, आप एक परिवर्तन के प्रभावों को अलग कर रहे हैं ताकि अधिकांश मामलों में, आप एक स्थान पर एक समस्या को ठीक कर सकें, और आपके बाकी कोड ध्यान नहीं देते।

3. डिजाइन में मुद्दों या कमियों का सामना करना।

यह होगा। यह अपरिहार्य है। इसे स्वीकार करें। जब आप इन समस्याओं में से एक को मारते हैं, तो तय करें कि यह किस तरह की समस्या है।

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

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

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

4. कोड का हिस्सा फिर से लिखना

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

5. परीक्षण

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

6. जानें

जैसा कि आप इस चक्र से गुजरते हैं, आप उन समस्याओं पर ध्यान देते हैं जो आप पा रहे हैं और आपके द्वारा किए जा रहे परिवर्तन। क्या कोई पैटर्न हैं? क्या आप सुधार कर सकते हैं?

कुछ उदाहरण:

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

चपल हो

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

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

5
"महान। आप जितनी जल्दी हो सके काम कर रहे हैं। जब तक आपने कोड नहीं लिखा है, तब तक आपके ग्राहकों को शून्य लाभ प्राप्त हुआ है। जितना अधिक समय आप नियोजन में बिताते हैं, उतना ही अधिक समय तक ग्राहक बिना किसी भुगतान के इंतजार में बिताया है।" इस बात से सहमत नहीं हो सकते। जितना कम समय आप प्लानिंग में बिताते हैं, क्लाइंट लंबे समय तक किसी ऐसी चीज के इंतजार में रहता है, जो वास्तव में ठीक से काम न करती हो, जिसमें कोई पेबैक न हो।
ऑर्बिट

4
@ रोब्रॉफर्ड: "नो प्लानिंग" और "अत्यधिक प्लानिंग" के बीच एक पूरी निरंतरता है। हमेशा के लिए "योजना" या "दृष्टि" पूरी तरह से आपको चलने की संभावना है ... हलकों में। चंचल "योजना नहीं" के बारे में नहीं है, यह अनिश्चित तत्वों पर भरोसा करने से बचने और लक्ष्यों को बदलने में सक्षम होने के बारे में है: आपको अभी भी कुछ प्रकार के अति-धमकाने वाले लक्ष्य की आवश्यकता है, भले ही धुँधला / अपवित्र हो, अन्यथा आप यह माप नहीं सकते कि क्या आप जो विकसित कर रहे हैं वह प्रगति या प्रगति है।
मैथ्यू एम।

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

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

3
समापन में, एजाइल सहमत हैं कि बहुत कम योजना के रूप में ऐसी कोई चीज है। यह केवल यह बताता है कि बहुत अधिक के रूप में ऐसी चीज भी है।
अनएक्सिमैंडर

14

यह सामान्य बात है।

आप दो तरीकों में से एक ले सकते हैं:

  1. स्वागत है आपका

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

  1. बदलाव से बचें

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

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


11

सॉफ्टवेयर विकास को स्वाभाविक रूप से "दुष्ट" समस्याओं की एक श्रृंखला के रूप में वर्णित किया गया है

होर्स्ट रिटेल और मेल्विन वेबर ने "दुष्ट" समस्या को एक के रूप में परिभाषित किया, जिसे केवल इसे हल करके, या इसके भाग को हल करके स्पष्ट रूप से परिभाषित किया जा सकता है। यह विरोधाभास, अनिवार्य रूप से, यह बताता है कि आपको समस्या को स्पष्ट रूप से परिभाषित करने के लिए एक बार "हल" करना होगा और फिर हल करने के लिए इसे फिर से हल करना होगा जो काम करता है। यह प्रक्रिया दशकों से सॉफ्टवेयर विकास में मातृत्व और सेब पाई है

यह पूरी तरह से उस समस्या का वर्णन करता है जिसका आप सामना कर रहे हैं। मौलिक रूप से, हम जो करते हैं वह कठिन है । यदि कोई ऐसा भाग है जिसे "दिनचर्या" के रूप में वर्णित किया जा सकता है, तो समय के साथ हम इसे अलग और स्वचालित कर देते हैं। तो जो कुछ बचा है वह या तो नया है या मुश्किल है।

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

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

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


8
  1. हां, यह आम है, शायद " कोड के अधिकांश भाग को फिर से लिखना" को छोड़कर । आपको शुरुआत से ही सभी आवश्यकताएँ ठीक नहीं मिलेंगी, इसलिए बदलाव से निपटना महत्वपूर्ण है। यही "कोड मेंटेनेंस" की अवधारणा है। बेशक यह आवश्यकताओं और डिजाइन सही होने पर कुछ और समय बिताने में मदद करता है।
  2. पहले, सोचें कि पिछली परियोजनाओं में क्या बदलाव आवश्यक थे और आप उन लोगों को कैसे आगे बढ़ा सकते हैं या उनके लिए बेहतर तैयारी कर सकते हैं। एक परियोजना की शुरुआत में, उपयोग के मामलों के विवरण के बारे में अधिक सोचें। कुछ अमूर्त डिज़ाइन (कोड के मुख्य घटक क्या हैं और वे कैसे संवाद करते हैं, उनके एपीआई क्या हैं) को लागू करने से पहले। सबसे महत्वपूर्ण बात यह, के रूप में सरल और संभव के रूप में बदलने के लिए आसान कोड रखने के इस तरह के ठोस, सूखी, चुंबन और YAGNI के रूप में अवधारणाओं को पढ़ने की कोशिश करो।

6

क्या इस तरह की प्रथा आम है, या इसका मतलब है कि मैं सक्षम नहीं हूं?

वे परस्पर अनन्य नहीं हैं। पैटर्न सामान्य हो सकता है, और आप अभी भी अक्षम हो सकते हैं। आपके लक्ष्यों के खिलाफ आपके प्रदर्शन को मापने के द्वारा आपकी क्षमता निर्धारित की जा सकती है। क्या आप अपने लक्ष्यों को पूरा कर रहे हैं?

क्या यह पैटर्न आम है? दुर्भाग्य से हाँ। कई लोग परियोजनाओं में डुबकी लगाते हैं कि वे इस समस्या का कोई स्पष्ट हल नहीं निकालते हैं कि वे किस समस्या का समाधान कर रहे हैं, वे एक सही समाधान कैसे तैयार करेंगे और क्या मैट्रिक्स सफलता का गठन करेंगे।

मैं इस पहलू पर खुद को कैसे सुधार सकता हूं?

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

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

  • एक उपयोगी बात करता है।
  • क्या यह सही है।
  • क्या यह पर्याप्त प्रदर्शन के साथ है।

तो: जितना अधिक कोड आप लिखते हैं, उस कोड में एक उपयोगी बात अच्छी तरह से होती है, सही ढंग से, अच्छे प्रदर्शन के साथ, कम कोड आपको कभी भी फिर से लिखना होगा।


1

मुझे लगता है कि यह कहना सुरक्षित है कि आप काम करने के बेहतर तरीके से दूर नहीं हैं, और आप इस नाव में अकेले नहीं हैं।

मुझे लगता है कि आप गायब हैं, हालांकि आप यह निर्धारित करते हैं कि आप क्या चाहते हैं, आप उसी प्रक्रिया को करने के लिए नहीं रोकेंगे कि आप इसे कैसे करेंगे।

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

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

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


1

आपके पास पहले से ही कुछ बेहतरीन जवाब हैं, लेकिन आपका सवाल कुछ बातों को ध्यान में रखता है कि मुझे लगा कि मैं इसे छूने की कोशिश करूंगा।

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

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

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

  4. यदि आप एक ढांचे के भीतर काम कर रहे हैं, तो समय व्यतीत करें, यदि आप इसे छोड़ सकते हैं, तो यह विचार करने के लिए कि खरोंच से चीजों को कैसे करना है। उदाहरण के लिए, आप आसानी से एक अनुरोध संदेश को इकट्ठा कर सकते हैं, एक सॉकेट खोल सकते हैं और मैन्युअल रूप से एक GET या POST अनुरोध जारी कर सकते हैं। यदि आप चाहें तो आप XML संदेशों को मैन्युअल रूप से पार्स कर सकते हैं। आप जो भी करते हैं, आपके द्वारा उत्पन्न प्रश्न और आपके द्वारा खोजे गए उत्तर आपके कौशल को बढ़ाते हैं। बेशक, आपको यह चुनना होगा कि किस प्रकार के अंतर्निहित मुद्दे महत्वपूर्ण या रुचि के हैं। मैं इस व्यक्तिगत विकास पर विचार करूंगा और यहां अधिक समय बिताने की उम्मीद नहीं करूंगा।

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

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


1

मैं कुछ संकेत जोड़ना चाहूंगा

1) मैं व्यक्तिगत रूप से यह अविश्वसनीय उपयोगी लग रहा था कि सामान को देखने के साथ शुरू करें । बक्से, तीर, रेखाएँ बनाएँ ... जो भी मॉडलिंग भाषा आप उपयोग करते हैं, कभी भी कोई आपत्ति न करें। पहली जगह में आप इसे अपने लिए कर रहे हैं। इसे आपके विचारों के प्रवाह में मदद करनी चाहिए।

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

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

4) वृद्धिशील सीखने की यह प्रक्रिया कभी नहीं रुकती (और नहीं होनी चाहिए)! आप 10 साल में वापस देखेंगे और मुस्कुराएंगे।

आशा है कि यह एक छोटे से और अच्छे भाग्य में मदद करता है!


"जो भी" पढ़ना चाहिए। ऊपर की पोस्ट संपादित की।
ईसाई मेईलर

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