मैंने अक्सर देखा है कि यह उद्धरण स्पष्ट रूप से खराब कोड या कोड को सही ठहराने के लिए उपयोग किया जाता है, जबकि इसके प्रदर्शन को मापा नहीं गया है, शायद कोड के आकार में वृद्धि या इसकी पठनीयता से समझौता किए बिना, इसे काफी आसानी से तेज किया जा सकता है।
सामान्य तौर पर, मुझे लगता है कि शुरुआती सूक्ष्म अनुकूलन एक बुरा विचार हो सकता है। हालांकि, मैक्रो-ऑप्टिमाइज़ेशन (ओ (एन ^ 2) के बजाय ओ (लॉग एन) एल्गोरिदम चुनने जैसी चीजें अक्सर सार्थक होती हैं और उन्हें जल्दी किया जाना चाहिए, क्योंकि यह ओ (एन ^ 2) एल्गोरिदम लिखने के लिए बेकार हो सकता है) फिर इसे O (लॉग एन) दृष्टिकोण के पक्ष में पूरी तरह से फेंक दें।
ध्यान दें कि शब्द हो सकते हैं : यदि O (N ^ 2) एल्गोरिथ्म सरल और लिखने में आसान है, तो आप इसे बहुत अपराधबोध के बिना बाद में फेंक सकते हैं यदि यह बहुत धीमा हो जाता है। लेकिन अगर दोनों एल्गोरिदम समान रूप से जटिल हैं, या यदि अपेक्षित वर्कलोड इतना बड़ा है कि आप पहले से ही जानते हैं कि आपको तेजी से एक की आवश्यकता होगी, तो प्रारंभिक अनुकूलन एक ध्वनि इंजीनियरिंग निर्णय है जो लंबे समय में आपके कुल कार्यभार को कम करेगा।
इस प्रकार, सामान्य तौर पर, मुझे लगता है कि सही दृष्टिकोण यह पता लगाना है कि कोड लिखने से पहले आपके विकल्प क्या हैं, और होशपूर्वक अपनी स्थिति के लिए सबसे अच्छा एल्गोरिथ्म चुनें। सबसे महत्वपूर्ण बात, "समयपूर्व अनुकूलन सभी बुराई की जड़ है" अज्ञानता का कोई बहाना नहीं है। कैरियर डेवलपर्स को एक सामान्य विचार होना चाहिए कि आम परिचालन लागत कितनी है; उन्हें पता होना चाहिए, उदाहरण के लिए,
- कि तार संख्या से अधिक लागत
- गतिशील भाषाओं की तुलना में गतिशील भाषाएं बहुत धीमी हैं
- लिंक्ड सूची में सरणी / वेक्टर सूचियों के फायदे, और इसके विपरीत
- कब हैशटेबल का उपयोग करना है, कब सॉर्ट मैप का उपयोग करना है, और कब ढेर का उपयोग करना है
- वह (यदि वे मोबाइल उपकरणों के साथ काम करते हैं) "डबल" और "इंट" का डेस्कटॉप पर समान प्रदर्शन होता है (एफपी और भी तेज हो सकता है) लेकिन "डबल" एफपीयू के बिना कम अंत वाले मोबाइल उपकरणों पर सौ गुना धीमा हो सकता है;
- इंटरनेट पर डेटा स्थानांतरित करना HDD की तुलना में धीमा है, HDD रैम की तुलना में बहुत धीमा है, RAM L1 कैश और रजिस्टरों की तुलना में बहुत धीमा है, और इंटरनेट संचालन अनिश्चित काल तक अवरुद्ध हो सकता है (और किसी भी समय विफल हो सकता है)।
और डेवलपर्स को डेटा संरचनाओं और एल्गोरिदम के टूलबॉक्स से परिचित होना चाहिए ताकि वे आसानी से नौकरी के लिए सही उपकरण का उपयोग कर सकें।
बहुत ज्ञान और एक व्यक्तिगत टूलबॉक्स होने से आप लगभग आसानी से अनुकूलन कर सकते हैं। एक अनुकूलन में बहुत प्रयास करना जो अनावश्यक हो सकता है वह बुराई है (और मैं एक बार से अधिक उस जाल में गिरने का स्वीकार करता हूं)। लेकिन जब अनुकूलन किसी सरणी के बजाय सेट / हैशटेबल को चुनना या स्ट्रिंग [] के बजाय डबल [] में संख्याओं की एक सूची को संग्रहीत करना जितना आसान है , तो क्यों नहीं? मैं यहां नथ से असहमत हो सकता हूं, मुझे यकीन नहीं है, लेकिन मुझे लगता है कि वह निम्न-स्तर के अनुकूलन के बारे में बात कर रहा था, जबकि मैं उच्च-स्तरीय अनुकूलन के बारे में बात कर रहा हूं।
याद रखें, वह बोली मूल रूप से 1974 की है। 1974 में कंप्यूटर धीमे थे और कंप्यूटिंग शक्ति महंगी थी, जिससे कुछ डेवलपर्स को लाइन-बाय-लाइन को अपनाने की प्रवृत्ति मिली। मुझे लगता है कि यही नथ के खिलाफ जोर दे रहा था। वह यह नहीं कह रहा था कि "प्रदर्शन के बारे में बिल्कुल भी चिंता न करें", क्योंकि 1974 में यह सिर्फ पागल बात होगी। नुथ समझा रहा था कि कैसे अनुकूलन किया जाए; संक्षेप में, किसी को केवल अड़चनों पर ध्यान देना चाहिए, और इससे पहले कि आप अड़चनों को खोजने के लिए माप प्रदर्शन करें।
ध्यान दें कि आप बाधाओं नहीं मिल सकता है जब तक आप को मापने के लिए, जिसका अर्थ है कि कुछ प्रदर्शन निर्णय एक कार्यक्रम में लिखा है चाहिए कुछ भी करने से पहले को मापने के लिए मौजूद है बनाया जा। कभी-कभी गलत होने पर इन फैसलों को बदलना मुश्किल होता है। इस कारण से, यह एक सामान्य विचार है कि किन चीजों की लागत सामान्य है ताकि आप कोई उचित डेटा उपलब्ध न होने पर उचित निर्णय ले सकें।
अनुकूलन करने के लिए कितना जल्दी, और प्रदर्शन के बारे में चिंता करना कितना काम पर निर्भर करता है। जब आप केवल कुछ ही बार चलेंगे, तो स्क्रिप्ट लिखना, प्रदर्शन के बारे में चिंता करना आमतौर पर समय की पूरी बर्बादी है। लेकिन अगर आप Microsoft या Oracle के लिए काम करते हैं और आप एक पुस्तकालय पर काम कर रहे हैं, जो हजारों अन्य डेवलपर्स हजारों अलग-अलग तरीकों से उपयोग करने जा रहे हैं, तो यह इसके लिए नरक को अनुकूलित करने का भुगतान कर सकता है, ताकि आप सभी विविध को कवर कर सकें मामलों का कुशलता से उपयोग करें। फिर भी, प्रदर्शन की आवश्यकता को हमेशा पठनीयता, स्थिरता, लालित्य, विस्तार, और इसी तरह की आवश्यकता के खिलाफ संतुलित होना चाहिए।