चाचा बॉब का सुझाव है कि यदि आप इसे से बच सकते हैं तो कोडिंग मानकों को नीचे नहीं लिखा जाना चाहिए?
यदि आप उसकी राय के पीछे कारण पूछ रहे हैं, तो आपके पास केवल एक उत्तर हो सकता है यदि वह यहां एक उत्तर पोस्ट करेगा ( हमारी राय सिर्फ अप्रासंगिक है), हालांकि ...
मुझे एक कोडिंग मानक क्यों नहीं लिखना चाहिए?
यदि आप पूछ रहे हैं कि क्या वह इसके बारे में सही है: मुझे यह कहने के लिए केवल अलोकप्रिय एक (अभी तक) होने दें कि आपके पास इससे बचने का कोई कारण नहीं है।
राइट डाउनलोड करें । हालाँकि मैं अपने कारणों को समझाने की कोशिश करूँगा ...
डेविड ने एक टिप्पणी में सुझाव दिया कि स्टीफन के जवाब का मुख्य बिंदु यह नहीं है कि आपको दस्तावेज़ क्यों नहीं लिखना चाहिए लेकिन वे किस रूप में हैं। यदि दिशानिर्देशों को औजारों में औपचारिक रूप दिया जाता है (न कि केवल मैनुअल कोड समीक्षा) तो मैं सहमत हो सकता हूं (जब कानून को कुछ और की आवश्यकता नहीं होती है)। कृपया ध्यान दें कि दुर्भाग्य से उपकरण सब कुछ नहीं देख सकते हैं (गणना का सिद्धांत हमारा मित्र नहीं है) अक्सर क्योंकि वे एक विशिष्ट अनुवाद इकाई या पैकेज या आपकी पसंदीदा भाषा को सीमा कहते हैं ।
हालाँकि, अंकल बॉब के शब्दों से मुझे नहीं लगता कि वह उस बारे में बात कर रहे हैं।
क्या मैं ऐसे वरिष्ठ विशेषज्ञ से असहमत हो सकता हूं? मैं उद्धृत पोस्ट में लगभग हर बिंदु के लिए करता हूं (विवरण के लिए इस उत्तर का दूसरा भाग भी देखें)। आइए समझने की कोशिश करें कि क्यों (आप पहले से ही जानते हैं कि कोडिंग दिशानिर्देश केवल मामूली प्रारूपण मुद्दों के बारे में नहीं हैं )।
- कुछ परिस्थितियों में कानून द्वारा लिखित कोडिंग मानकों की आवश्यकता होती है।
- मैं दस्तावेज़ीकरण पढ़ता हूं और मुझे यकीन है कि मैं अकेला नहीं हूं। टीम के सदस्य समय के साथ बदल सकते हैं, ज्ञान 5-10 वर्ष पुराने कोडबेस या टीम के सदस्यों के दिमाग में नहीं हो सकता है। संगठनों को उन लोगों को आग लगाना चाहिए जो आंतरिक दिशानिर्देशों का पालन नहीं करते हैं।
- कोडिंग मानक, एक बार स्वीकृत हो जाने के बाद , अक्सर बदलते नहीं होंगे और यदि वे करते हैं तो आप इसके बारे में जानना चाहते हैं। यदि मानक बदल गए हैं तो आपका प्रलेखन (कोड में) पुराना है क्योंकि आपका सभी कोड नए मानक का पालन नहीं करता है। रिफॉर्मेटिंग / रिफैक्टरिंग धीमा हो सकता है लेकिन आपके पास हमेशा एक लिखित आधिकारिक दिशानिर्देश का पालन करना चाहिए।
- 5 पेज के दस्तावेज़ को पढ़ने से बेहतर है कि आप किसी नियम को लागू करने के लिए 10 / 20K LOC का निरीक्षण करें (जिसे आप गलत तरीके से समझ सकते हैं, BTW), इसके बारे में कोई संदेह नहीं है।
- यह विडंबना है कि कोई व्यक्ति जिसने डिजाइन सिद्धांतों और कोडिंग शैली के बारे में कई किताबें लिखी हैं, यह सुझाव दे रहा है कि आपको अपने स्वयं के दिशानिर्देश नहीं लिखना चाहिए, तब बेहतर नहीं है यदि वह हमें कुछ कोड उदाहरणों के साथ डंप करता है? नहीं, क्योंकि लिखित दिशानिर्देश न केवल आपको बताते हैं कि क्या करना है, बल्कि दो अन्य चीजें भी हैं जिनमें कोड की कमी है: क्या नहीं करना है और इसे करने के लिए कारण या नहीं।
"नि: शुल्क आत्म-आयोजन प्रोग्रामिंग" एक निंजा 16 वर्षीय व्यक्ति के लिए अच्छा है, लेकिन संगठनों के पास अन्य आवश्यकताएं हैं :
- कंपनी के स्तर पर कोड की गुणवत्ता (और परिभाषित) दी जानी चाहिए - यह ऐसा कुछ नहीं है जिसके बारे में कोई एकल टीम तय कर सकती है। उनके पास यह तय करने का कौशल भी नहीं हो सकता है कि बेहतर क्या है (उदाहरण के लिए कितने डेवलपर्स, MISRA की समीक्षा करने के लिए सभी आवश्यक कौशल हैं या यहां तक कि केवल प्रत्येक नियम को समझते हैं?)
- सदस्यों को अलग-अलग टीमों में ले जाया जा सकता है: यदि सभी समान कोडिंग मानकों का पालन करते हैं तो एकीकरण चिकनी और कम त्रुटि वाला है।
- यदि कोई टीम स्व-आयोजन कर रही है, तो समय के साथ मानक विकसित होंगे जब टीम के सदस्य बदलते हैं - आपके पास एक विशाल कोडबेस होगा जो वर्तमान स्वीकृत मानकों का पालन नहीं करता है ।
यदि आप प्रक्रिया से पहले लोगों के बारे में सोच रहे हैं तो मैं केवल टीपीएस के बारे में पढ़ने का सुझाव दे सकता हूं: मनुष्य लीन का एक केंद्रीय हिस्सा है लेकिन प्रक्रियाएं अत्यधिक औपचारिक हैं।
बेशक, केवल एक टीम के साथ एक छोटा संगठन टीम को मानकों को अपनाने का फैसला करने दे सकता है , लेकिन फिर इसे नीचे लिखा जाना चाहिए। यहां प्रोग्रामर पर। यदि आप एरिक लिपर्ट द्वारा पोस्ट पढ़ सकते हैं: मुझे लगता है कि हम सभी सहमत हैं कि वह एक अनुभवी डेवलपर हैं, जब उन्होंने माइक्रोसॉफ्ट के लिए काम किया था तो उन्हें अपने लिखित दिशानिर्देशों का पालन करना था (भले ही कुछ नियम गलत हो सकते हैं , लागू या बेकार नहीं। उसे।) जॉन स्कीट के बारे में क्या? Google दिशानिर्देश बहुत सख्त हैं (और कई लोग उनसे सहमत नहीं हैं) लेकिन उन्हें इस तरह के दिशानिर्देशों का पालन करना चाहिए। क्या यह उनके लिए अपमानजनक है? नहीं, उन्होंने शायद ऐसे दिशानिर्देशों को परिभाषित करने और सुधारने के लिए काम किया है, एक कंपनी एक सदस्य (या एक टीम) द्वारा नहीं बनाई गई है और प्रत्येक टीम एक द्वीप नहीं है ।
उदाहरण
- आपने C ++ में एकाधिक वंशानुक्रम और नेस्टेड कक्षाओं का उपयोग न करने का निर्णय लिया क्योंकि आप वास्तविक टीम के सदस्य इसे अच्छी तरह से नहीं समझते हैं । बाद में कोई व्यक्ति कई विरासत का उपयोग करना चाहता है, उसे देखने के लिए पूरे 1M LOC को अवश्य ब्राउज़ करना चाहिए। यह बुरा है क्योंकि अगर डिजाइन के फैसलों का दस्तावेजीकरण नहीं किया गया है तो आपको उन्हें समझने के लिए पूरे कोडबेस का अध्ययन करना होगा। और फिर भी, अगर इसका उपयोग नहीं किया गया है, तो क्या यह इसलिए है क्योंकि यह कोडिंग मानक के खिलाफ है, या इसकी अनुमति है, लेकिन वहाँ पहले से कोई भी ऐसी स्थिति नहीं थी जहां कई विरासत एक अच्छा फिट थीं?
- C # में आपके पास डिफ़ॉल्ट पैरामीटर प्रदान करने के लिए ओवरलोड तरीके थे क्योंकि आपका कोड आधार तब शुरू हुआ जब वैकल्पिक पैरामीटर C # में उपलब्ध नहीं थे। फिर आप बदल गए और आपने उन्हें उपयोग करना शुरू कर दिया (पुराने कोड को फिर से उपयोग करने के लिए जब भी आपको ऐसे कार्यों को संशोधित करना पड़ा)। बाद में भी आपने तय किया कि वैकल्पिक पैरामीटर खराब हैं और आप उनका उपयोग करने से बचना शुरू करते हैं। आपका कोड आपको क्या नियम बताता है? यह बुरा है क्योंकि मानक विकसित होता है, लेकिन कोडबेस को विकसित करने के लिए धीमी है और अगर यह आपके दस्तावेज है तो आप मुसीबत में हैं।
- जॉन टीम ए से टीम बी में चले गए। जॉन को एक नया मानक सीखना है; सीखने के दौरान वह संभवतः अधिक सूक्ष्म कीड़े (या, यदि भाग्यशाली होगा, तो मौजूदा कोड को समझने और कोड की समीक्षा को लंबा बनाने के लिए लंबा समय लेगा)।
- टीम ए पहले टीम बी के स्वामित्व वाले कोडबेस में जाती है। इसमें पूरी तरह से अलग कोडिंग मानक हैं। पुनर्लेखन? अनुकूलन? मिक्स? उनमें से सभी समान रूप से बुरे हैं।
चाचा बॉब
पहले कुछ पुनरावृत्तियों के दौरान उन्हें विकसित होने दें।
सच है, जब तक आपके पास एक मानक नहीं है और आपके संगठन ने आपको एक निर्माण करने का काम सौंपा है ।
उन्हें कंपनी विशिष्ट के बजाय टीम विशिष्ट होने दें।
नहीं, ऊपर वर्णित सभी कारणों के लिए। यहां तक कि अगर आप सिर्फ कोड फॉर्मेटिंग को औपचारिक रूप देना चाहते हैं (कम से कम उपयोगी चीज जिसे आप औपचारिक रूप देना चाहते हैं) तो भी मुझे फॉर्मेटिंग के बारे में अंतहीन (और बेकार) युद्धों की स्मृति है। मैं उन्हें बार-बार जीना नहीं चाहता, इसे सभी के लिए एक बार सेट करें।
यदि आप इससे बच सकते हैं तो उन्हें न लिखें। बल्कि, कोड को मानकों पर कब्जा करने का तरीका बताएं।
नहीं, ऊपर बताए गए सभी कारणों के लिए (निश्चित रूप से जब तक कि आप दिशा-निर्देश बदलने पर एक-शॉट में अपने सभी कोड को रिफैक्ट नहीं करेंगे)। क्या आप अपना कोड छोड़ना चाहते हैं? वर्तमान दिशानिर्देशों को समझने के लिए आप कोडबेस का निरीक्षण कैसे करते हैं ? फ़ाइल आयु के आधार पर खोज करना और अपनी कोडिंग शैली को स्रोत फ़ाइल उम्र के साथ जोड़ना?
अच्छा डिजाइन कानून मत करो। (उदाहरण के लिए लोगों को गोटो का उपयोग न करने के लिए कहें)
सच है, दिशानिर्देश कम होने चाहिए या कोई भी उन्हें नहीं पढ़ेगा। स्पष्ट दोहराएं नहीं।
सुनिश्चित करें कि सभी जानते हैं कि मानक संचार के बारे में है, और कुछ नहीं।
इतना ही नहीं, एक अच्छा मानक गुणवत्ता के बारे में है जब तक कि आप केवल मामूली विवरण के बारे में मानक नहीं रखना चाहते ।
पहले कुछ पुनरावृत्तियों के बाद, टीम को तय करने के लिए एकजुट हों।
पहला बिंदु देखें और यह मत भूलो कि एक कोडिंग मानक आमतौर पर एक ऐसी प्रक्रिया है जिसे विकसित होने और परिष्कृत होने में कई साल लग गए: कुछ पुनरावृत्तियों, शायद जूनियर डेवलपर्स के साथ? वास्तव में? क्या आप एक वरिष्ठ (यदि कोई है) सदस्य की स्मृति पर भरोसा करना चाहते हैं?
तीन नोट:
- मेरी राय में कमियां कुछ अन्य भाषाओं की तुलना में अधिक गंभीर हैं, उदाहरण के लिए C ++ में एक कंपनी स्तर का मानक जावा की तुलना में और भी अधिक आवश्यक है।
- यह तर्क पूरी तरह से लागू नहीं हो सकता है (और अंकल बॉब कारण कम चरम हो सकते हैं ) यदि आप एक बहुत छोटी कंपनी में काम कर रहे हैं जहां आपके पास सिर्फ एक छोटी टीम है।
- आपको काम पर रखा गया है (टीम के रूप में) और आप अकेले एक नए प्रोजेक्ट के साथ काम करेंगे तो आप इसे भूल जाएंगे और आगे बढ़ेंगे। इस मामले में आप परवाह नहीं कर सकते हैं (लेकिन आपके नियोक्ता को ...)