क्या कोई प्रोग्रामिंग प्रतिमान है जो निर्भरता को अन्य प्रोग्रामर के लिए स्पष्ट करने को बढ़ावा देता है?


26

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

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

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

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


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

सिस्टम PLSQL, यूनिक्स बैश, OWB आदि है ताकि सभी प्रकार की निर्भरताएं हों। कभी-कभी डेटा एक निश्चित प्रारूप के लिए, एक निश्चित स्थान पर, एक निश्चित समय पर, एक निश्चित मॉड्यूल द्वारा आवश्यक होता है, लेकिन यह कोड से स्पष्ट रूप से स्पष्ट नहीं है और इसे केवल दो तरीकों से ही समझा जा सकता है: कोड के एक पहाड़ से गुजरते हुए, शायद कुछ दिनों के लिए, यह पता लगाने के लिए कि कुछ डेटा में सिस्टम के एक हिस्से में एक नाजुक अर्ध-बृहदान्त्र था जिसे आपको पता भी नहीं था क्योंकि इसे पुनरावृत्ति कोड की 10 परतों में दफन किया गया था, या किसी से पूछकर, सभी। समय, हर बार। यह स्वतंत्रता को बढ़ावा नहीं देता है।
चिश्तियाँ_चिन १ '

4
शाब्दिक रूप से उनमें से सभी
मील्स राउत

3
लिटिल स्पर्शरेखा: क्योंकि हास्केल आलसी है, जब आप कोड लिखते हैं तो आप प्रभावी रूप से संचालन के आदेश को निर्दिष्ट नहीं करते हैं। आप केवल निर्भरता निर्दिष्ट करते हैं। फ़ंक्शन C, A और B के परिणामों पर निर्भर करता है। इसलिए A और B को C से पहले चलाया जाना चाहिए, लेकिन यदि A को पहले चलाया जाता है, या यदि B को पहले चलाया जाता है तो यह समान रूप से काम कर सकता है। मुझे लगा कि यह दिलचस्प है।
ग्लेनपेटर्सन

1
एक पुस्तक है जिसे डिज़ाइन पैटर्न कहा जाता है (पुस्तक बेकार है, लेकिन ज्यादातर यह कहते हैं कि यह अच्छा है, सिवाय सिंगलटन के बारे में थोड़ा छोड़कर)। यह निर्भरता के प्रबंधन पर कई खंड हैं।
ctrl-alt-delor

जवाबों:


19

खोजे जाने

इसकी अनुपस्थिति कई संगठनों को परेशान करती है। वह उपकरण कहां है जिसे फ्रेड ने फिर से बनाया है? गिट रिपॉजिटरी में, सुनिश्चित करें। कहा पे?

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

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

यह एक समझदार संगठनात्मक वास्तुकला के साथ आने और इसे दस्तावेज़ करने के लिए टीम की ज़िम्मेदारी है। इसमें जैसी चीजें शामिल हैं

  • फोल्डर संगठन
  • प्रोजेक्ट संदर्भ
  • वर्ग प्रलेखन (यह क्या है, यह क्या करता है, यह क्यों मौजूद है, इसका उपयोग कैसे किया जाता है)
  • परियोजना, मॉड्यूल, विधानसभा, जो भी प्रलेखन।

यह टीम की ज़िम्मेदारी है कि वह चीजों को व्यवस्थित और खोज योग्य बनाए ताकि टीम लगातार पहिये को मजबूत न करे।

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


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

1
वह उपकरण कहां है जिसे फ्रेड ने फिर से बनाया है? गिट रिपॉजिटरी में, सुनिश्चित करें। कहा पे? - ठीक ठीक! MVC पैटर्न फ्रंट-एंड डेवलपमेंट (मुझे लगता है) के लिए बहुत विशिष्ट है, और पैटर्न केवल तभी उपयोगी होते हैं जब टीम में हर कोई उन्हें जानता है, इसलिए यह समस्या निर्भरता से समस्या को स्पष्ट नहीं होने की ओर ले जाती है, उन्हें स्पष्ट होने के लिए हर कोई जानता है कि कैसे खोजना है। उन्हें। लेकिन समस्या यह है कि यह मामला नहीं है। जैसे मैं उम्मीद कर रहा हूँ कि कुछ ऐसा है जो निर्भरता को समझाने के लिए एक बहुत ही स्पष्ट तरीके को बढ़ावा देता है जिसके लिए आपको उपयोग करने के लिए कुछ अन्य सीखा वैचारिक ढांचे की आवश्यकता नहीं है।
च्रिस्ट्स_चिन

7
इसे "प्रलेखन" कहा जाता है। इसके अलावा, आपको एक समझदार निर्भरता ढांचे की आवश्यकता है जो सभी का समर्थन करता है। दुर्भाग्य से वहाँ एक बॉयलरप्लेट टेम्पलेट नहीं है जिसे आप केवल अपनी परियोजना में छोड़ सकते हैं; सॉफ्टवेयर की संगठनात्मक संरचना कुछ ऐसी है जो आपकी टीम खुद को एक समझदार वास्तुकला की सहायता से बनाती है।
रॉबर्ट हार्वे

5
@RobertHarvey: बहुत हाल ही में सुना: "हम कोड लिखते हैं जिसे प्रलेखन की आवश्यकता नहीं है"। गलत। आप प्रलेखन के बिना कोड लिख रहे हैं।
gnasher729

3
यहाँ कुछ अच्छा सामान। नायब कोड लिखने के बीच एक अंतर है जिसे टिप्पणियों और लेखन सहायक दस्तावेज की आवश्यकता नहीं है ।
रॉबी डी

10

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

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

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


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

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

+1 छोटे बदलावों के प्रस्ताव के लिए जिन्हें अनुमोदित किए जाने की संभावना है। मैंने अनुभव किया कि और इसने मुझे अधिक प्रभाव वाले व्यक्ति बनने में मदद की, और फिर मेरे प्रस्तावों को अधिक प्रभाव मिला।
रॉ बीन २०'१

2

आर्किटेक्चर।

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

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

आदर्श रूप से, उन नियमों को मन की एक विशिष्टता द्वारा एकीकृत किया जाता है।

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

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

मैं सभी निर्णय लेने वाले किसी एक व्यक्ति का बहुत बड़ा प्रशंसक नहीं हूं; लेकिन, एक "वास्तुकार" या "तकनीकी उत्पाद स्वामी" की पहचान करना जो वास्तुशिल्प चर्चाओं को मॉडरेट करने और निर्णयों के दस्तावेजीकरण के लिए ज़िम्मेदार है, एक बड़ी बुराई का मुकाबला करता है: ज़िम्मेदारी का प्रसार जो किसी भी वास्तुशिल्प वास्तुकला की ओर नहीं जाता है ।


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

मुझे लगता है कि इस उत्तर में आपकी बात ओपी के बारे में जिस प्रकार की बात कर रही है, उसका मुकाबला करने / रोकने का एकमात्र सबसे बड़ा तरीका है। यह भी ओपी के रूप में एक गड़बड़ विरासत के लिए लागू होता है।
GWR

1

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

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

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

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

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


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

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

ठीक है, मैं अपने खुद के जवाब की तुलना के रूप में पोस्ट करूंगा। मुझे नहीं लगता कि यह है है कुछ भी सॉफ्टवेयर पैटर्न के साथ क्या करना।
रॉबर्ट हार्वे

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

2
बिल्कुल मेरा अनुभव: आपको अपनी टीम के सदस्यों को समझना चाहिए कि वे क्या कर रहे हैं। मैं लोगों को MVVM और MVC को मिलाते हुए देखता हूं, दूसरों को WPF नियंत्रण का उपयोग करते हुए एक तरह से जो विंडोज फॉर्म (या बल्कि: VB6) के साथ सामान्य था, सी # में लोगों को ऑब्जेक्ट-ओरिएंटेशन की एक बुनियादी समझ के बिना प्रोग्रामिंग ... उन्हें सिखाएं। उन्हें फिर से सिखाओ। निराश होना। उन्हें फिर से सिखाएं, ... अक्सर हार मानने की सोच। और उन्हें फिर से पढ़ाना ...
बर्नहार्ड हिलर

1

मुझे @ रॉबर्टहेरवे के सम्मेलनों का विचार पसंद है और लगता है कि वे मदद करते हैं। मुझे @ KarlBielefeldt का यह विचार भी पसंद है कि "दस्तावेज़ पर जाएँ" और जानते हैं कि यह आवश्यक है क्योंकि दस्तावेज़ को चालू रखने का एकमात्र तरीका यही है। लेकिन मुझे लगता है कि अति-अभिमानी विचार यह है कि आपके कोड के सभी टुकड़ों को कैसे बनाया जाए, उनका निर्माण करना और उन्हें तैनात करना महत्वपूर्ण है!

मैंने हाल ही में एक महत्वपूर्ण ओपन सोर्स प्रोजेक्ट ईमेल किया था जिसमें कुछ XML कॉन्फ़िगरेशन थी जो उत्पन्न कोड पूरी तरह से अनिर्दिष्ट था। मैंने अनुचर से पूछा, "यह XML कोड जेनरेशन प्रक्रिया कहाँ प्रलेखित है? परीक्षण डेटाबेस सेटअप कहाँ प्रलेखित है?" और उसने कहा, "यह नहीं है।" यह मूल रूप से एक एकल-योगदानकर्ता परियोजना है और अब मुझे पता है कि क्यों।

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

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

निष्कर्ष के तौर पर

क्या जरूरत है एक प्रौद्योगिकी या कार्यप्रणाली नहीं है, लेकिन एक संस्कृति बदलाव; एक साझा विश्वास जो दस्तावेज बनाता है कि कैसे चीजें बनाई जाती हैं और क्यों महत्वपूर्ण है। यह कोड समीक्षाओं का हिस्सा होना चाहिए, जो उत्पादन की ओर बढ़ने के लिए एक आवश्यकता है, जो उठता है। जब हर कोई मानता है और उस पर काम करता है, तो चीजें बदल जाएंगी। अन्यथा, यह मेरे असफल ओपन सोर्स योगदान की तरह होगा।


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

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

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

1
@Christs_Chin इतना संचार संदर्भ पर आधारित है। उस संदर्भ के बिना, अधिकांश संचार लगभग अर्थहीन हैं। मै तुम्हारा दर्द समझ सकता हू। लेकिन मुझे लगता है कि यह लिखना कठिन है (अंग्रेजी) ताकि दूसरे आपको समझ सकें। कभी-कभी किसी प्रणाली के लिए शुरुआती चश्मे के संदर्भ होते हैं जिन्हें आपको इसे समझने की आवश्यकता होती है, भले ही वे बहुत पुराने हों, संदर्भ आमतौर पर मदद करता है।
GlenPeterson

1

इस प्रश्न का उत्तर देने के लिए (क्योंकि आप अपनी विशेष स्थिति के लिए सलाह देने के बजाय):

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


0

प्रत्येक डेटा वेयरहाउस अलग है लेकिन बहुत कुछ है जो आप अपने लिए चीजों को आसान बनाने के लिए कर सकते हैं।

शुरुआत के लिए, डेटाबेस में प्रत्येक पंक्ति में DATE_ADDED और DATA_UPDATED कॉलम था, इसलिए हम यह देख सकते थे कि इसे डेटाबेस में कब जोड़ा गया था और कब इसे बदला गया था। हमारे पास एक SOURCE_CODE कॉलम भी था, ताकि हम यह ट्रैक कर सकें कि हर बिट डेटा सिस्टम में कैसे प्रवेश किया।

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

बेस्पोक कोड को एक पूर्ण न्यूनतम रखा गया था और तब भी, इसे विभिन्न कोडिंग और रिपोर्टिंग शैलियों की पुष्टि करनी थी।

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

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


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

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

0

मुझे नहीं पता कि यह आपके मामले के लिए कितना प्रासंगिक है, निर्भरता को अधिक दृश्यमान बनाने और कोड के सामान्य रखरखाव के लिए कुछ रणनीतियाँ हैं-

  • वैश्विक चर से बचें, इसके बजाय मापदंडों का उपयोग करें। यह लैंग्वेज कॉल पर भी लागू होता है।
  • चरों के मानों को बदलने / बदलने से बचें, जितना आप कर सकते हैं। जब संभव हो, तो मूल्य बदलने के लिए एक नया चर और उपयोग करें।
  • कोड को मॉड्यूलर बनाएं। यदि यह वर्णन करना संभव नहीं है कि क्या (कैसे नहीं) भाग वास्तव में एक साधारण वाक्य में कर रहा है, तो इसे मॉड्यूल में तोड़ दें जो स्थिति को संतुष्ट करते हैं।
  • अपने कोड अंशों को ठीक से नाम दें। जब आप वास्तव में वर्णन कर सकते हैं कि कोड का एक हिस्सा सरल शब्दों में क्या कर रहा है, तो वे शब्द उस हिस्से का नाम बन जाते हैं। इस प्रकार, कोड मॉड्यूल / वर्गों / कार्यों / प्रक्रियाओं / विधियों आदि के नामों के माध्यम से स्व दस्तावेज हो जाता है।
  • अपने कोड का परीक्षण करें। परीक्षण करें यदि आपके कोड में इकाइयाँ अपने नाम को सही ठहराती हैं, पिछले बिंदु पर चर्चा की गई है।
  • कोड में घटनाओं को लॉग करें। कम से कम लॉग के दो स्तरों को बनाए रखें। पहले एक हमेशा सक्षम होता है (उत्पादन में भी) और केवल महत्वपूर्ण घटनाओं को लॉग करता है। और मूल रूप से सब कुछ लॉग करने के लिए दूसरे का उपयोग करें, लेकिन चालू या बंद किया जा सकता है।
  • अपने कोडबेस को ब्राउज़ करने, बनाए रखने और विकसित करने के लिए उपयुक्त उपकरण खोजें और उनका उपयोग करें। यहां तक ​​कि विज़ुअल स्टूडियो कोड के एक सरल "सर्च एवरीथिंग" विकल्प ने मेरे जीवन को कुछ मामलों के लिए बहुत आसान बना दिया।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.