मैं इस प्रश्न के साथ कुछ गंभीर मुद्दों को देखता हूं। चलो शुरू करते हैं।
आर्किटेकचर डिजाइनिंग को बर्बाद करने से कैसे रोकें
यह सवाल बल्कि भरा हुआ है। इसके अलावा, आप वास्तुकला डिजाइन नहीं करते हैं । आप वास्तुकार । वास्तुकला और डिजाइन पूरक और संबंधित गतिविधियां हैं, लेकिन समान नहीं हैं, भले ही वे ओवरलैप हों।
इसी तरह, आर्किटेक्चर (ओवर-आर्किटेक्चरिंग) करके समय बर्बाद करना संभव है, आप ओवर-डिजाइनिंग और ओवर-कोडिंग में भी समय बर्बाद कर सकते हैं (जरूरत से ज्यादा जटिल तरीके से सामान की कोडिंग करके, या असफल होकर। आवश्यक चीजों के लिए कोड।)
उचित वास्तुकला का उद्देश्य उस कचरे को कोडिंग में रोकना है। ऐसा करना एक जटिल प्रणाली को 1) डिज़ाइन, 2) कोडित और परीक्षण करना, 3) वितरित, 4) बनाए रखा गया, 5) असफलता से उबरना, और 6) अंततः डिकमीशन किया गया।
मेरा अनुभव यह रहा है कि जो लोग सिर्फ कोडिंग का आनंद लेते हैं, वे बिना किसी कोड के सिर्फ यह सोचते हैं कि कैसे एक प्रणाली को संचालित करना है और लंबे समय तक बनाए रखना है, अगले गर्म आलू के लिए आगे बढ़ना है ताकि कुछ खराब आत्मा को बदसूरत golem बनाए रखा जा सके।
लेकिन मैं पीछे हटा...
यह बात है: सिस्टम के लिए पर्याप्त सरल, वास्तुकला स्वयं स्पष्ट है और ध्वनि डिजाइन और कार्यान्वयन प्रथाओं से निकलती है।
यह केवल बड़ी प्रणालियों के लिए होता है, जिसमें बड़ी संख्या में लोग या सिस्टम-स्तरीय सॉफ़्टवेयर शामिल होते हैं जो बहुत जटिल सामान करता है जिसमें स्पष्ट वास्तुकला की आवश्यकता होती है।
मैंने हाल ही में यूनी से स्नातक किया है और एक प्रोग्रामर के रूप में काम करना शुरू कर दिया है। मुझे यह नहीं लगता कि "तकनीकी" मुद्दों को हल करना या डिबगिंग करना मुश्किल है, जो चीजें मैं कहूंगा कि 1 समाधान होगा।
इस पेशे के लिए यह न्यूनतम आवश्यक है, और मुझे खुशी है कि आपको उन्हें करने में कोई समस्या नहीं है (यदि आपने किया तो मुझे चिंता होगी।)
लेकिन वहाँ समस्याओं का एक वर्ग है कि एक समाधान नहीं है लगता है
वे हमारे पेशे की रोटी और मक्खन हैं, उन समस्याओं का प्रकार जिनके लिए नियोक्ता हमारे (आमतौर पर) दूर-से-ऊपर के औसत वेतन का भुगतान करने को तैयार हैं।
तथ्य की बात है, हल करने के लायक समस्याएं वे हैं जिनके पास एक से अधिक समाधान हो सकते हैं। वास्तविक दुनिया की समस्याएं, वे इस तरह हैं। और दुनिया को हमारी विशेषज्ञता की आवश्यकता है, सॉफ्टवेयर डेवलपर्स के रूप में, स्वीकार्य व्यापार-अप के साथ आने के लिए।
- सॉफ्टवेयर आर्किटेक्चर जैसी चीजें।
चीजों की वास्तुकला जटिल प्रणाली की एक अपरिहार्य विशेषता है, उन्हें आभासी / सॉफ्टवेयर या कंक्रीट की दुनिया में होना चाहिए। प्रत्येक प्रणाली जो संचालित होती है, जो इनपुट लेती है और आउटपुट का उत्पादन करती है, यह जटिल होगी और इसमें एक आर्किटेक्चर होगा।
जब हम ऐसी प्रणालियों (एक बैंकिंग प्रणाली, एक शक्ति निगरानी प्रणाली, एक टिकट बिक्री प्रणाली, आदि) के लिए सॉफ्टवेयर विकसित करते हैं, तो हमारा लक्ष्य ऐसे सॉफ्टवेयर का निर्माण करना होता है, जो ऐसी प्रणाली के कार्यों और आवश्यकताओं की नकल करता है।
हम सिर्फ इसे विंग नहीं कर सकते और इसे काउबॉय स्टाइल कोड कर सकते हैं। हमें किसी प्रकार की वास्तुकला की आवश्यकता है। यह विशेष रूप से सच है अगर परियोजना को दर्जनों इंजीनियरों की आवश्यकता होती है, यदि अधिक नहीं।
ये बातें मुझे परेशान करती हैं और मुझे बहुत तकलीफ देती हैं।
वह ठीक है। यह सीखने या सिखाने के लिए आसान विषय नहीं है, बिना अभ्यास के नहीं।
मैं घंटों और घंटों का समय यह तय करने की कोशिश करता हूं कि मेरे कार्यक्रमों और प्रणालियों को "वास्तुकार" कैसे किया जाए। उदाहरण के लिए, क्या मैं इस तर्क को 1 या 2 वर्गों में विभाजित करता हूं, मैं कक्षाओं का नाम कैसे दूं, क्या मुझे इसे निजी या सार्वजनिक करना चाहिए, आदि। इस प्रकार के प्रश्न मेरा बहुत समय लेते हैं, और यह मुझे बहुत निराश करता है। मैं सिर्फ कार्यक्रम बनाना चाहता हूं, वास्तुकला को नुकसान पहुंचाया जाना चाहिए।
दुर्भाग्य से, यह सॉफ्टवेयर आर्किटेक्चर नहीं है।
यह डिजाइन भी नहीं है, लेकिन सिर्फ कोडिंग है। मैं इस पोस्ट के नीचे कुछ सुझाव दूंगा।
आर्किटेक्चर चरण और कोडिंग और डीबगिंग चरण के माध्यम से मैं और अधिक तेज़ी से कैसे प्राप्त कर सकता हूं, जो मुझे पसंद है ?
मुझे इसका जवाब देने के लिए एक कठिन समय मिल रहा है, क्योंकि यह भावनात्मक है।
क्या हम नौकरी पाने की कोशिश कर रहे हैं, या हम सिर्फ अभ्यास का आनंद लेने की कोशिश कर रहे हैं? यह बहुत अच्छा है जब दोनों एक और समान होते हैं, लेकिन वास्तविक जीवन में, कई बार वे नहीं होते हैं।
यह उन चीजों को करने के लिए बहुत अच्छा है जो हम आनंद लेते हैं, लेकिन हमारे जैसे जटिल पेशे में, बस हम जो आनंद लेते हैं, उस पर ध्यान केंद्रित करने के लिए, यह एक फलदायी कैरियर नहीं है।
आप प्रगति नहीं करेंगे, आप नए ज्ञान को परिपक्व या हासिल नहीं करेंगे।
सेना में यह कहावत है, "चूसना को गले लगाओ।"
अन्य वाक्यांशों में समान सलाह है। "अगर यह चूसना नहीं है, तो यह इसके लायक नहीं है" और मेरा पसंदीदा, "अगर यह बेकार है (और यह महत्वपूर्ण है), इसे तब तक करें जब तक यह चूसना बंद न हो जाए।"
मेरी सिफारिशें:
मुझे ऐसा लगता है कि आप अभी भी मतभेदों को समझने के लिए संघर्ष कर रहे हैं
कोडिंग (अपने वर्गों को कैसे कोडित करें, मॉड्यूल या क्या नहीं, नामकरण परंपराओं, पहुंच दृश्यता, गुंजाइश, आदि), आदि
डिजाइन (कितने टियर, फ्रंट-एंड / बैक-एंड / डीबी, प्रत्येक कैसे संचार करता है, कहां जाता है) और अंतर्निहित आर्किटेक्चर निर्णय जो सरल सिस्टम के डिजाइन से आते हैं,
वास्तुकला (जैसा कि हजारों की आवश्यकता वाले जटिल प्रणालियों में पाया जाता है, यदि सैकड़ों-हजारों मानव-घंटे नहीं हैं।)
इसलिए मेरा सुझाव है कि आप इसे अगले स्तर तक ले जाने के लिए पहले विषय (कोडिंग) में गहराई से तल्लीन करें।
साफ कोड
रॉबर्ट "अंकल बॉब" मार्टिन का "क्लीन कोड" शुरू करने के लिए एक अच्छी जगह है।
सॉफ्टवेयर सामंजस्य
इसके अतिरिक्त, मेरा सुझाव है कि आप LCOM या LCOM4 नामक विशिष्ट ऑब्जेक्ट ओरिएंटेड सॉफ़्टवेयर मीट्रिक से परिचित हों।
यह गणितीय हो सकता है और यह बुलेट-प्रूफ नहीं है, लेकिन आपका लक्ष्य अनुभवपूर्वक समझना और पता लगाना चाहिए (या यदि आप चाहें तो नेत्र-गेंद) यदि कोई वर्ग सामंजस्यपूर्ण है या इसमें सामंजस्य का अभाव है।
http://www.aivosto.com/project/help/pm-oo-cohesion.html#LCOM4
https://www.computing.dcu.ie/~renaat/ca421/LCOM.html
सॉफ्टवेयर सिद्धांत
यह "सिंगल रिस्पॉन्सिबिलिटी प्रिंसिपल" या एसआरवाई के साथ निकटता से जुड़ा हुआ है जिससे हम सभी को परिचित होना चाहिए। SRY उन 5 "SOLID" में से एक है, जिनसे हम सभी को परिचित होने की आवश्यकता है यदि हम कोडिंग में पारंगत हो गए हैं।
जैसा कि हम SOLID सिद्धांतों के माध्यम से आगे बढ़ते हैं, हमें अपने आप को "GRASP" सिद्धांतों से परिचित करना होगा , जो शासन करते हैं, या कोड कोड को निर्देशित करते हैं।
अतिरिक्त किताबें
अंत में, मैं निम्नलिखित सुझाव भी दूंगा:
मार्टिन फाउलर और केन बेक की "रिफैक्टिंग" इस सूची में पढ़ी जाने वाली अगली पुस्तक होगी।
रिचर्ड मिशेल, जिम मैककिम और बर्ट्रेंड मेयर (बाद में एफिल की प्रसिद्धि) द्वारा "डिजाइन द्वारा अनुबंध, उदाहरण के लिए।" यह पुस्तक प्रिंट से बाहर है, लेकिन आप अमेज़ॅन में सस्ती, उपयोग की गई प्रतियां पा सकते हैं।
इसके साथ, आपको सॉफ्टवेयर आर्किटेक्चर को स्थानांतरित करने और मास्टर (या कम से कम मुट्ठी) करने के लिए कोडिंग और डिज़ाइन कैसे शुरू करना है, और अभ्यास के साथ एक अच्छी समझ प्राप्त करनी चाहिए।
मुझे यकीन है कि इन सुझावों को जोड़ने, घटाने या जोड़ने वाले अन्य पेशेवर होंगे। वे अन्य सुझावों के साथ आएंगे, संभवतः अपने स्वयं के अनुभव से मान्य होंगे।
मैं बस इतना ही कह सकता हूं - कोई शॉर्टकट नहीं है।
शुभकामनाएं।