जब विशिष्ट मामलों को सुलझाने पर एक सामान्यीकृत समाधान को प्राथमिकता देना है


18

प्रोग्रामिंग में हम अक्सर एक विकल्प के साथ सामना करते हैं: व्यक्तिगत रूप से प्रत्येक बोधगम्य उपयोग के मामले को कवर करते हैं, या सामान्य समस्या को हल करते हैं:

XKCD - सामान्य समस्या

यह स्पष्ट है कि तत्काल समस्या को हल करना तेज है, हालांकि सामान्यीकृत समाधान बनाने से भविष्य में समय की बचत होगी।

मुझे कैसे पता चलेगा कि मामलों की एक सीमित सूची को आज़माना और कवर करना सबसे अच्छा है, या सभी संभावनाओं को कवर करने के लिए एक सामान्य प्रणाली बनाना है?


4
इतने सारे पतन क्यों?
प्योरफेरेट

3
मेरे लिए एक उचित प्रश्न की तरह लगता है। ऐसा लगता है कि आपके पास हालांकि एक अधूरा संपादन है; आप इस बात का ध्यान रखना चाहेंगे।
स्टुअर्ट मार्क्स


@ पता है कि विभिन्न कार्यक्रमों / परियोजनाओं के बीच है। मैं उसी प्रोजेक्ट / परिदृश्य के बारे में पूछ रहा हूं।
प्यूरफेरेट

बहुत ही अस्पष्ट। सभी मामलों को कवर है सामान्य समस्या को सुलझाने। उसके बाद, यह केवल एक बात है कि आप अपना कोड कैसे लिखते हैं।
कालेब

जवाबों:


29

सबसे पहले, आप नमक पास करते हैं। फिर आप काली मिर्च पास करें। फिर आप कद्दूकस किया हुआ पनीर पनीर पास करते हैं। इस बिंदु पर, आपके पास एक सामान्य मसाला-पासिंग सिस्टम विकसित करने के लिए पर्याप्त अनुभव है।

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


4
यह एक महान जवाब है!
प्योरफेरेट

और यही कारण है कि एजाइल चट्टानों।
व्यंग्यात्मक


9

मुझे कैसे पता चलेगा कि मामलों की एक सीमित सूची को आज़माना और कवर करना सबसे अच्छा है, या सभी संभावनाओं को कवर करने के लिए एक सामान्य प्रणाली बनाना है?

अनुभव।

यह जानने का एकमात्र तरीका है कि आपने पहले एक रास्ता आज़माया है, यह देखा कि यह आपको गधे में कैसे काट रहा है (या आपने समय बर्बाद किया है)। तब तक दोहराएं जब तक आप गधे में कम न हो जाएं।

फिर भी, आप वास्तव में नहीं जानते हैं ; आप बस एक बेहतर अनुमान है।


3

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

समय से पहले सामान्यीकरण का विरोध करने वाला सिद्धांत YAGNI (You Ain’t Gonna Need It) है। वेब पर इसके बारे में कई सामग्रियां उपलब्ध हैं, लेकिन मूल रूप से YAGNI कई वास्तविक उपयोग के मामलों के लाभ के बिना सामान्यीकरण में कई जोखिमों की ओर इशारा करता है, जिनमें संभावना है कि कई उपयोग के मामले वास्तव में प्रकट नहीं हो सकते हैं। या, अधिक सूक्ष्मता से, वास्तविक उपयोग के मामलों की कमी से भविष्य में क्या आवश्यक है, इसके बारे में धारणा बनाने के लिए एक की आवश्यकता होती है। ये धारणाएं गलत भी हो सकती हैं।


2

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

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


2

एक बार करो, दो बार करो, तीन बार करो, सामान्य करो।


1

एक, दो, कई!

दूसरे मामले में आपको सामान्यीकरण पर सोचना चाहिए। तीसरे के लिए पूछे जाने पर आपको इसे सामान्यीकृत कोड से आपूर्ति करना चाहिए और पहले और दूसरे मामले का उपयोग करना चाहिए जो पहले परीक्षण के मामलों के रूप में व्यक्तिगत रूप से हल किया गया था।

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