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