क्या हमने शुद्ध ऑप्टिमाइज़ेशन की कला खो दी है?
शुरुआती इंजीनियर बहुत ही सीमित सीमाओं के साथ काम करते थे। अपोलो गाइडेंस कंप्यूटर में केवल 2KB RAM थी। हर एक बिट मायने रखती थी। CPU का हर एक साइकिल महत्वपूर्ण था।
आज, हमारे पास गीगाबाइट्स (gigabytes) की मेमोरी है। हम अक्सर अधिक हार्डवेयर जोड़कर समस्याओं का समाधान करते हैं। यदि कोड धीमा या भारी है, तो हम अधिक RAM जोड़ देते हैं। यह आदत हमें शुद्ध ऑप्टिमाइज़ेशन के कौशल को खोने पर मजबूर कर देती है।
आप सीमाओं (constraints) के बारे में सोचकर बेहतर सॉफ्टवेयर लिख सकते हैं।
देखिए कि आप Python में एक बड़ी टेक्स्ट फ़ाइल को कैसे प्रोसेस करते हैं।
सामान्य तरीका: कई डेवलपर्स एक बार में पूरी फ़ाइल को मेमोरी में पढ़ लेते हैं।
- आप
f.readlines()का उपयोग करते हैं। - यह आपकी RAM में एक लिस्ट में हर लाइन को लोड कर देता है।
- यदि आपकी फ़ाइल 10GB की है, तो आपको 10GB RAM की आवश्यकता होगी।
- यह तरीका छोटे सर्वर या सीमित उपकरणों पर विफल हो जाता है।
ऑप्टिमाइज़्ड तरीका: फ़ाइल को एक बार में एक लाइन करके प्रोसेस करें।
- आप सीधे फ़ाइल ऑब्जेक्ट पर इटरेट (iterate) करते हैं।
- Python एक लाइन पढ़ता है, उसे प्रोसेस करता है, और अगली लाइन पर बढ़ जाता है।
- आपका मेमोरी उपयोग कम और स्थिर रहता है।
- इससे कोई फर्क नहीं पड़ता कि फ़ाइल 1MB की है या 100GB की।
यह अंतर इंजीनियरिंग दर्शन (philosophy) का है।
अधिक संसाधन जोड़ना एक अस्थायी समाधान है। यह कमज़ोर (fragile) सॉफ्टवेयर बनाता है। अपने डिज़ाइन को दिशा देने के लिए सीमाओं (constraints) का उपयोग करना मज़बूत (robust) सॉफ्टवेयर बनाता है।
ऑप्टिमाइज़ेशन केवल गति के बारे में नहीं है। यह अपने संसाधनों के प्रति सचेत रहने के बारे में है।
जब आप कोड लिखें, तो खुद से पूछें:
- यह कितनी मेमोरी का उपयोग करता है?
- क्या यह तब भी काम करेगा यदि डेटा दस गुना बढ़ जाए?
- क्या मैं खराब कोड को छिपाने के लिए महंगे हार्डवेयर पर निर्भर हूँ?
बेहतर सॉफ्टवेयर अनुशासन से आता है।
स्रोत: https://dev.to/prabashanadev/have-we-lost-the-art-of-pure-optimization-31b9