संक्षेप में: यह निर्भर करता है
विवरण में
क्या आपको साफ, चमकदार सामान की आवश्यकता है?
यहाँ के बारे में सतर्क रहने वाली चीजें हैं, और आपको वास्तविक, औसत दर्जे का लाभ और क्या आपकी व्यक्तिगत पसंद और कोड को छूने की संभावित बुरी आदत है, के बीच की सीमा को पहचानने की आवश्यकता है।
अधिक विशेष रूप से, यह जानते हैं:
यह एक विरोधी पैटर्न है, और यह अंतर्निहित मुद्दों के साथ आता है:
- यह अधिक एक्सटेंसिबल हो सकता है , लेकिन इसका विस्तार करना आसान नहीं हो सकता है ,
- यह समझना आसान नहीं हो सकता है ,
- अंतिम, लेकिन निश्चित रूप से कम से कम यहां नहीं: आप पूरे कोड को धीमा कर सकते हैं।
कुछ भी उल्लेख कर KISS सिद्धांत एक संदर्भ के रूप, लेकिन यहाँ यह जवाबी सहज है: अनुकूलित रास्ता आसान तरीका या cleany architectured तरीका है? उत्तर आवश्यक नहीं है, जैसा कि नीचे दिए गए बाकी हिस्सों में बताया गया है।
YAGNI सिद्धांत अन्य मुद्दे के साथ पूरी तरह से orthogonal नहीं है, लेकिन यह अपने आप को सवाल पूछने के लिए मदद करता है: आप इसे जरूरत के लिए जा रहे हैं?
क्या अधिक जटिल वास्तुकला वास्तव में आपके लिए एक लाभ प्रस्तुत करता है, इसके अलावा अधिक बनाए रखने की उपस्थिति देने के अलावा?
इसे एक बड़े पोस्टर पर लिखें और इसे अपनी स्क्रीन के बगल में या रसोई के काम के स्थान पर या देव बैठक कक्ष में लटका दें। बेशक कई अन्य मंत्र हैं जो खुद को दोहराने के लायक हैं, लेकिन यह विशेष रूप से महत्वपूर्ण है जब भी आप "रखरखाव कार्य" करने की कोशिश करते हैं और इसे "सुधार" करने का आग्रह करते हैं।
यह स्वाभाविक है कि हम "कोड" को सुधारना चाहते हैं या यहाँ तक कि इसे अनजाने में भी स्पर्श कर सकते हैं, जैसा कि हम इसे पढ़ने की कोशिश करते हैं। यह एक अच्छी बात है, क्योंकि इसका मतलब है कि हम राय रखते हैं और आंतरिक लोगों की गहरी समझ प्राप्त करने की कोशिश करते हैं, लेकिन यह हमारे कौशल-स्तर, हमारे ज्ञान (आप कैसे तय करते हैं कि क्या बेहतर है या नहीं?) के लिए बाध्य है, नीचे दिए गए अनुभाग देखें। ...), और हम जो कुछ भी सोचते हैं, उसके बारे में हम सोचते हैं कि हम सॉफ्टवेयर जानते हैं ...:
- वास्तव में करता है,
- वास्तव में करने की जरूरत है,
- अंततः करने की आवश्यकता होगी,
- और यह कितनी अच्छी तरह से करता है।
क्या वास्तव में इसे अनुकूलित करने की आवश्यकता है?
यह सब कहा, यह पहली जगह में "अनुकूलित" क्यों था? वे कहते हैं कि समय से पहले अनुकूलन सभी बुराई की जड़ है, और यदि आप अवांछित और प्रतीत होता है अनुकूलित कोड देखते हैं, तो आमतौर पर आप यह मान सकते हैं कि शायद अनुकूलन के नियमों का पालन नहीं किया गया था, अनुकूलन के प्रयास की आवश्यकता नहीं थी और यह सिर्फ यह था सामान्य विकासकर्ता की हैरिस में लात मारना। अभी भी फिर से, शायद यह सिर्फ तुम्हारी बात हो रही है।
यदि यह करता है, तो यह किस सीमा के भीतर स्वीकार्य है? यदि इसकी आवश्यकता है, तो यह सीमा मौजूद है, और आपको चीजों को बेहतर बनाने के लिए जगह देता है, या इसे जाने देने का निर्णय लेने के लिए एक हार्ड-लाइन है।
इसके अलावा, अदृश्य विशेषताओं से सावधान रहें। संभावना है, इस कोड के आपके "एक्स्टेंसिबल" संस्करण से आप रनटाइम के साथ-साथ अधिक मेमोरी बढ़ाएंगे, और निष्पादन योग्य के लिए एक बड़ा स्थिर मेमोरी फुटप्रिंट भी प्रस्तुत करेंगे। चमकदार OO सुविधाएँ इस तरह की लागत के साथ आती हैं, और वे आपके कार्यक्रम और उस पर्यावरण पर बात कर सकते हैं जिस पर इसे चलना चाहिए।
नाप, नाप, नाप
जैसा कि Google के लोग अब कर रहे हैं, यह डेटा के बारे में है! यदि आप इसे डेटा के साथ वापस कर सकते हैं, तो यह आवश्यक है।
इस नहीं तो पुराने कहानी है कि हर $ 1 के विकास में खर्च के लिए यह के बाद किया जाएगा है कम से कम परीक्षण में $ 1 और कम से कम समर्थन में $ 1 (लेकिन वास्तव में, यह एक बहुत अधिक है)।
परिवर्तन कई चीजों को प्रभावित करता है:
- आपको एक नया निर्माण करने की आवश्यकता हो सकती है;
- आपको नई इकाई परीक्षण लिखना चाहिए (निश्चित रूप से अगर कोई नहीं था, और आपकी अधिक विस्तारणीय वास्तुकला संभवतः अधिक के लिए जगह छोड़ देती है, जैसा कि आपके पास बग्स के लिए अधिक सतह है);
- आपको नए प्रदर्शन परीक्षण लिखने चाहिए (यह सुनिश्चित करने के लिए कि यह भविष्य में स्थिर रहता है, और यह देखने के लिए कि अड़चन कहाँ हैं), और ये करने के लिए मुश्किल हैं ;
- आपको इसे प्रलेखित करने की आवश्यकता होगी (और अधिक विस्तृत विवरण के लिए अधिक जगह का मतलब है);
- आपको (या किसी और) को क्यूए में बड़े पैमाने पर फिर से परीक्षण करने की आवश्यकता होगी;
- कोड (लगभग) कभी बग-मुक्त नहीं है, और आपको इसका समर्थन करने की आवश्यकता होगी।
तो यह सिर्फ हार्डवेयर संसाधनों की खपत (निष्पादन गति या मेमोरी पदचिह्न) नहीं है जिसे आपको यहां मापने की आवश्यकता है, यह टीम संसाधनों की खपत भी है । दोनों को लक्ष्य के लक्ष्य को परिभाषित करने, मापने, हिसाब लगाने और विकास के आधार पर अनुकूलित करने की भविष्यवाणी करने की आवश्यकता है।
और आप प्रबंधक के लिए, इसका मतलब है कि इसे वर्तमान विकास योजना में फिट करना, इसलिए इसके बारे में संवाद करें और उग्र गाय-लड़के / पनडुब्बी / ब्लैक-ऑप्स कोडिंग में न पड़ें।
सामान्य रूप में...
हाँ लेकिन...
मुझे गलत मत समझिए, सामान्य तौर पर, मैं ऐसा करने के पक्ष में हूं कि आप सुझाव क्यों देते हैं, और मैं अक्सर इसकी वकालत करता हूं। लेकिन आपको दीर्घकालिक लागत के बारे में पता होना चाहिए।
एक आदर्श दुनिया में, यह सही समाधान है:
- कंप्यूटर हार्डवेयर समय के साथ बेहतर होते जाते हैं,
- कंपाइलर और रनटाइम प्लेटफॉर्म समय के साथ बेहतर हो जाते हैं,
- आपको क्लोज-टू-परफेक्ट, क्लीन, मेंटेनेंस और रीडेबल कोड मिलता है।
प्रयोग में:
आप इसे बदतर बना सकते हैं
आपको इसे देखने के लिए अधिक नेत्रगोलक की आवश्यकता है, और जितना अधिक आप इसे जटिल करते हैं, उतनी ही नेत्रगोलक की आपको आवश्यकता होती है।
आप भविष्य की भविष्यवाणी नहीं कर सकते
अगर आपको कभी इसकी आवश्यकता होगी तो आप पूरी निश्चयता के साथ नहीं जान सकते, भले ही आपको "एक्सटेंशन" की आवश्यकता न हो, पुराने रूप में लागू करने के लिए आपको आसान और तेज़ होना चाहिए, और यदि खुद को सुपर-अनुकूलित करने की आवश्यकता होगी ।
यह प्रबंधन के दृष्टिकोण से, प्रत्यक्ष लाभ के लिए एक बड़ी लागत का प्रतिनिधित्व करता है।
इसे प्रक्रिया का हिस्सा बनाएं
आप यहाँ उल्लेख करते हैं कि यह एक छोटा सा बदलाव है, और आपके मन में कुछ विशिष्ट मुद्दे हैं। मैं कहता हूं कि इस मामले में यह आमतौर पर ठीक है, लेकिन हम में से अधिकांश में छोटे बदलावों की व्यक्तिगत कहानियां भी हैं, लगभग सर्जिकल-स्ट्राइक संपादन, जो अंततः रखरखाव दुःस्वप्न और लगभग-चूक या विस्फोट की समय सीमा में बदल गए क्योंकि जो प्रोग्रामर ने एक नहीं देखा था कोड के पीछे के कारणों और कुछ को छुआ है जो नहीं होना चाहिए था।
यदि आपके पास इस तरह के निर्णय लेने की प्रक्रिया है, तो आप व्यक्तिगत रूप से उनसे किनारा कर लेते हैं:
- यदि आप चीजों को सही ढंग से परखते हैं, तो आप जल्दी जान जाएंगे कि क्या चीजें टूटी हुई हैं,
- यदि आप उन्हें मापते हैं, तो आपको पता चलेगा कि क्या वे सुधर गए हैं,
- यदि आप इसकी समीक्षा करते हैं, तो आपको पता चल जाएगा कि क्या यह लोगों को फेंकता है।
टेस्ट कवरेज, प्रोफाइलिंग और डेटा-कलेक्शन मुश्किल हैं
लेकिन, निश्चित रूप से, आपके परीक्षण कोड और मैट्रिक्स उन्हीं मुद्दों से पीड़ित हो सकते हैं जिन्हें आप अपने वास्तविक कोड से बचने की कोशिश कर रहे हैं: क्या आप सही चीजों का परीक्षण करते हैं, और क्या वे भविष्य के लिए सही चीज हैं, और क्या आप सही माप करते हैं बातें?
फिर भी, सामान्य तौर पर, आप जितना अधिक (एक निश्चित सीमा तक) परीक्षण करते हैं और मापते हैं, उतना अधिक डेटा जो आप एकत्र करते हैं और आप सुरक्षित हैं। खराब सादृश्य समय: इसके बारे में सोचें जैसे कि ड्राइविंग (या सामान्य रूप से जीवन): आप दुनिया के सबसे अच्छे ड्राइवर हो सकते हैं, अगर कार आप पर टूट जाती है या किसी ने अपनी कार से ड्राइविंग करके खुद को मारने का फैसला किया है, आज कौशल पर्याप्त नहीं हो सकता है। दोनों पर्यावरणीय चीजें हैं जो आपको मार सकती हैं, और मानवीय त्रुटियां भी मायने रखती हैं।
कोड समीक्षा विकास टीम के दालान परीक्षण हैं
और मुझे लगता है कि अंतिम भाग यहां महत्वपूर्ण है: कोड समीक्षा करें। यदि आप उन्हें एकल बनाते हैं तो आपको अपने सुधारों का मूल्य नहीं पता होगा। कोड समीक्षाएं हमारे "हॉलवे परीक्षण" हैं: बग्स का पता लगाने और ओवर-इंजीनियरिंग और अन्य विरोधी पैटर्न का पता लगाने के लिए, और यह सुनिश्चित करने के लिए कि कोड आपकी टीम की क्षमताओं के अनुरूप है, रेमंड के संस्करण का पालन करें । "सबसे अच्छा" कोड होने का कोई मतलब नहीं है अगर कोई और नहीं, लेकिन आप इसे समझ सकते हैं और इसे बनाए रख सकते हैं, और यह दोनों क्रिप्टिक अनुकूलन और 6-परतों के साथ गहरे वास्तुशिल्प डिजाइनों के लिए जाता है।
शब्दों को बंद करते समय, याद रखें:
हर कोई जानता है कि डिबगिंग पहले स्थान पर एक कार्यक्रम लिखने के रूप में दोगुना कठिन है। इसलिए यदि आप उतने ही चतुर हैं जितना आप लिखते समय हो सकते हैं, तो आप इसे कैसे डिबग करेंगे? - ब्रायन कर्निघन