Premature Optimization
Erta optimallashtirish
Marafon yugurishga tayyorlanayotgan odamni tasavvur qiling: u startdan oldin poyabzalining bog'ichini ikki xil usulda bog'lab, qaysi biri 0.001 soniya tezroq ekanini o'lchayapti — lekin hali umuman yugurishni mashq qilmagan. Bog'ich tugunining tezligi — 42 kilometrlik masofada sezilmaydigan darajada kichik, mashq qilmaslik esa haqiqiy muammo. Vaqt va e'tibor noto'g'ri joyga sarflanmoqda.
Dasturlashda bunga erta optimallashtirish (premature optimization) deyiladi: dastur hali TO'G'RI ishlamayotgan yoki hali sekinligi ISBOTLANMAGAN bosqichda, kodning tezligini oshirishga vaqt sarflash. Mashhur dasturchi Donald Knuth aytganidek, bu "barcha yovuzliklarning ildizi" — chunki u vaqtni behuda sarflaydi va ko'pincha kodni murakkablashtiradi, o'qishni qiyinlashtiradi.
Real misol: siz foydalanuvchilar ro'yxatini bazadan olib, ekranda ko'rsatadigan funksiya yozyapsiz. Kod oddiy for sikli bilan ishlaydi. Yozishni tugatishdan oldin, "balki bu sekin bo'lar" deb, uni murakkab keshlash (caching) tizimi, parallel qayta ishlash va maxsus ma'lumotlar tuzilmasi bilan "optimallashtirasiz" — hali hech kim buni SEKIN ekanini o'lchamagan holda ham.
- •Avval TO'G'RI, sodda yechim yozing — u sizga ishlaydigan, tushunarli boshlang'ich nuqta beradi
- •Keyin O'LCHANG (profiling) — dastur haqiqatan qayerda sekin ekanini raqamlar bilan aniqlang, taxmin bilan emas
- •Faqat O'LCHOV ko'rsatgan "qiyin" joyni optimallashtiring — qolgan 95% kod allaqachon yetarlicha tez
Bu — Simplicity vs Flexibility darsidagi YAGNI tamoyilining tezlik sohasidagi ko'rinishi: xuddi "balki kerak bo'lar" degan moslashuvchanlik uchun oldindan to'lamaganingiz kabi, "balki sekin bo'lar" degan taxmin uchun ham oldindan murakkablik to'lamang. Ikkalasida ham yechim bir xil: HAQIQIY ehtiyoj paydo bo'lganda, O'SHANDA hal qiling.
Bu shuni anglatmaydiki, tezlik haqida umuman o'ylamaslik kerak — ba'zi qarorlar (masalan, to'g'ri ma'lumotlar tuzilmasini tanlash: slice yoki map) boshidanoq muhim va keyinroq o'zgartirish qimmatga tushadi. Farq — arxitektura darajasidagi oqilona tanlov bilan mikro-optimallashtirish (masalan, ikki xil sikl yozish usulini solishtirish) orasida. Birinchisini boshida o'ylang, ikkinchisini o'lchovga qoldiring.
Key Takeaway
Key Takeaway:
Avval to'g'ri va sodda yechim yozing, keyin o'lchang, faqat shundan keyin — o'lchov ko'rsatgan haqiqiy "qiyin" joyni optimallashtiring. Isbotlanmagan taxmin asosida murakkablik qo'shish — vaqtni behuda sarflaydi va kodni chalkashtiradi.
NEXT UP
Good Enough vs Perfect