क्या मेरी टीम को अपने लिए एक आधार के रूप में कुछ सामान्य सुविचारित कोडिंग मानक का उपयोग करना चाहिए?


9

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

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

इसलिए, जिन विकल्पों के बारे में मैं सोच रहा था, उनमें से एक अपेक्षाकृत प्रसिद्ध और अच्छी तरह से ज्ञात दस्तावेज़ ले रहा है, जो कि हम उसकी परवाह नहीं करते / करते हैं, और अपनी प्राथमिकताओं के आधार पर कुछ संशोधन कर रहे हैं।

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

टिप्पणियाँ:

  • हम C, C ++, OpenCL, CUDA, पायथन के साथ काम करने की उम्मीद कर रहे हैं।
  • हम 4 लोगों + प्रबंधक की एक टीम हैं, एक या एक साल के भीतर लगभग 5-6 बढ़ने की उम्मीद है।
  • हमारी कंपनी में, टीमें लगभग पूरी तरह से स्वायत्त हैं और आमतौर पर आपस में बातचीत नहीं करती हैं (एक-दूसरे के कोड का उपयोग करके भी नहीं - काम पूरी तरह से अलग-अलग परियोजनाओं पर है); इसलिए - बनाने के लिए कोई कंपनी-व्यापी विचार नहीं।
  • टूल के बारे में, इस समय जो हमें पता है कि हम ग्रहण का उपयोग करने जा रहे हैं , इसलिए इसका कोड फ़ॉर्मेटर कम से कम एक टूल होने वाला है। Ctrl + Shift + F लंबे समय से मेरा दोस्त है
  • जब मैं जावा लिखता हूं, तो मैंने बलोच के प्रभावी जावा को सख्ती से पालन करने का अभ्यास अपनाया है । अब, यह काफी कोडिंग मानक नहीं है, लेकिन आप कोडिंग मानक के लिए कुछ ईंटों, सीमेंट और मोर्टार को कॉल कर सकते हैं। मैं संभवतः 'मिक्स' के हिस्से के रूप में ऐसा कुछ सोच रहा था (यह सोचकर कि हम जावा नहीं करते)।
  • मेरा मतलब है कि शब्द के व्यापक अर्थों में कोडिंग मानक, जैसे इस P.SE प्रश्न के उत्तर में दिए गए सुझावों को अपनाना ।
  • मुझे C ++ कोडिंग मानकों के दस्तावेजों की एक बड़ी सूची मिली है ; शायद मुझे मेरा आधारभूत आधार चाहिए।
  • (*) यह बिल्कुल सच नहीं है, लेकिन मैं इस प्रश्न को बहुत अधिक बारीकियों के साथ जटिल नहीं करना चाहता।

9
बाहरी रूप से बनाई गई कोडिंग मानक का उपयोग करने से विशेष कोडिंग शैलियों के बारे में पवित्र युद्धों को कम करने में मदद मिलती है।
रोबोट

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

3
नामकरण सम्मेलनों को ओवरराइड किया जाता है। यदि आपके पास एक मॉड्यूल है जहां फ़ंक्शन CamelCase हैं और दूसरा जहां वे स्नेककेस हैं, तो यह एक बड़ी बात नहीं है यदि आप कम से कम प्रत्येक घटक के लिए पहले से ही कन्वेंशन का पालन करने के लिए सहमत हैं। इसलिए यदि पवित्र युद्ध बहुत गर्म हो जाए, तो बस इसे रोक दें और इसे असंगत छोड़ दें।
जन हडेक

1
मेरे पास बहुत कम ग्रहण का अनुभव है, लेकिन ग्रहण के लिए कोड मानक (शैली नहीं) लागू करने वाला सहायक हो सकता है
16:35 पर Dan Pichelman

1
तो आपकी पसंद एक मौजूदा मानक का उपयोग करती है या एक बनाने के लिए समय और पैसा खर्च करती है? मुझे यहाँ कोई विकल्प नहीं दिखता। मुफ्त विकल्प के साथ जाओ।
रामहुंड 15

जवाबों:


9

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

असमान रूप से, इसका उत्तर हां में है।

बाहरी रूप से सुगंधित मानक कुछ भी नहीं से बेहतर है। मानक होने के कुछ फायदों को देखने के लिए " https://softwareengineering.stackexchange.com/q/84203/53019 " में उत्तर देखें। संगति और परिवर्तन के लिए आधार होना आपकी दृष्टि से महत्वपूर्ण है।

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

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

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

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


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


6

मैं अजगर से शुरू करूँगा। पायथन के पास कोडिंग दिशानिर्देश हैं जो लगभग हर एक अजगर प्रोग्रामर का अनुसरण करता है। वे PEP8 नामक आधिकारिक दस्तावेज का हिस्सा हैं ।

C / C ++ ऐतिहासिक कारणों से बहुत बड़ी गड़बड़ी है, लेकिन चूंकि अजगर नहीं है, तो मैं आपको सलाह दूंगा कि आप निरंतरता के लिए C / C ++ में अजगर नामकरण सम्मेलन का भी पालन करें।

अब C ++ के लिए आम मुहावरों पर सहमत होना वास्तव में अधिक महत्वपूर्ण है और सुनिश्चित करें कि नामकरण सम्मेलनों पर किसी भी युद्धों की तुलना में हर कोई उचित आधुनिक C ++ शैली को समझता है। आपको C ++ कोडिंग मानकों के साथ शुरू करना चाहिए और ऑनलाइन संसाधनों से C ++ FAQ पढ़ना सुनिश्चित करें ।


वास्तव में मुझे विश्वास है कि हम C, C ++ और Python में से प्रत्येक के लिए अलग-अलग नामकरण परंपराएँ रखेंगे - कम से कम, wrt चीजें जैसे कैपिटलाइज़ेशन, अंडरस्कोर आदि MyTypeNameका उपयोग यकीनन बेहतर C ++ से बेहतर है my_type_name_t, और इसके विपरीत C. के लिए जाता है। संदर्भ।
ईनपोकलम

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

@einpoklum: गैर-प्रकारों के लिए सभी C, C ++ मानक पुस्तकालय और पायथन "स्नेक_केस" का उपयोग करते हैं; कोई फर्क नहीं है। एकमात्र अंतर यह है कि क्या आप "मिश्रितकेस" का उपयोग करना चाहते हैं या "स्नेककेस" भी। C और C ++ पुस्तकालय "स्नेक_केस" का उपयोग करते हैं, लेकिन अन्यथा "मिश्रितकेस" बहुत आम है।
जान हुदेक

@einpoklum C ++ के लिए मानक लाइब्रेरी द्वारा निर्धारित मानक का उपयोग करें।
माइल्स रुट

3

आप इस विषय पर एक कोडिंग मानक और एक कोडिंग शैली मानक के बीच अंतर किए बिना भी चर्चा नहीं कर सकते ।

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

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

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

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

CERT के मानक भी काफी हद तक प्रसिद्ध हैं और डेस्कटॉप प्रोग्रामिंग और सॉफ्टवेयर सुरक्षा (सुरक्षा के बजाय) के प्रति अधिक पक्षपाती हैं। CERT में C, C ++, Java और पर्ल के लिए मानक हैं, और मानक नि: शुल्क हैं।

मैं वेब पर पाए जाने वाले कुछ यादृच्छिक गेराज मानक के बजाय MISRA और CERT को देखकर शुरू करूंगा।


1
मैंने MISRA के बारे में पहले कभी नहीं सुना है, और मैं नहीं देखता कि इसके घटक अत्यधिक महत्वपूर्ण खिलाड़ी हैं। क्या आप उनकी प्रतिष्ठा बता सकते हैं? सीईआरटी दस्तावेजों के लिए, क्या आप स्पष्ट कर सकते हैं कि ये विशेष रूप से सुरक्षित कार्यक्रमों के लिए मानक हैं, या अधिक सामान्य मानक हैं?
ईनपोकलम

@einpoklum के साथ शुरू करने के लिए, MISRA-C का उपयोग दुनिया की प्रत्येक कार निर्माता द्वारा किया जाता है। यह पूरे एम्बेडेड सिस्टम उद्योग में सी प्रोग्रामिंग के लिए एक "डी फैक्टो" मानक बन रहा है, जहां यह सबसे अच्छी तरह से जाना जाता है। फिर भी, MISRA दस्तावेज़ में वास्तव में कुछ भी नहीं है जो इसे सी कार्यक्रम के किसी भी रूप में उपयोग करने से रोकता है। MISRA और CERT दोनों काफी सामान्य हैं, वे अंततः एक कार्यक्रम में बग, खराब अभ्यास और कमजोरियों की संख्या को कम करने का लक्ष्य रखते हैं। ये मानक स्थैतिक कोड विश्लेषण को भी प्रोत्साहित करते हैं।

1

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

यदि आप सुनिश्चित नहीं हैं कि कौन से कोडिंग मानकों का उपयोग करना है, तो कुछ स्पष्ट आदर्श पहली पसंद हैं। किसी विशेष क्रम में नहीं:
1. जो भी मानक पहले से ही आपके आईडीई द्वारा समर्थित है। यह शायद विन्यास योग्य है।
2. जो भी मानक आपके संकलक के लेखक द्वारा उपयोग / अनुशंसित है।
3. जो भी मानक आपके प्राथमिक ढांचे के लेखक द्वारा उपयोग किया जाता है / अनुशंसित होता है (यदि कोई मौजूद है)।
4. जो भी मानक आपकी प्रोग्रामिंग भाषा के लेखक (ओं) / डिजाइनर (ओं) द्वारा उपयोग / अनुशंसित है।
5. जिसका मानक किसी बहुत बड़ी कंपनी द्वारा उपयोग / अनुशंसित हो।

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


0

एक मानक आमतौर पर संचार और रखरखाव में मदद करता है। मेरी राय में, यह कुछ देने और लेने के अधीन होना चाहिए, विशेष रूप से छोटी टीमों में, और विकसित होना चाहिए। उन्हें दिशानिर्देशों को कॉल करने से :-) मदद मिल सकती है

प्रेरणा के लिए Google दिशानिर्देशों पर एक नज़र डालें ।


5
यह बहुत व्यक्तिपरक है जो सी / सी ++ के लिए चुनने के दिशानिर्देशों को कोड करता है। और अगर कोई ऐसा है जिसे मैं नहीं चुनूंगा, तो वह Google का है। वे कई चीजों को प्रतिबंधित करते हैं जिन्हें आमतौर पर दूसरों द्वारा बढ़ावा देने जैसी अच्छी आधुनिक सी ++ शैली माना जाता है।
Jan Hudec

1
बाहरी मानक का उपयोग करने के बारे में ओपी की चिंताओं को आपका जवाब कैसे बताता है? कोडिंग मानकों के लिए एक नाम परिवर्तन का सुझाव देना उन मुख्य मुद्दों की मदद नहीं करता है जिन्हें उन्हें संबोधित करने की आवश्यकता होगी।

1
@ जानहुदेक मैं सहमत हूँ। जिन चीजों के लिए यह निषिद्ध है उनमें से एक अपवाद का उपयोग है।
B47овиЈ

-3

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

मानक केवल आसान सहयोग को प्रोत्साहित करने के लिए हैं, इसलिए यदि आप जानते हैं कि एक #define मैक्रो हमेशा अपरकेस में है, तो जब आप कोड में एक अपरकेस पहचानकर्ता देखते हैं, तो आपको एक उचित विचार होगा कि यह एक मैक्रो है। इसी तरह, अन्य नामकरण परंपराएं या शैली सम्मेलन आपको याद दिलाएंगे कि आप किसके साथ काम कर रहे हैं।

मुझे लगता है कि फ़ाइल स्थान और नाम जैसे मानक अधिक उपयोगी हैं 1 कोड वाले (आखिरकार, कोड सभी आकारों और आकारों में आता है, और आपको अभी भी इसे पढ़ना है) जबकि readme.txt को नहीं जानना / बिन / डॉक / डिबग में है / रिलीज / दस्तावेज एक वास्तविक दर्द है (जैसा कि एक भद्दा रास्ता है, लेकिन यह एक और कहानी है)।

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

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

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