Simplicity vs Flexibility
Soddalik va moslashuvchanlik
Bitta oddiy stul yasayotgan duradgorni tasavvur qiling. U ikki yo'ldan birini tanlashi mumkin: to'rtta oyoqli, mahkam, sodda stul yasash — yoki balandligi o'zgaruvchan, burchaklari buriladigan, uch xil rejimga o'tadigan "universal" stul yasash. Agar mijozga faqat OVQAT STOLI uchun oddiy stul kerak bo'lsa, ikkinchi variant — vaqt, material va kuchni behuda sarflash: hech kim ishlatmaydigan imkoniyatlar uchun to'langan narx.
Dasturlashda bunga YAGNI ("You Aren't Gonna Need It" — "Sizga bu kerak bo'lmaydi") tamoyili deyiladi. Kod yozayotganda, kelajakda "kerak bo'lishi mumkin" degan xayoliy talablar uchun oldindan moslashuvchan qilib qurish — erta umumlashtirish (premature generalization) deyiladi, va bu ko'pincha zarar keltiradi.
Real misol: sizga "foydalanuvchi email orqali xabar oladi" degan talab berilgan. Erta umumlashtirish yo'li — darhol NotificationChannel interfeysi yaratish, EmailNotifier, SMSNotifier, PushNotifier, SlackNotifier uchun joy qoldirish — hozircha faqat email kerak bo'lsa ham. Sodda yo'l — shunchaki SendEmail(user, message) funksiyasini yozish, va agar kelajakda SMS haqiqatan kerak bo'lsa, O'SHANDA uni qo'shish.
- •Moslashuvchanlik BEPUL emas — har bir qo'shimcha interfeys, parametr yoki konfiguratsiya — o'qish va tushunish narxini oshiradi
- •Kelajakdagi talabni siz TAXMIN qilyapsiz (Questions, Not Guesses darsida ko'rgan taxmin xavfi) — u talab hech qachon kelmasligi ham mumkin
- •Haqiqiy ikkinchi talab kelganda, kodni O'SHANDA umumlashtirish — spekulyativ ravishda oldindan qilishdan ODATDA osonroq, chunki endi ikkita HAQIQIY misolingiz bor
Bu — Go Idioms & Naming va Interface Design kurslarida ko'rgan "kichik interfeyslar, aniq kerak bo'lganda qo'shiladi" g'oyasining muhandislik-qaror ko'rinishi. Go tilining o'zi ham shu falsafada qurilgan: interfeys chaqiruvchi tomonda, kerak bo'lganda e'lon qilinadi — oldindan "universal" interfeys ierarxiyasi qurilmaydi.
Albatta, bu "hech qachon oldindan o'ylamang" degani emas — agar ikkinchi kanal ertaga aniq kelishi ma'lum bo'lsa (masalan, mijoz shartnomada buni yozgan), unda biroz moslashuvchanlikka joy qoldirish oqilona. Farq — noaniq "balki kerak bo'lar" bilan aniq, tasdiqlangan "ertaga kerak bo'ladi" orasida. Birinchisi uchun soddalikni tanlang, ikkinchisi uchun moslashuvchanlikka arziydi.
Key Takeaway
Key Takeaway:
Moslashuvchanlik bepul emas — har bir "balki kerak bo'lar" uchun qo'shilgan qatlam, hozirgi kodni tushunish narxini oshiradi. Faqat aniq, tasdiqlangan kelajakdagi ehtiyoj uchun moslashuvchanlik quring; noaniq taxmin uchun — soddalikni tanlang.
NEXT UP
Build It Yourself or Take a Dependency