क्या कोड के पीछे का उद्देश्य संज्ञानात्मक उपरि को कम करने के लिए 'मुहावरेदार' होना है?


22

मैं किसी को यह समझाने की कोशिश कर रहा हूं कि जिस तरह से उन्होंने कोड लिखा है उसे समझना मुश्किल हो जाता है, और यदि आप इसे रिफैक्ट करते हैं तो इसे पढ़ना आसान है। कोड की इस शैली को मैं आमतौर पर 'मुहावरेदार' कोड कह रहा हूं।

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

जिस तरह से मैं इस विचार को समझाने के साथ आया हूं, जो लोगों को अपना कोड बदलने के लिए प्रेरित करता है:

  • कोड को इस तरह से लिखना कि यह पाठक के संज्ञानात्मक ओवरहेड को कम करता है (जैसे कि मुझे याद नहीं है कि यह पहली तरह का वेक्टर है - या 5 वीं तरह का वेक्टर)
  • कोड जो इरादे को समझना आसान बनाता है (उदाहरण के लिए यह वेक्टर क्या है?)

(एक तरफ के रूप में, मुझे पता है कि द जॉय ऑफ क्लोजर, किताब, इसके पहले प्रकाशन से पहले, ड्राफ्ट शीर्षक इडियोमीटिक क्लोजर था। इसलिए यह कोड को 'मुहावरेदार' बनाने का एक कारण प्रतीत होता है, पाठक के लिए 'खुशी लाने' के लिए)। )।

मेरा प्रश्न है: क्या कोड के पीछे का उद्देश्य संज्ञानात्मक उपरि को कम करने के लिए 'मुहावरेदार' होना है?


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

जवाबों:


19

सबसे पहले, मुझे यकीन नहीं है कि "मुहावरेदार" शब्द में किसी भी प्रकार का "नैतिक शुद्धता" है। सादा शब्दकोश परिभाषा बस है

ख़ासियत या किसी विशेष भाषा या बोली की विशेषता: मुहावरेदार फ्रांसीसी।

हां, मुहावरेदार कोड आम तौर पर संज्ञानात्मक उपरि को कम करता है, विशेष रूप से इंटरफ़ेस परिभाषाओं में जहां मानक पुस्तकालय और किसी भी तीसरे पक्ष के पुस्तकालयों को परियोजना की आवश्यकता होती है (वस्तुतः) सभी मुहावरेदार।

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

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


1
आपका उत्तर, काफी उचित है, इस प्रतिक्रिया को प्रेरित करता है: पेरिस, मॉन्ट्रियल, कोटे डी आइवर से मुहावरेदार फ्रांसीसी? कोड इतना अलग नहीं है। समुदाय के बिना कोई मुहावरा नहीं है। यदि आप मॉन्ट्रियल से आवाज़ करते हैं, तो आप पेरिस में थोड़ा 'संज्ञानात्मक अधिभार' पैदा करने की उम्मीद कर सकते हैं। संभवतः दुनिया हमेशा उन लोगों के बीच विभाजित होगी जो सोचते हैं कि एक ही सही तरीका है (पायथन?) और जो कहते हैं कि विवे ला डिफरेन्स! (जावास्क्रिप्ट?)। अब, यदि हम जावास्क्रिप्ट मुहावरे को लिखना चाहते हैं, जो संकलक अधिक कुशल लगता है, तो आइए हम सभी को एक मिनिफायर / क्रॉलर के रूप में लिखते हैं!
joshp

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

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

10

मुझे यकीन नहीं है कि जहां आपको यह विचार मिलता है कि मुहावरों का कोई नैतिक अर्थ है। मुहावरे केवल चीजों को व्यक्त करने का एक तरीका है। वे व्यक्तिगत शब्दों या वाक्यांशों से बड़े पैमाने पर पैटर्न हैं।

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

कंप्यूटर की भाषाएं अलग नहीं हैं।

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


5

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

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

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

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

लोगों का कहना है कि कोड को पढ़ना आसान होना चाहिए। यह केवल आधा सच है। इसे समझना आसान होना चाहिए, जिसके लिए इसके बारे में तर्क करना भी आसान होना चाहिए। इसके लिए पर्याप्त मात्रा में गर्भपात की आवश्यकता होती है । ज्यादातर चीजों के साथ, यह सही संतुलन बनाने की बात है।


काश मैं कि FizzBuzzEnterpriseEdition लिंक के लिए एक और +1 अकेले ... :-D दे सकता है
cmaster - को पुनः स्थापित मोनिका
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.