क्या मेटा-प्रोग्रामिंग का उपयोग करना ठीक है, हालांकि मेरे सभी सहकर्मी इसे नहीं समझते हैं?


102

मैं दोहराव वाले कार्यों से बचने और सुरक्षित उपयोग के सार का निर्माण करने के लिए बहुत सारे मेटा-प्रोग्रामिंग का उपयोग करता हूं।

मैं हाल ही में एक नई नौकरी में गया, जहां मैं एक बड़ी टीम में काम कर रहा हूं और इससे मेरे कुछ सहयोगियों को चिंता है, क्योंकि वे इसे समझ नहीं पाते हैं।

मैं हमेशा भाषा की पूरी क्षमता का लाभ उठाने की कोशिश करता हूं, लेकिन मेरे सहयोगियों में से कुछ (सभी नहीं) को लगता है कि जोखिम के रूप में (कुछ का स्वागत है)।

मैं मानता हूं कि कोड लिखना एक समस्या है जो टीम पर कोई और नहीं लिख सकता। दूसरी ओर हम सभी पेशेवर सी ++ डेवलपर्स हैं और मुझे लगता है कि हमें कक्षाओं के साथ सी लिखने की तुलना में उच्च स्तर की आकांक्षा करनी चाहिए।

मेरा सवाल यह है कि कौन सही है, मुझे क्या करना चाहिए?

स्पष्टता: भाषा की पूरी क्षमता का लाभ उठाने की कोशिश करने का मतलब यह नहीं है कि मैं हर समस्या पर टीएमपी फेंक दूं। C ++ एक टूलबॉक्स है और मेरे लिए C ++ प्रवीणता बॉक्स से सभी उपकरणों का उपयोग करने में सक्षम है और किसी विशेष कार्य के लिए सही चुनने के बारे में है।


38
यह अंततः राय आधारित है। व्यक्तिगत रूप से, मैं इसे इतनी जटिल सुविधाओं का उपयोग नहीं करने के लिए एक नियम बनाता हूं कि वे गलती से ट्यूरिंग-पूर्ण हैं - जैसे कि सी ++ टेम्पलेट मेटाप्रोग्रामिंग।
किलन फ़ॉथ

24
@KilianFoth टेम्पलेट "दुर्घटनावश" ​​ट्यूरिंग-पूर्ण नहीं हैं। वे हमेशा अमूर्त के शक्तिशाली उपकरण होने का इरादा रखते थे
केलथ

73
कोड जिसे कोई नहीं समझ सकता है वह उच्च मानक नहीं है।
गिर्बर्ट

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

26
मिथ्या द्वंद्ववाद। आप एक "उच्च मानक" पर प्रोग्राम कर सकते हैं और कक्षाओं के साथ सी को पीछे छोड़ सकते हैं, आधुनिक सी ++ को गले लगा सकते हैं, टेम्प्लेट (जैसे एसटीएल) के साथ-साथ कास्ट, नो () कास्टिंग, कोई पॉइंटर अंकगणितीय, मूल्य शब्दार्थ, बहुत सारे अच्छे, शीर्षक के बिना उपयोग कर सकते हैं। ibnto टीएमपी। यदि आपको C-with-classes और TMP के बीच कोई दिन का उजाला नहीं दिखता है तो आप इसे गलत कर रहे हैं।
केट ग्रेगोरी

जवाबों:


185

Metaprogramming ठीक है। आप जो करने की कोशिश कर रहे हैं वह ठीक नहीं है।

मैं अपनी नौकरी में हर समय मेटाप्रोग्रामिंग का उपयोग करता हूं। यह एक शक्तिशाली उपकरण है जिसका उपयोग बहुत अधिक चीजों को अधिक पठनीय और रखरखाव योग्य तरीके से करने के लिए किया जा सकता है। यह भी वहाँ प्रोग्रामिंग की शैलियों को समझने के लिए कठिन में से एक है, तो यह वास्तव में अपने रखने की जरूरत है। मुझे यह पसंद है जब मैं कोड की 1000 लाइनों को घटाकर 50 कर सकता हूं, लेकिन मैं इसे इस तरह सीमित करने की कोशिश करता हूं।

मुद्दा मेटाप्रोग्रामिंग नहीं है, लेकिन यह:

दूसरी ओर हम सभी पेशेवर सी ++ डेवलपर्स हैं और मुझे लगता है कि हमें कक्षाओं के साथ सी लिखने की तुलना में उच्च स्तर की आकांक्षा करनी चाहिए।

यह वह जगह है जहाँ आप मुसीबत में पड़ते हैं। आपकी एक राय है। यह राय ठीक है कि मेटाप्रोग्रामिंग अच्छा है। यह राय ठीक है कि हम सभी को बेहतर C ++ डेवलपर्स बनने की ख्वाहिश होनी चाहिए।

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

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

यदि आप उन्हें मेटाप्रोग्रामिंग के साथ ठीक होने के लिए प्रोत्साहित करना चाहते हैं , तो छोटी शुरुआत करें । एक एकल से शुरू करें enable_ifजो एपीआई को पढ़ने में आसान बनाता है। फिर दिन के उजाले की टिप्पणी करें । तब शायद एक ऐसा मामला मिलता है जहां एक टेम्पलेट मेटाफ़ंक्शन 10 छोटे सहायकों के साथ 10 वर्ग में 10 बड़े दोहराव वर्गों को बदल देता है। इसके बारे में टिप्पणी करें। प्रतिक्रिया हासिल करें। जानें कि लोग इसके बारे में क्या सोचते हैं। ठीक है अगर वे आपको यह नहीं करने के लिए कहते हैं। एक आला खोजें जहां मेटाप्रोग्रामिंग अपनी कमाई को इतनी अच्छी तरह से रखता है कि आपके सभी कॉलेजिएट (begrudgingly) सहमत हैं कि यह नौकरी के लिए सही उपकरण था।

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

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

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


72
कुछ अन्य शैली, तकनीक, तकनीक, पुस्तकालय के साथ "मेटाप्रोग्रामिंग" को बदलें, और जवाब अभी भी बहुत अच्छा है!
रूसियों

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

4
@ t3chb0t: एक अनुभवी बॉस जानता है कि ग्राहक सेवा (यानी, बग फिक्सिंग और नई सुविधाओं) पर कितना पैसा खर्च किया जाना चाहिए और उस लागत को कैसे कम किया जाए। रखरखाव उस उद्देश्य के लिए सबसे शक्तिशाली उपकरण है। उस मालिक को तकनीकी विवरण नहीं पता होगा, लेकिन उस टीम का निर्माण करने में सक्षम होना चाहिए जिसे उस बिंदु पर भरोसा किया जा सके।
मौविसील

25
@Drmmr मैंने किसी ऐसे व्यक्ति के लिए टोन सेट किया है जो मानता है कि मानक बढ़ाने के लिए प्रोग्रामर को मेटाप्रोग्रामिंग का उपयोग करना चाहिए। मुझे नहीं लगता कि इसे नीचे गिरा दिया जाना चाहिए जहां कम से कम कुशल टीममैंबर इसे बनाए रख सकते हैं। इसे नीचे डंप किया जाना चाहिए जहां टीम इसे बनाए रख सकती है, और शायद और भी मजबूत है, इसे नीचे डंप किया जाना चाहिए जहां टीम आपके बिना इसे बनाए रख सकती है । नहीं तो कोई एक काम लिख रहा है।
कोरट अमोन

15
@ जोशुआ जो मैंने पाया है वह यह है कि "कोड के रूप में ऐसी चीज मौजूद नहीं है जिसे रखरखाव की आवश्यकता नहीं है।"
Cort Ammon

39

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

ध्यान दें कि C ++ में टेम्प्लेट मेटा-प्रोग्रामिंग का उपयोग करना हमेशा एक ट्रेड-ऑफ होता है: निश्चित रूप से, यह कभी-कभी किसी एप्लिकेशन के कुछ हिस्सों को और अधिक DRY डिजाइन करने में मदद कर सकता है, और यह निश्चित रूप से अत्यधिक कुशल और अत्यधिक पुन: प्रयोज्य लाइब्रेरी बनाने के लिए सहायक है।

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


मैं सहमत हूं लेकिन इसे कोड में रखने से पहले QA के साथ चर्चा करें। कोई ऐसी चीज बनाने में कोई समझदारी नहीं जो खारिज की जाएगी।
shawnhcorey

8
कैसे के बारे में: "मैं सहमत हूं। लेकिन ..." इसे "बदलना" पूरी तरह से अर्थ बदल देता है। समय पर खर्च होने से पहले हमेशा क्यूए के साथ कुछ असामान्य चर्चा करनी चाहिए। आपने कहा था कि यह चर्चा कोड समीक्षा में होनी चाहिए, समय व्यतीत होने के बाद।
shawnhcorey

@shawnhcorey: निश्चित रूप से, यदि आपके संगठन में "QA" कोडिंग मानकों के लिए ज़िम्मेदार है। हालांकि, यह आईएमएचओ नहीं है "क्यूए" भूमिका - ज्यादातर संगठनों में मुझे पता है, "क्यूए" शब्द उन लोगों के एक समूह को संदर्भित करता है जो एक ब्लैक-बॉक्स तरीके से गुणवत्ता आश्वासन देते हैं, न कि एक प्रोग्रामिंग भाषा के किन तत्वों के लिए जिम्मेदार होना चाहिए। इस्तेमाल किया जा सकता है और जो नहीं। ऐसे विवरणों पर चर्चा करने के लिए वे लोग शायद ही कभी प्रोग्रामिंग में योग्य होते हैं।
डॉक ब्राउन

2
@shawnhcorey: यह बिल्कुल मेरी बात है, क्यूए की भूमिका विभिन्न संगठनों में बहुत भिन्न होती है। बहुत सारे संगठनों में, क्यूए लोगों को प्रोग्रामिंग का कोई विचार नहीं है, इसलिए वे शायद इस तरह के विषय पर चर्चा करने के लिए सही नहीं हैं।
डॉक्टर ब्राउन

2
@shawnhcorey: ठीक है, एक तरफ आपने लिखा था "क्यूए एक सामान्य शब्द है" - दूसरी ओर, आपके पास एक बहुत ही विशिष्ट क्यूए की भूमिका और जिम्मेदारी ध्यान में है - मेरे लिए थोड़ा विरोधाभासी लगता है।
डॉक्टर ब्राउन

18

मेरी सामान्य राय: यदि आपके पास कोई विकल्प है, जैसा कि अक्सर होता है, तो निम्नलिखित तीन विकल्पों के बीच:

  • हाथ से दोहराए जाने वाले कई nontrivial कोड संरचनाओं को टाइप करें;
  • कोड पीढ़ी को स्वचालित करने के लिए C ++ टेम्पलेट मेटाप्रोग्रामिंग का उपयोग करें;
  • C ++ स्रोत फ़ाइलों को बनाने के लिए कुछ अन्य कोड जनरेशन मैकेनिज़्म, जैसे मैक्रोज़ या कुछ अन्य प्रोग्रामिंग भाषा का उपयोग करें

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

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

मुझे नहीं लगता है कि आप जिस प्रकार के कोड को लिखने का प्रयास कर रहे हैं, उसका उदाहरण देखे बिना हम सही या गलत का आंकलन कर सकते हैं।


2
आप इसे हाथ से टाइप करने के बजाए कॉपी + पेस्ट का भी इस्तेमाल कर सकते हैं ;-)
पाओलो एबरमन

4
@ Pa @loEbermann: बिल्ली नहीं!
जोशुआ

2
@ Pa @loEbermann एक दुकान मैं उस दृष्टिकोण को बुलाया गया था, "शुरुआत-निशान-बग, अंत-निशान-बग, कॉपी-बग, कॉपी-बग, कॉपी-बग।"
केली एस। फ्रेंच

12

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

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


9

करुणा से एक तर्क:

क्या आपकी नौकरी सीखने के लिए खाली समय देती है, या वैकल्पिक रूप से, क्या आप अपने मालिकों को इन भाषा सुविधाओं को सीखने के लिए कुछ घंटे आवंटित करने के लिए मना सकते हैं?

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


8

मनुष्यों को पढ़ने के लिए कोड पहले लिखा जाना चाहिए, और संयोग से संकलक को पार्स करने के लिए।

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

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

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

मैं यह भूल जाता हूं कि यह किसने कहा था, लेकिन सभी जानते हैं कि डिबगिंग कठिन है, फिर इसे पहली जगह में लिखना, इसलिए यदि आप इसे जितना हो सके चतुराई से प्रोग्राम करते हैं, तो आप इसे कैसे डिबग करेंगे? "।

यहां तक ​​कि अगर मैं वास्तव में आधुनिक सी ++ लिख सकता हूं, तो मैं आमतौर पर पसंद नहीं करता हूं, इसका मतलब है कि मुझे रखरखाव प्रोग्रामिंग से कम करना होगा।


7

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


3
आप उस कोड का उत्पादन करने के लिए कार्यरत हैं जो एक विनिर्देश को संतुष्ट करता है। हाँ, लेकिन आप भूल रहे हैं कि ज्ञान का सबसे अच्छा करने के लिए भी ।
t3chb0t

2

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

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

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


0

इस प्रश्न का एक भी सही उत्तर नहीं है।

क्योंकि पहली चीज जो आपको खुद से पूछनी चाहिए वह यह है: आप अपने रोजगार को किस स्थिति में रखते हैं? कुछ लोगों को वास्तव में विशिष्टताओं को कोड करने के लिए कोड बंदरों के रूप में नियोजित किया जाता है, दूसरों को टीम के खिलाड़ियों के रूप में नियुक्त किया जाता है, दूसरों को ज्ञान कार्यकर्ता या विशेषज्ञों के रूप में नियोजित किया जाता है।

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


-4

सवाल वास्तव में इस बारे में नहीं है कि मेटा-प्रोग्रामिंग ठीक है या नहीं, बल्कि इस बारे में कि क्या टीम पर दूसरों की तुलना में बेहतर होना ठीक है, इसलिए यहां कुछ विवादास्पद बिंदु हैं कि मैं इसे कैसे देखता हूं ...


मैं हाल ही में एक नई नौकरी में गया था जहाँ मैं एक बड़ी टीम में काम कर रहा था और यह [मेटा-प्रोग्रामिंग] मेरे कुछ सहयोगियों को चिंतित करता है, क्योंकि वे इसे समझ नहीं पाते हैं।

वे चिंतित हैं कि आप फिर बेहतर हैं। अच्छी बात है। आप नए विशेषज्ञ बनने जा रहे हैं। आपने बस उनकी यथास्थिति को नष्ट कर दिया।


मैं हमेशा भाषा की पूरी क्षमता का लाभ उठाने की कोशिश करता हूं, लेकिन मेरे सहयोगियों में से कुछ (सभी नहीं) को लगता है कि जोखिम के रूप में (कुछ का स्वागत है)।

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


मैं मानता हूं कि कोड लिखना एक समस्या है जो टीम पर कोई और नहीं लिख सकता।

मैं नही। मुझे लगता है कि यह आपकी विशेषज्ञता दिखा रहा है।


मेरा सवाल यह है कि कौन सही है, मुझे क्या करना चाहिए?

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


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


संपादित करें

इस सवाल को लेकर काफी भ्रम की स्थिति बनी हुई है। जैसा कि टिप्पणियों से पता चलता है कि बहुत से लोग सोचते हैं कि यह सामान्य कोड पठनीयता के बारे में है। नहीं यह नहीं। यह इस बारे में है कि क्या कुछ भाषा सुविधाएँ / निर्माण निषिद्ध या टाल दिए जाने चाहिए क्योंकि कुछ टीम के सदस्य उन्हें नहीं समझते हैं।

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

यह दिखाने के लिए कि इस तरह के प्रतिबंध कितने मूर्खतापूर्ण हैं, चलो एक बहुत ही सरल उदाहरण लेते हैं: आप एक सॉफ्टवेयर इंजीनियर के रूप में काम पर रखने जा रहे हैं, लेकिन आपका भावी बॉस आपको बताता है कि आपको do/whileलूप का उपयोग करने की अनुमति नहीं दी जाएगी क्योंकि कुछ लोग हैं जो टीम ने पहले कभी उनका उपयोग नहीं किया है और वे भी नहीं जा रहे हैं क्योंकि वे हमेशा से forहर चीज के लिए लूप का उपयोग करते रहे हैं ताकि वे do/whileलूप को भ्रमित कर सकें ।

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

यदि आपको पता है कि आपको बदतर कोड का उत्पादन क्यों करना चाहिए, तो ऐसा कुछ है जो आपको बहुत कम प्रयास के साथ ऐसा करने की अनुमति देता है और फिर भी बहुत अधिक पठनीय परिणाम होता है?

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


10
यह उत्तर भयानक है। मेटा-प्रोग्रामिंग का वर्चस्व नहीं है और इसके विपरीत
polfosol

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

3
अन्य लोगों द्वारा पढ़ा जा सकने वाला कोड यह साबित नहीं करता है कि आप उनसे बेहतर हैं। यह साबित करता है कि आप पठनीय कोड नहीं लिख सकते।
स्टिग हेमर

3
@StigHemmer स्पष्ट रूप से आपको सवाल समझ नहीं आया और आप विषय बदल रहे हैं। यह गैर-पठनीय कोड के बारे में नहीं है, लेकिन ज्ञान की कमी के कारण दूसरों के लिए कोड के बारे में समझ से बाहर है।
t3chb0t

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