अपडेट करें
जोर देने के लिए उद्धरण में मेरी प्रतिक्रिया:
यह मेरा विश्वास है कि उत्तर बताता है कि टिप्पणियों को कोडिंग मानकों में संबोधित नहीं किया जाना चाहिए और फिर इसे लड़ने के लिए रक्षात्मक प्रश्नों के एक सेट को सूचीबद्ध करता है, एकमात्र सही उत्तर है।
यहाँ मुद्दा यह है कि एक कोडिंग मानक सिर्फ एक मानक है । अत्यधिक व्यक्तिपरक विचार कोडिंग मानक में नहीं होने चाहिए । यह एक बेस्ट प्रैक्टिस गाइड में हो सकता है, लेकिन कोड रिव्यू के दौरान उस गाइड का इस्तेमाल किसी डेवलपर के खिलाफ नहीं किया जा सकता है। मेरी व्यक्तिगत राय में, एक कोडिंग मानक जितना संभव हो उतना स्वचालित के करीब होना चाहिए। कोड समीक्षा में नामकरण, रिक्ति, टैब, कोष्ठक, टिप्पणियाँ, आदि पर बहस करने में इतना समय बर्बाद होता है, जब यह सब स्वचालित हो सकता है। यहां तक कि उत्तर के बारे में और स्वचालित किया जा सकता है। LINT'ers शब्दकोशों के लिए अनुमति देते हैं, प्रति अवधारणा कैपिटलाइज़ेशन चेक (चर, फ़ंक्शन, विधि, कक्षा, आदि)।tables
chairs
यहां तक कि जावा अनुरोध चेक एक रोबोट LINT'er द्वारा लागू किया जा सकता है इससे पहले कि एक पुल अनुरोध स्वीकार कर लिया है। बहुत सारे ओपन सोर्स प्रोजेक्ट इस सटीक काम को करते हैं। आप अपना पुल अनुरोध प्रस्तुत करते हैं, कोड एक ट्रैविस-सीआई फ़ाइल के साथ बनाया गया है, जिसमें स्टेटिक विश्लेषण भी शामिल है, और इसे सभी कोडिंग मानकों को पारित करना होगा जो कि निष्पक्ष रूप से व्यक्त किए जा सकते हैं। 'गलत तरीके से करने' या टिप्पणी के साथ 'मूल्य प्रदान करने' या 'वैरिएबल, एट एल' नाम रखने का गलत तरीका नहीं है। उन चर्चाओं को कोई मूल्य नहीं मिलता है और तीसरे पक्ष के रोबोट के लिए सबसे अच्छा छोड़ दिया जाता है जो हमारे भावनात्मक कोडिंग का खामियाजा उठा सकता है।
वास्तव में इस सवाल का जवाब देने के लिए हमें एक मानक लिखना होगा जो निम्नलिखित प्रश्न का उत्तर देने के लिए एक मानक लिखता है : क्या यह टिप्पणी मूल्य प्रदान करती है? एक कोडिंग मानक संभवतः किसी टिप्पणी के 'मूल्य' को निर्धारित नहीं कर सकता है। इसके लिए मानव के लिए उस चेकलिस्ट से गुजरना आवश्यक हो जाता है। कोडिंग स्टैंडर्ड में टिप्पणियों का उल्लेख केवल एक चेकलिस्ट बनाता है जिससे मूल पोस्टर बचना चाहता है।
इसीलिए आमतौर पर टिप्पणियों को संकलक द्वारा संसाधित नहीं किया जाता है और बाहर निकाल दिया जाता है। उनका मूल्य निर्धारित नहीं किया जा सकता है। प्रश्न में टिप्पणी मूल्यवान है; हाँ या ना?। इस प्रश्न का उत्तर एनपी-कठिन है। केवल मनुष्य इसे ठीक से जवाब देने का मौका देते हैं, और तब भी इसका उत्तर केवल उस समय पढ़ा जा सकता है, जिस व्यक्ति द्वारा इसे पढ़ा जा रहा है; उस टिप्पणी का मूल्य मौसम, उसके या उसके गृह जीवन से प्रभावित होता है, पिछली बैठक में वे बस उपस्थित थे और अच्छी तरह से समाप्त नहीं हुए थे, दिन का समय, कॉफी की मात्रा। मुझे भरोसा है कि तस्वीर और अधिक स्पष्ट हो रही है।
इसे कभी भी किसी भी मानक में ठीक से कैसे व्यक्त किया जा सकता है? एक मानक तब तक उपयोगी नहीं होता जब तक इसे लगातार और निष्पक्ष रूप से लागू नहीं किया जा सकता है, जहां निष्पक्षता भावनात्मकता के बारे में अधिक है, भावनात्मक नहीं है।
मैं कहता हूं कि एक कोडिंग मानक जितना संभव हो उतना उद्देश्यपूर्ण रहना चाहिए। जिस तरह से वैरिएबल को आईएस उद्देश्य नाम दिया गया है। उन्हें आसानी से उचित वर्तनी, व्याकरणिक संरचना और आवरण के लिए एक शब्दकोश के खिलाफ जाँच की जा सकती है। इससे आगे कुछ भी "पिस्सिंग मैच" है जो व्यक्ति द्वारा सबसे अधिक शक्ति या "ब्रो बीटिंग" द्वारा जीता जाता है। कुछ मैं, व्यक्तिगत रूप से, नहीं करने के साथ संघर्ष।
जब मैं टिप्पणी करता हूं, तो मैं हमेशा तीसरे व्यक्ति में अपने भविष्य के बारे में बात करता हूं। अगर मैं 5 साल में इस कोड पर वापस आता हूं, तो मुझे क्या जानना होगा? क्या सहायक होगा, क्या भ्रामक होगा, और क्या कोड से पुराना होगा? एक खोज योग्य सार्वजनिक एपीआई और टिप्पणी कोड उत्पन्न करने के लिए दस्तावेज़ कोड के बीच एक अलग है जो एक अज्ञात तृतीय-पक्ष को मूल्य प्रदान करता है, भले ही वह तीसरा पक्ष स्वयं हो।
यहाँ एक अच्छा लिटमस टेस्ट है। यदि आप परियोजना पर केवल एक थे। तुम्हें पता था कि आप इस परियोजना पर केवल एक ही होंगे। आपके कोडिंग मानक में क्या होगा? आप चाहते हैं कि आपका कोड भविष्य में खुद को साफ, आत्म व्याख्यात्मक और समझने योग्य हो। क्या आपके पास अपने साथ एक कोड की समीक्षा होगी कि आपने हर पंक्ति पर टिप्पणी क्यों नहीं की? क्या आप अपने द्वारा जाँच की गई 100 फाइलों पर बनाई गई हर एक टिप्पणी की समीक्षा करेंगे? यदि नहीं, तो दूसरों को क्यों मजबूर करें?
मुझे लगता है कि इन चर्चाओं में कुछ छूट गया है, वह यह है कि Future You भी इस परियोजना के लिए एक डेवलपर है। मूल्य के बारे में पूछने पर, कल आप भी एक व्यक्ति हैं जो टिप्पणी से मूल्य प्राप्त कर सकते हैं। तो टीम का आकार, मेरी राय में कोई फर्क नहीं पड़ता। टीम का अनुभव मायने नहीं रखता है, यह अक्सर बदलता है।
टिप्पणी कोड की कोई भी मात्रा इस बात की समीक्षा नहीं करती है कि एक गति निर्माता को दुर्घटनाग्रस्त होने और एक मरीज को मारने से रोकें। एक बार जब आप किसी टिप्पणी के बारे में बात करते हैं जो कोड को प्रभावित करती है, तो आप अब उस कोड के बारे में बात कर रहे हैं जो टिप्पणी नहीं है। यदि यह सब लगता है कि किसी को मारने के लिए एक लापता टिप्पणी है, तो कुछ और है जो इस प्रक्रिया में बदबू आ रही है।
कोडिंग के इस प्रकार के कठोर तरीके का समाधान पहले से ही सॉफ्टवेयर लिखने के लिए एक कार्यप्रणाली के रूप में प्रदान किया गया है। और इसका टिप्पणियों से कोई लेना-देना नहीं है। टिप्पणियों के साथ समस्या यह है कि उत्पाद के अंत में काम करने के तरीके पर उनका कोई प्रभाव नहीं पड़ता है। दुनिया में सबसे अच्छी टिप्पणी एक गति निर्माता के भीतर एम्बेडेड होने से दुर्घटनाग्रस्त होने से सॉफ़्टवेयर नहीं रख सकती है। या जब पोर्टेबल ईकेजी के साथ विद्युत संकेतों को मापते हैं।
हमारे पास दो प्रकार की टिप्पणियां हैं:
मशीन पठनीय टिप्पणियाँ
टिप्पणी शैली जैसे कि Javadoc, JSDoc, Doxygen इत्यादि सभी सार्वजनिक इंटरफ़ेस पर टिप्पणी करने के तरीके हैं, जो कोड प्रदान करता है। वह इंटरफ़ेस केवल एकल अन्य डेवलपर (दो व्यक्ति टीम के लिए मालिकाना कोड), डेवलपर्स की एक अज्ञात संख्या (जैसे जेएमएस), या पूरे विभाग के लिए उपयोग किया जा सकता है। इस कोड को एक स्वचालित प्रक्रिया द्वारा पढ़ा जा सकता है जो फिर उन टिप्पणियों, अला HTML, पीडीएफ, और ऐसे पढ़ने का एक अलग तरीका पैदा करता है।
इस प्रकार की टिप्पणी के लिए एक मानक बनाना आसान है। यह प्रत्येक पबली-इनवोक-सक्षम पद्धति को सुनिश्चित करने का एक उद्देश्य प्रक्रिया बन जाता है, फ़ंक्शन, वर्ग में आवश्यक टिप्पणियां शामिल होती हैं। हेडर, पैरामीटर, विवरण एट। एल। यह सुनिश्चित करना है कि किसी अन्य टीम के लिए कोड ढूंढना और उसका उपयोग करना आसान है।
मैं कुछ ऐसा कर रहा हूं जो पागल लग रहा है, लेकिन यह वास्तव में नहीं है
ये टिप्पणियां अन्य लोगों के देखने में मदद करने के लिए यहां हैं क्यों इस कोड को एक निश्चित तरीके से लिखा गया था। शायद प्रोसेसर में एक संख्यात्मक त्रुटि है जो कोड चल रहा है और यह हमेशा गोल होता है, फिर भी डेवलपर्स आमतौर पर कोड के साथ सौदा करते हैं जो गोल होता है। इसलिए, हम यह सुनिश्चित करने के लिए टिप्पणी करते हैं कि कोड को छूने वाला एक डेवलपर समझता है कि वर्तमान संदर्भ कुछ ऐसा क्यों कर रहा है जो सामान्य रूप से अनुचित लगेगा , लेकिन वास्तव में इस तरह से उद्देश्य पर लिखा गया था।
इस प्रकार का कोड कई समस्याओं का कारण बनता है। यह आम तौर पर असहज हो जाता है और बाद में एक नए डेवलपर द्वारा पाया जाता है और 'निश्चित।' इस प्रकार सब कुछ तोड़ रहा है। फिर भी, टिप्पणियां केवल यह बताने के लिए होती हैं कि वास्तव में किसी चीज को टूटने से क्यों नहीं रोका जाए।
टिप्पणियाँ पर भरोसा नहीं किया जा सकता है
टिप्पणियाँ अंततः बेकार हैं और भरोसा नहीं किया जा सकता है। टिप्पणियाँ आम तौर पर प्रोग्राम चलाने के तरीके को नहीं बदलती हैं। और अगर वे करते हैं, तो आपकी प्रक्रिया में अधिक समस्याएं पैदा हो रही हैं, तो यह होना चाहिए। टिप्पणियाँ पर विचार कर रहे हैं और कभी भी कुछ भी हो सकता है। कोड वह सब है जो मायने रखता है जो कंप्यूटर द्वारा संसाधित किया जाता है।
यह असिन सुन सकता है, लेकिन मेरे साथ सहन कर सकता है। इन दो लाइनों में से कौन सा वास्तव में मायने रखता है?
// We don't divide by 0 in order to stop crashes.
return 1 / n;
इस उदाहरण में यह सब मायने रखता है कि हमें इस बात का कोई पता नहीं है कि 'n' क्या है, n 0 के लिए कोई चेक नहीं है और अगर वहाँ भी था, तो कुछ भी नहीं है। डेवलपर को n = 0
0. के लिए चेक डालने से रोकता है । इस प्रकार, टिप्पणी बेकार है और स्वचालित कुछ भी कभी भी इसे पकड़ सकता है। कोई भी मानक इसे पकड़ नहीं सकता है। टिप्पणी, जबकि सुंदर (कुछ को) उत्पाद के परिणाम पर कोई असर नहीं है।
परीक्षण संचालित विकास
उत्पाद पर क्या परिणाम होता है? जिन उद्योगों में कोड लिखा जा रहा है, वे शाब्दिक रूप से किसी को बचा सकते हैं या मार सकते हैं। यह कोड समीक्षा, कोड समीक्षा, परीक्षण, परीक्षण, कोड समीक्षा, इकाई परीक्षण, एकीकरण परीक्षण, परीक्षण, स्टेजिंग, परीक्षण के महीने, कोड समीक्षा, और एकल व्यक्ति परीक्षण, मंचन, कोड समीक्षा, परीक्षण, और फिर शायद अंत में किया जाता है। उत्पादन में जा रहा है। टिप्पणियों का इससे कोई लेना-देना नहीं है।
मैं कोड नहीं बल्कि कोई टिप्पणी करना चाहता था, एक विनिर्देशन था, इकाई परीक्षण किया था जो कल्पना की थी, उत्पादन उपकरण पर कोड चलाने के परिणामों का अध्ययन, फिर अच्छी तरह से प्रलेखित कोड जो कभी परीक्षण नहीं किया गया था, और न ही तुलना करने के लिए कुछ भी था। के खिलाफ कोड।
प्रलेखन अच्छा है जब आप यह पता लगाने की कोशिश कर रहे हैं कि किसी ने कुछ निश्चित तरीके से क्या किया है, हालांकि, मैंने उन वर्षों के माध्यम से पाया है कि प्रलेखन आमतौर पर यह समझाने के लिए उपयोग किया जाता है कि कुछ 'चतुर' क्यों किया गया था, जब इसे वास्तव में ज़रूरत नहीं थी इस तरह लिखा जाना।
निष्कर्ष
यदि आप एक ऐसी कंपनी में काम करते हैं, जिसमें हर लाइन की समीक्षा की जाती है, तो मुझे लगता है कि मैं कम से कम दो सॉफ्टवेयर इंजीनियरों के प्रोजेक्ट पर पहले से ही पर्ल, लिस्प या पायथन में एक ऑटो-डॉक्यूमेंट प्रोग्राम लिख चुका हूं, जो यह बताता है कि लाइन क्या कर रही है। , तो उस लाइन के ऊपर एक टिप्पणी जोड़ता है। क्योंकि ऐसा करना संभव है, इसका मतलब है कि टिप्पणियां बेकार हैं। उन इंजीनियरों को खोजें, जिन्होंने इन लिपियों को कोड का स्वचालित रूप से दस्तावेज़ करने के लिए लिखा है और उन्हें इस बात के प्रमाण के रूप में उपयोग करें कि 'हर पंक्ति पर टिप्पणी' समय बर्बाद क्यों कर रही है, कोई मूल्य नहीं प्रदान कर रही है, और संभावित रूप से चोट पहुँचा रही है।
एक तरफ, मैं एक प्रोग्रामिंग असाइनमेंट के साथ एक करीबी दोस्त की मदद कर रहा था। उनके शिक्षक ने एक आवश्यकता निर्धारित की थी कि हर पंक्ति को प्रलेखित किया जाना था। इसलिए मैं देख सकता हूं कि यह विचार प्रक्रिया कहां से आएगी। बस अपने आप से पूछें, आप क्या करने की कोशिश कर रहे हैं, और क्या यह सही बात है? फिर अपने आप से पूछो; क्या इस प्रक्रिया के साथ सिस्टम को 'गेम' करने का कोई तरीका है? अगर वहाँ है, तो क्या यह वास्तव में कोई मूल्य जोड़ रहा है? कोई भी स्वचालित रूप से इकाई परीक्षण नहीं लिख सकता है जो परीक्षण करता है कि कोड एक निश्चित विनिर्देश को पूरा करता है, और यदि वे संभवतः कर सकते हैं, तो यह एक बुरी बात नहीं होगी।
यदि किसी उपकरण को कुछ शर्तों के तहत काम करना पड़ता है क्योंकि यह एक मानव के अंदर होगा, तो यह सुनिश्चित करने का एकमात्र तरीका है कि यह उन्हें मारने नहीं जा रहा है परीक्षण के वर्षों, सहकर्मी की समीक्षा, परीक्षण, और फिर कभी भी कोड को फिर से बदलना नहीं है। यही कारण है कि नासा अभी भी ऐसे पुराने हार्डवेयर और सॉफ्टवेयर का उपयोग कर रहा है। जब यह जीवन या मृत्यु की बात आती है तो आप केवल 'थोड़ा बदलाव करें और इसे जांचें।'
टिप्पणियों का जीवन बचाने से कोई लेना-देना नहीं है। टिप्पणियाँ मनुष्यों के लिए होती हैं, मनुष्य टिप्पणी करते समय भी गलतियाँ करते हैं। मनुष्यों पर भरोसा मत करो। एर्गो, टिप्पणियों पर भरोसा न करें। टिप्पणियाँ आपके समाधान नहीं हैं।