कोई वापसी नहीं की जटिलता बिंदु। आप उसे क्या कहते हैं?


13

एक सॉफ्टवेयर डेवलपर के रूप में, मेरा एक मुख्य काम जटिलता को नियंत्रण में रखना है।

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

क्या इस विशेष क्षण का प्रोग्रामर बोली में नाम है (ट्रोल के लिए गॉडविन के नियम के समान कुछ)?

--edit--

क्षमा करें यदि मैं स्पष्ट नहीं हूँ। मुझे नहीं लगता कि इस "क्षण" का कोई आधिकारिक नाम है, या एक गंभीर मीट्रिक है। मैं xkcd में "बाल्मर चोटी" की भावना के बारे में कुछ सोच रहा था ।


1
मुझे सवाल में बिंदु की आपकी परिभाषा में एक विवाद दिखाई देता है: ... कम समय में आपको खरोंच से सब कुछ फिर से लिखने की आवश्यकता होगी , जिसका अर्थ है कि जो लोग परियोजना को फिर से लिखने जा रहे हैं, वे काफी अच्छे हैं, या कम से कम उन लोगों से बेहतर हैं जो पहली जगह में गड़बड़ी पैदा;)
मोजुबा

1
मुझे लगता है कि नाम पर सहमति नहीं होने का एक कारण यह है कि यह इस बात पर निर्भर करता है कि कोड को कौन देख रहा है। जो एक डेवलपर के लिए निराशाजनक रूप से जटिल या अस्वीकार्य प्रतीत होता है, वह दूसरे के लिए बहुत ही उचित दिखाई दे सकता है। गंभीर मामलों में, मैं सिर्फ एक "ms" उपसर्ग के साथ एक DLL में संकलित करता हूं और कहता हूं कि यह Microsoft से आया है।
केविन ह्सु

1
शायद यह करना होगा: तकनीकी ऋण घटना क्षितिज
पीटरअलेनवेब

जवाबों:


20

इसे और अधिक का एक मुद्दा है रख-रखाव की जटिलता से।

घटना को एक "तकनीकी ऋण" कहा जाता है, और एक बार यह एक महत्वपूर्ण स्तर तक पहुंच जाता है परियोजना दिवालियापन के रास्ते पर है।

क्या आपका आशय यही था?


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

3
मुझे आपका शब्द 'तकनीकी दिवालियापन' पसंद है। यह बताता है कि एक वास्तविक दिवालियापन की तरह, आपको ध्यान से देखना होगा कि कौन से हिस्से उद्धार योग्य हैं और जिन्हें पीछे छोड़ दिया जाना चाहिए। और शायद कुछ ऋण पुनर्गठन है कि वास्तव में जरूरत है :)
जाप

2
@ थिबॉल्ट जे: मेरा मानना ​​है कि उस पल के लिए कोई विशिष्ट शब्द नहीं है। यह महसूस करने के बारे में अधिक है कि क्या आप उस समय से पहले ख़ुशी से हैं या दुख की बात है कि इससे आगे निकल चुके हैं।

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

3
मैं "तकनीकी दिवालियापन" शब्द के लिए जाऊंगा, मुझे यह पसंद है। और मैं आपकी परिभाषा का भी उपयोग करूंगा।
थिबॉल्ट जे

16

"अतिरिक्त जटिलता का बिंदु" अंग्रेजी में निम्नानुसार है:

ओह मेरे भगवान क्या यह बकवास है।

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

इसलिए कुछ बहुत ही भयानक से बहुत जटिल कुछ अलग करना मुश्किल हो सकता है।

कैसे: वास्तव में सभी सॉफ्टवेयर के लिए होता है इस तरह से एक सा प्रक्रिया है:

चरण 1: एक अच्छी कल्पना है, एक अच्छा डिज़ाइन करें, अच्छा सामान लागू करें। सब लोग खुश।

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

चरण 2: कुछ बदलाव किए जाते हैं, चीजें जुड़ती हैं, नए कार्य शामिल होते हैं। चरण 1 से वास्तुकला और संरचना ने इसे काफी दर्द रहित प्रक्रिया बना दिया। [लेकिन उफ़, "क्रेफ़्ट फ़ैक्टर" बस थोड़ा बढ़ गया।]

चरण 2 के अंत में: डेवलपर्स अपने डिजाइन की अद्भुत लालित्य पर खुद को बधाई देते हैं, और खुश सोच से दूर चले जाते हैं "गी मैं चरण 1 में उन सभी भत्ते को बनाने के लिए बहुत चालाक हूं। यह बहुत अच्छी तरह से चला गया। मेरे पास एक अद्भुत विरासत है। दूसरों के लिए भविष्य में चीजों को जोड़ने के लिए, यह अद्भुत होगा और दुनिया एक बेहतर जगह होगी। ”

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

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

चरण 4: बस चरण 3 को छोड़कर।

चरण 4 के अंत में: डेवलपर्स को लगता है: "यह सामान जो इतना अच्छा था, उसे बनाए रखने के लिए UGLY मिल रहा है। यह वास्तव में कुछ गंभीर बदलाव है। मैं वास्तव में इस पर काम करना पसंद नहीं कर रहा हूं। इसे फिर से तैयार करने की आवश्यकता है। मुझे आश्चर्य है कि बॉस क्या है कहेंगे जब मैं उसे बताता हूं कि इसे 6 सप्ताह की आवश्यकता है और उपयोगकर्ताओं के लिए इस के अंत में देखने के लिए कुछ भी नहीं होगा ... लेकिन मुझे ऐसा करने से 5 साल का एक और भावी भविष्य संशोधन गुंजाइश मिल जाएगी .... हम्म्म्म ।। , कुछ बीयर के लिए पब जाने का समय। "

चरण 5: परिवर्तनों का एक गुच्छा बनाने की आवश्यकता है।

और चरण 5 को पूरा करते हुए डेवलपर्स एक-दूसरे से कहते हैं: "यह कोड बेकार है। किसने यह लिखा है? उन्हें इसका भयानक होना चाहिए। हम इसे फिर से लिखने के लिए तैयार हैं।"

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

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

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


मुझे यकीन है कि यदि आप अपने कदमों को छोटा कर लेंगे तो आपको अधिक वोट मिलेगा।
कोडिज्म

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

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

1
वहाँ एक बिंदु है जहाँ आप वास्तव में प्रतिक्षेपक नहीं कर सकते। यदि आपके पास कई अलग-अलग व्यावसायिक अनुप्रयोग हैं जो समान घटिया इंटरफ़ेस या डेटाबेस पर निर्भर करते हैं, तो आप सभी अन्य ऐप को तोड़ने के बिना अंतर्निहित सामान को बहुत अच्छी तरह से ठीक नहीं कर सकते हैं जो गंदे नींव पर निर्भर हैं। इस बिंदु पर आप वास्तव में खराब हैं।
जॉन क्रॉमार्टी

2

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


1

अक्सर अच्छे कोड को गलत धारणा के तहत छोड़ दिया जाता है कि नए उपकरण के साथ नई टीम इसे सस्ता कर सकती है, तेजी से अधिक भरोसेमंदता के साथ, केवल इसे खोजने के लिए

  • जटिलता निर्विवाद आवश्यकताओं में है
  • नए टूल का उपयोग करना कठिन है, तो फ्लैश वेबसाइट ने वादा किया है
  • नई टीम उतनी as हॉट ’नहीं है, जितना उन्होंने सोचा था

संभवतः आपके द्वारा वर्णित समय कुछ कोड आधारों के साथ आता है (मैं ऐसा सोचता था)। मैंने कभी भी पुराने कोड के एक मामले में व्यक्तिगत रूप से अनुभव नहीं किया है जिससे परियोजना को पेट भरने या परियोजना को बचाने वाले कोड को फिर से लिखा गया है।

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


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

लेकिन यह कैसे च ** एड हो गया? यदि इसके कारण जटिल आवश्यकताओं, खराब प्रबंधन, आशावादी इंजीनियरों पर, तो फिर से इसे क्यों ठीक किया जाएगा?
मटनज

क्योंकि टीम इसे फिर से लिखना शुरू में लिखने वाले के समान नहीं है?
थिबॉल्ट जे

1

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

लेकिन मुझे लगता है कि हम इसे एक नाम दे सकते हैं। "Gents," आप कह सकते हैं, अपने साथी डेवलपर्स को अपने आस-पास खींचते हुए, "हमने रख-रखाव Hellespont को पार कर लिया है। अपनी पत्नी को पाठ दें और उसे बताएं कि आप उसे थोड़ी देर के लिए नहीं देखेंगे।"


"कोडबेस में हर एक कमिटमेंट इस विश्वास के साथ किया जाता है कि यह उस कोडबेस पर एक सुधार है।" ऐसा लगता है कि हमने कभी एक ही कंपनियों में काम नहीं किया :)
थिबॉल्ट जे

@ थिबॉल्टज - शायद आपके सहकर्मी मनोरोगी रहे हैं?
दान रे

@ थिबॉल्ट जे: मेरा मानना ​​है कि हर एक कमिटमेंट इस विश्वास के साथ किया जाता है कि यह उस कोडबेस पर सुधार है। विश्वास कभी-कभी खराब शोध और निराधार होता है, निश्चित रूप से।
डेविड थॉर्नले

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

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

-1

मैं नहीं जानता कि अगर कोई नाम है, लेकिन अगर कोई है तो मैं उसे "मेल्टडाउन पॉइंट" कहूंगा।


या एक और परमाणु शब्द उधार लेने के लिए: महत्वपूर्ण द्रव्यमान।
जॉन क्रॉमार्टी

-2

यह बहुत दिलचस्प सवाल नहीं है।

वास्तव में यह तुच्छ है।

यह इतना तुच्छ है कि हमने सामना करने के कई तरीके विकसित किए हैं।

  1. झरने के तरीके। बहुत सारे लोग आवश्यकताओं की समीक्षा करने में बहुत समय बिताते हैं और यह सुनिश्चित करने के लिए डॉक्स बनाते हैं कि जटिलता का प्रबंधन किया गया है।

  2. चंचल तरीके। कम लोग इस बात पर चर्चा करने में कम समय देते हैं कि किसी की समस्या को हल करने के लिए तुरंत क्या लागू होता है और उनके लिए सॉफ्टवेयर जारी करें। जटिलता का प्रबंधन किया जाता है क्योंकि हर कोई कुछ जारी करने पर ध्यान केंद्रित करता है।

किसी भी समय "जटिलता" के साथ कोई भी कुश्ती करता है क्योंकि कार्यप्रणाली का पालन करने में विफलता और उनके समय को ठीक से प्रबंधित करना है।

  • झरना पद्धति में कोई विस्तृत पर्यवेक्षण नहीं। वे आवश्यकताओं, वास्तुकला, उच्च-स्तरीय डिज़ाइन या विस्तृत डिज़ाइन समीक्षाओं पर मध्यवर्ती कार्य उत्पादों की समीक्षा करने के लिए मजबूर नहीं होते हैं।

  • फुर्तीली पद्धति में कोई स्प्रिंट की समय सीमा या उचित उपयोग के मामले प्राथमिकताएं नहीं। वे उपयोगकर्ता को जल्द से जल्द कुछ जारी करने पर ध्यान केंद्रित नहीं कर रहे हैं।

लक्ष्यों को निर्धारित करके जटिलता को सीमित किया जाना चाहिए।

जटिलता के साथ कुश्ती का मतलब है कि लक्ष्य निर्धारित नहीं हैं या ठीक से पुरस्कृत नहीं हैं।

कोई "टर्निंग पॉइंट" नहीं है। यदि जटिलता प्रबंधन किसी तरह का मुद्दा है, तो कुछ पहले से ही संगठनात्मक रूप से गलत है।


1
मैं बात नहीं देख रहा हूँ। एक अच्छी तरह से चलने वाली परियोजना बिना रिटर्न के बिंदु पर हिट करने की बहुत संभावना नहीं है, लेकिन सभी परियोजनाएं अच्छी तरह से नहीं चलती हैं। कुछ बुरी तरह से संचालित परियोजनाएं वैसे भी सफल होंगी, और बाकी विभिन्न कारणों से विफल हो जाएंगी, कभी-कभी बिना किसी रिटर्न के जटिलता बिंदु को मारना और कभी-कभी नहीं।
डेविड थॉर्नले

@ डेविड थॉर्नले: यह मेरी बात है। "नो रिटर्न की जटिलता बिंदु" मौजूद नहीं है। यह सिर्फ सादा-पुराना बुरा प्रबंधन है। परिष्कृत नाम या नियम की कोई आवश्यकता नहीं है। जटिलता सिर्फ खराब प्रबंधन का एक लक्षण है। वास्तव में बहुत दिलचस्प नहीं है।
S.Lott

@ S.Lott: मुझे लगता है कि यह मौजूद है, हालांकि अच्छी तरह से प्रबंधित परियोजनाओं में नहीं। वहाँ बुरी तरह से प्रबंधित परियोजनाओं की एक भीड़ है, और उनमें से कुछ जटिलता घटना क्षितिज के अंदर मिल जाएगा और कुछ नहीं। मुझे नहीं लगता कि सभी खराब प्रबंधन को एक साथ मिलाना उपयोगी है।
डेविड थॉर्नले

@ डेविड थॉर्नले: मुझे लगता है कि खराब प्रबंधन (जो कि जटिलता को भयावह बना देता है) को खराब प्रबंधन (जो हर किसी को छोड़ देता है) से दूर करता है। मैं यह बताने का तरीका नहीं देख सकता कि कोई परियोजना बहुत जटिल हो जाएगी या बस देर से या सिर्फ अक्षम हो जाएगी।
S.Lott

@ एस.लॉट: हालांकि, एक परियोजना के बीच एक अंतर है जहां हर कोई एक बड़ी स्वास्थ्य टूटने और एक परियोजना से ग्रस्त है या एक ऐसी परियोजना से ग्रस्त है जहां जटिलता बहुत अधिक हो जाती है। असफल होने के अलग-अलग तरीके हैं, और उन्हें वर्गीकृत करना दिलचस्प या उपयोगी भी हो सकता है।
डेविड थॉर्नले

-2

(बड़ी) परियोजनाओं और कोड के लिए बढ़ती जटिलता के जोखिम की कल्पना और निगरानी करने के तरीके मौजूद हैं। जब उन्हें यथोचित रूप से लागू किया जाता है, तो वापसी के बिंदु के लिए एक नए नाम की आवश्यकता नहीं होती है। (OpenHPI पर संबंधित MOOC है: https://open.hpi.de/courses/softwareanalytics2015/ )

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

संरचनात्मक जटिलता को कम करने के कुछ तरीके हैं http://www.buch.de/shop/home/suche/?fq=3540888890 :

  • Modularisation
  • फीडबैक लूप से बचाव
  • ट्राईऐन्ग्युलेशंस

इसके अलावा स्वयंसिद्ध डिजाइन की अवधारणा है: https: \ en.wikipedia.org \ wiki \ Axiomatic_design \। इस अवधारणा के साथ अनावश्यक जटिलता के कारण reliabiltiy समस्याओं से बचा जा सकता है।

इस प्रकार उपलब्ध तरीकों का एक समूह है। अंत में यह हमेशा उनके बारे में सोचने के निर्णय के बारे में होता है क्योंकि एक परियोजना काफी बड़ी हो जाती है।


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