क्या एक विकास टीम में विभिन्न कोडिंग शैलियों का समर्थन करने का एक तरीका है


13

द प्रॉब्लम: दो डेवलपर्स => इंडिकेशन पर तीन राय, नई लाइन पर ब्रेसिज़ या नहीं आदि।

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

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


1
अधिकांश भाषाओं के लिए स्वचालित कोड स्वरूप उपलब्ध हैं, लेकिन कुछ (उदाहरण के लिए C ++) वे भाषा को पार्स करने की जटिलताओं के कारण पूरी तरह से विश्वसनीय बनाना बेहद कठिन है।
जॉरिस टिम्मरमन्स

5
वास्तव में एक बुरा विचार है। अपनी टीम से कहें कि एक सहमति मानक के साथ आएं, फिर उन्हें लागू करें। अगर कुछ शराब, उन्हें थोड़ा बड़ा होने के लिए कहें।
क्लेमेंट हेर्रमैन

8
हो सकता है कि अन्य अत्यंत सामान्य टिप्पणी यहां दी जानी चाहिए: क्या कोड शैलियों में अंतर के साथ एक वास्तविक समस्या है? कुछ है कि टूट नहीं है ठीक नहीं है!
जॉरिस टिम्मरमन्स

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

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

जवाबों:


20

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

यह कुछ ऐसा है जो लगभग हर टीम के चेहरे और मानक इस कारण से "मजबूर" हैं। मेरा सुझाव है कि आप बेसलाइन के रूप में भाषा अधिकारियों के मानकों का पालन करें और उन्हें अपनी टीम के अनुरूप अपनाएं।

एक सुसंगत कोडिंग शैली होने से परियोजना की स्थिरता में भी मदद मिलेगी और कोड पर काम करने वाले नए लोगों के लिए प्रवेश में बाधा को कम किया जा सकेगा।


11

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


2
+1। उन्हें एक चुनने दें, लेकिन उन्हें इसे लागू करें।
क्लेमेंट हेर्रमैन

मैं चाहता था कि प्रारूपण एक प्रोग्रामिंग भाषा के मानक का हिस्सा था, जैसे कि कार्यक्रम केवल "वैध" या "वैध नहीं" हैं, लेकिन एक तीसरी स्थिति भी है, "मान्य और अच्छी तरह से स्वरूपित"।
जेसपेरे

4
यह (कमोबेश) अजगर में मामला है, जहां इंडेंटेशन एक भाषा अर्थ है।
क्लेमेंट हेर्रमैन

2
गो ऐसी सख्ती से लागू नहीं कर रहा है, लेकिन एक अंतर्निहित स्रोत कोड फॉर्मेटर के साथ आता है go fmt। देखें golangtutorials.blogspot.fr/2011/06/…
क्लेमेंट हेरमैन

1
@JesperE यही है साथ अजगर में लागू PEP8 और इसी उपकरण, inventively नामित pep8
फ़िहाग

8

हाँ, यह तब तक काम कर सकता है जब तक कि शैलियों को सभी समझदार होते हैं और लोग अपनी पसंद और / या एकल कोड फ़ाइल में शैलियों को मिलाने के लिए अन्य लोगों के कोड को बदलने के आसपास नहीं जाते हैं।
यह आदर्श नहीं है, लेकिन यह पुराने कोड को अपने से अलग "मानक" के लिए बनाए गए पुराने कोड से अलग नहीं है और इसे आपके कोडबेस के साथ एकीकृत करना है।
इसलिए यदि आपको यह करना है, तो कुछ दिशानिर्देश:

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

2
मुझे लगता है कि पेशेवर डेवलपर्स अक्सर एक दूसरे की शैलियों को वैसे भी मर्ज करते हैं। वे कुछ बिंदुओं पर कम अनौपचारिक चर्चा करेंगे और एक समझौते पर आएंगे।
जॉरिस टिम्मरमन्स

महान काम करता है, इस चेतावनी के साथ कि स्वचालित कोड सुधार के उपयोग को कम से कम रखा जाना चाहिए (यदि एकमुश्त प्रतिबंध नहीं है)।
ग्रैमपार्क

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

मुझे लगता है कि यह जवाब वास्तव में सवाल का "स्वचालित स्वरूपण" भाग हो सकता है?
जॉरिस टिम्मरमन्स

फ़ाइलों के बीच शैलियों की एक किस्म सिर्फ एक सुसंगत शैली होने से निपटने के लिए बहुत कठिन है।
एंडी

4

संक्षिप्त जवाब नहीं है।

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

मानकों के दस्तावेज़ का लक्ष्य सामान्य कोडिंग मानकों / सम्मेलनों के एक सेट को लागू / सुझाव देना चाहिए जो पते देता है

  1. टैबिंग, इंडेंटेशन, {, (, का उपयोग) जैसे लेआउट आइटम
  2. वैरिएबल, ऑब्जेक्ट और फंक्शन नाम यानी कैमलकेस, हंगेरियन नोटेशन
  3. अपवाद हैंडलिंग कैसे / कब / कहाँ प्रदर्शन किया जाना है
  4. कोड टिप्पणियाँ। क्या आप हमेशा एक डिज़ाइन डॉक, एक बग नंबर आदि का संदर्भ देते हैं

मानकों के दस्तावेज़ यह सुनिश्चित करने में मदद करते हैं कि कोड अपने सम्मेलनों में पढ़ना, रखरखाव और सुसंगत होना आसान है।

चेकव्यू से पहले कोड की समीक्षा करते समय, अमूल्य कोड को डीबग करना या मूल डेवलपर के कंपनी छोड़ने के कई साल बाद कोड को संशोधित करना यह अमूल्य है।

आमतौर पर कोडिंग मानक दस्तावेज़ बनाते समय मैं जिस भाषा (सी, सी #, एसक्यूएल) का उपयोग कर रहा हूं, उसके लिए उद्योग मानकों की समीक्षा करता हूं, सबसे उपयुक्त मानकों का उपयोग करता हूं, टिप्पणी के लिए सबसे वरिष्ठ / प्रभावशाली डेवलपर्स को प्रसारित करता हूं, उन टिप्पणियों को शामिल करता हूं जहां उपयुक्त और फिर दस्तावेज़ जारी करें।


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

4

सिद्धांत रूप में आपके संस्करण नियंत्रण प्रणाली के लिए प्रतिबद्ध होने से पहले स्वचालित रूप से सुधार कोड।

हालांकि , एक बड़ी समस्या है: स्वचालित कोड स्वरूपण उपकरण 100% विश्वसनीय नहीं हैं। इस प्रकार, आप वास्तव में इस प्रणाली के साथ अपने कोड में समस्याएं पेश कर सकते हैं। मेरे दिमाग में, यह विचार मारता है। हमेशा ठीक से स्टाइल कोड की तुलना में कार्यात्मक कोड होना अधिक महत्वपूर्ण है!

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

यहां स्टैक ओवरफ्लो पर इसी तरह की चर्चा है


2
लिंक की गई चर्चा पर स्वीकृत उत्तर पर भी ध्यान दें!
जॉरिस टिम्मरमन्स

1

एक-तरफ़ा स्वचालित रूप से पुन: स्वरूपित करने वाला कोड यदि आप एक कारगर उपाय हो सकता है:

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

उनमें से कोई भी वास्तव में कई मामलों में करना आसान नहीं है, इसलिए यहां अपनी लड़ाई को चुनने पर विचार करें! मैंने देखा है कि टीमें C # /। NET परियोजना के लिए सफलतापूर्वक ऐसा करती हैं, जहां सुधारक पहले से ही डेवलपर के पीसी पर हुआ है, इसलिए यह कुछ परिस्थितियों में संभव है।


1

बिलकुल आप कर सकते हैं। यह सब के बारे में छोटे सामान पसीना नहीं है।

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

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

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

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