एक सुसंगत कोड शैली का वास्तविक मूल्य क्या है


47

मैं एक ग्राहक के लिए एक नया समाधान लागू करने वाली सलाहकार टीम का हिस्सा हूं। मैं क्लाइंट-साइड कोडबेस (रिएक्ट और जावास्क्रिप्ट) पर अधिकांश कोड समीक्षाओं के लिए जिम्मेदार हूं।

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

उदाहरण 1 (एक-इनलाइन कार्य)

React.createClass({
  render: function () {
    var someFunc = function () {
      ...
      return someValue;
    };
    return <div>{someFunc()}</div>
  }
});

लेखक का तर्क है कि someFunc को सार्थक नाम देने से कोड को पढ़ने में आसानी होगी। मेरा मानना ​​है कि फ़ंक्शन को सम्मिलित करने और इसके बजाय एक टिप्पणी जोड़ने से एक ही प्रभाव प्राप्त किया जा सकता है।

उदाहरण 2 (अनबाउंड फ़ंक्शंस)

function renderSomePart(props, state) {
    return (
      <div>
        <p>{props.myProp}</p>
        <p>{state.myState}</p>
      </div>
    );
}

React.createClass({
  render: function () {
    return <div>{renderSomePart(this.props, this.state)}</div>;
  }
});

ऐसा हम आमतौर पर करते हैं (राज्य और प्रॉप्स पास करने से बचते हैं):

React.createClass({
  renderSomePart: function () {
    return (
      <div>
        <p>{this.props.myProp}</p>
        <p>{this.state.myState}</p>
      </div>
    );
  },
  render: function () {
    return <div>{this.renderSomePart()}</div>;
  }
});

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

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

मैं खुद की कल्पना करने की कोशिश कर रहा हूं क्योंकि ग्राहकों के रखरखाव डेवलपर को इन जैसी विसंगतियों का सामना करना पड़ता है (प्रत्येक घटक को आपको एक ही काम करने के दूसरे तरीके को समझने की आवश्यकता हो सकती है)।

सवाल:

ग्राहक और उसके अनुरक्षण डेवलपर्स द्वारा एक सुसंगत कोड बेस के रूप में मूल्य क्या है बनाम इन जैसी विसंगतियों को रहने और संभावित रूप से फैलने की अनुमति देता है?


50
सुसंगत ऑर्थोग्राफी का मूल्य क्या है? पाठ पढ़ने और लिखने में एक स्थायी, निरंतर गति। सुसंगत कोड शैली का मूल्य क्या है? कोड पढ़ने और लिखने में एक स्थायी, लगातार गति। तुम्हें और क्या चाहिये था?
किलिअन फोथ

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

1
जोएल के पास उस विषय पर कुछ अच्छे विचार हैं। संक्षेप में, एक अच्छा कोडिंग मानक बग को देखना आसान बनाता है। joelonsoftware.com/articles/Wrong.html

13
मैं जोड़ना चाहता हूं कि नामित कार्यों को जावास्क्रिप्ट में अनाम कार्यों के लिए लगभग हमेशा पसंद किया जाता है। जब डिबगिंग यह एक टन को निर्धारित करने में मदद करता है कि आप स्टैक में कहां हैं।
माइक मैकमोहन

1
@yoniLavi से आपको यह पूछना चाहिए कि मेटा पर।
रबरडुक

जवाबों:


48

कोड ट्रांसफर एडवांटेज

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

संभावित पिछड़े संगतता मुद्दे

कुछ पुस्तकालयों में एक नया प्रमुख संस्करण होगा, और यदि आपके पैटर्न में काफी भिन्नता है, तो पिछड़े संगतता से समझौता किया जा सकता है, इस प्रकार यह आपके भविष्य के उन्नयन को धीमा / बंद कर सकता है। मुझे यकीन नहीं है कि Reactनई रिलीज़ से कैसे निपटेंगे, लेकिन मैंने ऐसा पहले भी देखा है।

टीम के नए सदस्य प्रोडक्टिव क्विक होने की शुरुआत करते हैं

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

संभावित अनदेखे मुद्दे

भविष्य में ऐसे मुद्दे हो सकते हैं जिन्हें आपने अभी तक अपने दृष्टिकोण से नहीं खोजा है, जो लेखक के दृष्टिकोण से हल हो गए हैं।

यह कहा जा रहा है, नवाचार हमेशा एक जोखिम होता है, अगर आपको दृढ़ता से लगता है कि आपका दृष्टिकोण बेहतर है और यह आपकी टीम के लिए काम करता है, तो इसके लिए जाएं!


इन उत्कृष्ट बिंदुओं के लिए धन्यवाद। हम आमतौर पर पुस्तकालय द्वारा प्रदान किए गए पैटर्न का पालन कर रहे हैं। मेरे द्वारा दिए गए उदाहरण (कोड समीक्षाओं में पाए गए) विचलित होते हैं। मुझे चिंता है कि ग्राहक अस्वीकार कर सकता है और हमें अपनी डिलीवरी के एक हिस्से को फिर से करने की आवश्यकता है क्योंकि यह "प्रतिक्रिया की तरह नहीं दिखता और महसूस करता है"। अब मुझे पता है कि वे ऐसा क्यों करेंगे।
एंड्रियास वॉरबर्ग

2
+1 "rather than teaching new patterns"- प्रक्रियात्मक प्रशिक्षण नई हायर के साथ एक बहुत बड़ा समय सिंक है। हमेशा जाने-माने पैटर्न
गुग्डोर जूल

1
@ एलेक्सस: पीछे की संगतता के बारे में, रिएक्ट अभी भी 1.0 संस्करण में नहीं है। वर्तमान संस्करण, 0.13, ने कुछ अत्यधिक कठोर तरीकों से संगतता को तोड़ दिया, हालांकि ये विफलताएं होंगी या नहीं, इस बात पर निर्भर करता है कि रिएक्ट घटकों को कॉल करने के लिए किस तंत्र का उपयोग किया जाता है। रिएक्ट को कॉल करने के लिए बहुत सुसंगत नियम होने से रिएक्ट अपग्रेड को ब्रेकिंग कोड से रोका नहीं जा सकता है, लेकिन लगातार कोड को ठीक करना आसान, तेज और अधिक विश्वसनीय है। प्रतिक्रिया के मामले में पिछड़े संगतता मुद्दों के बारे में आपकी चिंता निश्चित रूप से उचित है। उदाहरण के लिए, मेरी टिप्पणी stackoverflow.com/a/20913637/18192
ब्रायन

53

विसंगतियां आपको रोकती हैं और सोचती हैं कि क्यों , कौन और कहां :

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

    उस कोड को छूने / पढ़ने की आवश्यकता वाली टीम के प्रत्येक दूसरे डेवलपर द्वारा गुणा करें।

  • जब आपको कई शैलियों का उपयोग करने वाले कोड में जोड़ने की आवश्यकता होती है, तो आपको रोकने और यह तय करने की आवश्यकता होती है कि आपके जोड़ के लिए किस शैली का उपयोग करना है। आपको उस निर्णय के लिए पर्याप्त निर्णय लेने होंगे - यह समय की बर्बादी है उन निर्णयों के बारे में सोचने में समय बर्बाद करना जो मायने नहीं रखते हैं।

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


6
महान, कट्टर अंतर्दृष्टि। कुछ डेवलपर्स इसे सिर्फ 'प्राप्त' क्यों करते हैं, और अन्य इसके खिलाफ लड़ते हैं?
डॉगवेदर

2
संदेह है क्योंकि एक सुसंगत शैली का प्रस्ताव किया जा रहा है, जो पिछले परियोजनाओं में उन्होंने काम किया है, के साथ गहरा असंगत है। विशेष रूप से विभिन्न वातावरणों में पर्याप्त मात्रा में अनुभव वाले लोगों के लिए।
किकस्टार्ट

4

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

हमें समय पर पहुंचाने के लिए तेज गति रखने की आवश्यकता है और मैं टीम को अनावश्यक रूप से बोझ नहीं बनाना चाहता।

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

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


2

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

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

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

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

आप जिस चीज की तलाश कर रहे हैं वह आपकी अपनी टीम का खुशहाल माध्यम है।


2

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

मुझे यह आभास मिलता है कि, नीचे, आप पहले से ही इस प्रश्न का उत्तर जानते हैं, और यदि आप इसके लिए नहीं थे, तो आप इसका सामना नहीं करेंगे:

हमें समय पर पहुंचाने के लिए तेज गति रखने की आवश्यकता है और मैं टीम को अनावश्यक रूप से बोझ नहीं बनाना चाहता।

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

हालांकि मैं वर्षों से इस अवधारणा के बारे में जानता हूं, मैंने हाल ही में " तकनीकी ऋण " शब्द सीखा है । आपको वास्तव में तकनीकी ऋण पर विचार करने की आवश्यकता है जो अंततः अनुशासित शैली का पालन नहीं करने पर चुकाना होगा।

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


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

2

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

मामूली सामान पर बहुत अधिक ध्यान केंद्रित करने से अधिक महत्वपूर्ण मुद्दों पर ध्यान केंद्रित करने का जोखिम होता है, जैसे कि कुल मिलाकर सबसे कुशल तरीके से नौकरी कैसे हल करें।

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

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

ग्राहकों के बारे में

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


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

0

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

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