ನಾವು ಶುದ್ಧ ಆಪ್ಟಿಮೈಸೇಶನ್ ಕಲೆಯನ್ನ ಕಳೆದುಕೊಂಡಿದ್ದೇವೆಯೇ?
ಆರಂಭಿಕ ಇಂಜಿನಿಯರ್ಗಳು ಅತ್ಯಲ್ಪ ಮಿತಿಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುತ್ತಿದ್ದರು. ಅಪೊಲೊ ಗೈಡೆನ್ಸ್ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ಕೇವಲ 2KB RAM ಇತ್ತು. ಪ್ರತಿಯೊಂದು ಬಿಟ್ ಕೂಡ ಮುಖ್ಯವಾಗಿತ್ತು. ಪ್ರತಿಯೊಂದು CPU ಸೈಕಲ್ ಕೂಡ ಅತ್ಯಗತ್ಯವಾಗಿತ್ತು.
ಇಂದು, ನಮ್ಮ ಬಳಿ ಗಿಗಾಬೈಟ್ಗಳಷ್ಟು ಮೆಮೊರಿ ಇದೆ. ನಾವು ಹೆಚ್ಚಾಗಿ ಹೆಚ್ಚಿನ ಹಾರ್ಡ್ವೇರ್ ಅನ್ನು ಸೇರಿಸುವ ಮೂಲಕ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸುತ್ತೇವೆ. ಕೋಡ್ ನಿಧಾನವಾಗಿದ್ದರೆ ಅಥವಾ ಭಾರವಾಗಿದ್ದರೆ, ನಾವು ಹೆಚ್ಚಿನ RAM ಅನ್ನು ಸೇರಿಸುತ್ತೇವೆ. ಈ ಅಭ್ಯಾಸವು ನಮ್ಮಲ್ಲಿರುವ ಶುದ್ಧ ಆಪ್ಟಿಮೈಸೇಶನ್ ಕೌಶಲ್ಯವನ್ನು ಕಳೆದುಕೊಳ್ಳುವಂತೆ ಮಾಡುತ್ತದೆ.
ಮಿತಿಗಳ (constraints) ಬಗ್ಗೆ ಯೋಚಿಸುವ ಮೂಲಕ ನೀವು ಉತ್ತಮ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು ಬರೆಯಬಹುದು.
Python ನಲ್ಲಿ ನೀವು ದೊಡ್ಡ ಪಠ್ಯ ಫೈಲ್ ಅನ್ನು ಹೇಗೆ ಪ್ರೊಸೆಸ್ ಮಾಡುತ್ತೀರಿ ಎಂಬುದನ್ನು ಗಮನಿಸಿ.
ಸಾಮಾನ್ಯ ವಿಧಾನ: ಅನೇಕ ಡೆವಲಪರ್ಗಳು ಇಡೀ ಫೈಲ್ ಅನ್ನು ಒಂದೇ ಬಾರಿಗೆ ಮೆಮೊರಿಗೆ ಓದುತ್ತಾರೆ.
- ನೀವು
f.readlines()ಬಳಸುತ್ತೀರಿ. - ಇದು ಪ್ರತಿಯೊಂದು ಸಾಲನ್ನು ನಿಮ್ಮ RAM ನಲ್ಲಿರುವ ಒಂದು ಲಿಸ್ಟ್ಗೆ ಲೋಡ್ ಮಾಡುತ್ತದೆ.
- ನಿಮ್ಮ ಫೈಲ್ 10GB ಇದ್ದರೆ, ನಿಮಗೆ 10GB RAM ಬೇಕಾಗುತ್ತದೆ.
- ಈ ವಿಧಾನವು ಸಣ್ಣ ಸರ್ವರ್ಗಳಲ್ಲಿ ಅಥವಾ ಸೀಮಿತ ಸಾಧನಗಳಲ್ಲಿ ವಿಫಲವಾಗುತ್ತದೆ.
ಆಪ್ಟಿಮೈಸ್ ಮಾಡಿದ ವಿಧಾನ: ಫೈಲ್ ಅನ್ನು ಪ್ರತಿ ಬಾರಿಗೆ ಒಂದು ಸಾಲಿನಂತೆ ಪ್ರೊಸೆಸ್ ಮಾಡಿ.
- ನೀವು ಫೈಲ್ ಆಬ್ಜೆಕ್ಟ್ ಮೇಲೆ ನೇರವಾಗಿ ಇಟರೇಟ್ (iterate) ಮಾಡುತ್ತೀರಿ.
- Python ಒಂದು ಸಾಲನ್ನು ಓದುತ್ತದೆ, ಅದನ್ನು ಪ್ರೊಸೆಸ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ಮುಂದಿನ ಸಾಲಿಗೆ ಹೋಗುತ್ತದೆ.
- ನಿಮ್ಮ ಮೆಮೊರಿ ಬಳಕೆ ಕಡಿಮೆಯಾಗಿ ಮತ್ತು ಸ್ಥಿರವಾಗಿ ಇರುತ್ತದೆ.
- ಫೈಲ್ 1MB ಇರಲಿ ಅಥವಾ 100GB ಇರಲಿ, ಇದು ಮುಖ್ಯವಾಗುವುದಿಲ್ಲ.
ಈ ವ್ಯತ್ಯಾಸವು ಇಂಜಿನಿಯರಿಂಗ್ ತತ್ವದ (philosophy) ಬಗ್ಗೆಯಾಗಿದೆ.
ಹೆಚ್ಚಿನ ಸಂಪನ್ಮೂಲಗಳನ್ನು ಸೇರಿಸುವುದು ತಾತ್ಕಾಲಿಕ ಪರಿಹಾರವಾಗಿದೆ. ಇದು ದುರ್ಬಲವಾದ (fragile) ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ. ನಿಮ್ಮ ವಿನ್ಯಾಸವನ್ನು (design) ರೂಪಿಸಲು ಮಿತಿಗಳನ್ನು ಬಳಸುವುದರಿಂದ ಬಲಿಷ್ಠವಾದ (robust) ಸಾಫ್ಟ್ವೇರ್ ಸೃಷ್ಟಿಯಾಗುತ್ತದೆ.
ಆಪ್ಟಿಮೈಸೇಶನ್ ಎಂದರೆ ಕೇವಲ ವೇಗದ ಬಗ್ಗೆ ಮಾತ್ರವಲ್ಲ. ಇದು ನಿಮ್ಮ ಸಂಪನ್ಮೂಲಗಳ ಬಗ್ಗೆ ಜಾಗರೂಕತೆಯಿಂದ ಇರುವುದರ ಬಗ್ಗೆಯಾಗಿದೆ.
ನೀವು ಕೋಡ್ ಬರೆಯುವಾಗ, ನಿಮ್ಮನ್ನು ನೀವೇ ಕೇಳಿಕೊಳ್ಳಿ:
- ಇದು ಎಷ್ಟು ಮೆಮೊರಿಯನ್ನು ಬಳಸುತ್ತದೆ?
- ಡೇಟಾ ಹತ್ತು ಪಟ್ಟು ದೊಡ್ಡದಾದರೆ ಇದು ಕೆಲಸ ಮಾಡಲಿದೆಯೇ?
- ಕೆಟ್ಟ ಕೋಡ್ ಅನ್ನು ಮರೆಮಾಚಲು ನಾನು ದುಬಾರಿ ಹಾರ್ಡ್ವೇರ್ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದ್ದೇನೆಯೇ?
ಉತ್ತಮ ಸಾಫ್ಟ್ವೇರ್ ಶಿಸ್ತಿನಿಂದ ಬರುತ್ತದೆ.
ಮೂಲ: https://dev.to/prabashanadev/have-we-lost-the-art-of-pure-optimization-31b9