நாம் தூய உகப்பாக்கலின் (Pure Optimization) கலையை இழந்துவிட்டோமா?
ஆரம்பகால பொறியாளர்கள் மிகச்சிறிய வரம்புகளுக்குள் பணியாற்றினர். அப்பல்லோ வழிகாட்டி கணினிக்கு (Apollo Guidance Computer) வெறும் 2KB RAM மட்டுமே இருந்தது. ஒவ்வொரு பிட்டும் (bit) முக்கியமானது. ஒவ்வொரு CPU சுழற்சியும் (cycle) மிக அவசியமானது.
இன்று, நம்மிடம் பல ஜிகாபைட் (gigabytes) நினைவகம் உள்ளது. நாம் பெரும்பாலும் கூடுதல் வன்பொருள்களை (hardware) சேர்ப்பதன் மூலம் சிக்கல்களைத் தீர்க்கிறோம். குறியீடு (code) மெதுவாகவோ அல்லது அதிக சுமையுடனோ இருந்தால், நாம் கூடுதல் RAM-ஐச் சேர்க்கிறோம். இந்த பழக்கம் தூய உகப்பாக்கலின் திறனை நாம் இழக்கச் செய்கிறது.
கட்டுப்பாடுகளைப் (constraints) பற்றி சிந்திப்பதன் மூலம் நீங்கள் சிறந்த மென்பொருளை எழுத முடியும்.
Python-இல் ஒரு பெரிய உரை கோப்பை (text file) நீங்கள் எவ்வாறு கையாளுகிறீர்கள் என்று பாருங்கள்.
பொதுவான முறை: பல மேம்பாட்டாளர்கள் (developers) ஒரு முழு கோப்பையும் ஒரே நேரத்தில் நினைவகத்திற்குள் (memory) ஏற்றுகின்றனர்.
- நீங்கள்
f.readlines()பயன்படுத்துகிறீர்கள். - இது ஒவ்வொரு வரியையும் உங்கள் RAM-இல் உள்ள ஒரு பட்டியலுக்குள் (list) ஏற்றுகிறது.
- உங்கள் கோப்பு 10GB என்றால், உங்களுக்கு 10GB RAM தேவைப்படும்.
- இந்த அணுகுமுறை சிறிய சேவையகங்கள் (servers) அல்லது வரையறுக்கப்பட்ட சாதனங்களில் தோல்வியடையும்.
உகப்பாக்கப்பட்ட முறை: கோப்பை ஒவ்வொரு வரியாகச் செயலாக்கவும்.
- நீங்கள் கோப்பு பொருளின் (file object) மீது நேரடியாகச் சுழற்சி (iterate) செய்கிறீர்கள்.
- Python ஒரு வரியைப் படித்து, அதைச் செயலாக்கி, அடுத்த வரியைச் சென்றடைகிறது.
- உங்கள் நினைவகப் பயன்பாடு குறைவாகவும் நிலையானதாகவும் இருக்கும்.
- கோப்பு 1MB ஆக இருந்தாலும் அல்லது 100GB ஆக இருந்தாலும் இது முக்கியமல்ல.
இந்த வேறுபாடு பொறியியல் தத்துவத்தைப் (engineering philosophy) பற்றியது.
கூடுதல் வளங்களைச் சேர்ப்பது ஒரு தற்காலிகத் தீர்வு மட்டுமே. இது பலவீனமான மென்பொருளை உருவாக்குகிறது. உங்கள் வடிவமைப்பைத் தீர்மானிக்கக் கட்டுப்பாடுகளைப் பயன்படுத்துவது வலுவான மென்பொருளை உருவாக்குகிறது.
உகப்பாக்கம் (Optimization) என்பது வேகத்தைப் பற்றியது மட்டுமல்ல. அது உங்கள் வளங்களைக் கவனத்துடன் கையாளுவதைப் பற்றியது.
நீங்கள் குறியீடு எழுதும்போது, உங்களிடமே கேட்டுக்கொள்ளுங்கள்:
- இது எவ்வளவு நினைவகத்தைப் பயன்படுத்துகிறது?
- தரவு பத்து மடங்கு அதிகரித்தால் இது வேலை செய்யுமா?
- மோசமான குறியீட்டை மறைக்க நான் விலையுயர்ந்த வன்பொருளைச் சார்ந்திருக்கிறேனா?
சிறந்த மென்பொருள் ஒழுக்கத்திலிருந்து (discipline) உருவாகிறது.
ஆதாரம்: https://dev.to/prabashanadev/have-we-lost-the-art-of-pure-optimization-31b9