Engineering Notes
2.46K subscribers
137 photos
5 files
208 links
Kanalda asosan backend engineeringga oid postlar yozib boriladi.

Ba'zi postlarda xatoliklar bor.
Postlar foydali bo’lgan bo’lsa adminni duo qilib qo’ying. Rahmat.

Contact: @Bobosher_Musurmonov
LinkedIn: https://www.linkedin.com/in/bobosher-musurmonov
Download Telegram
Yaqinda ijtimoiy tarmoqlarda AI haqida tez-tez gapirib turadigan bir kishi bilan suhbatlashib qoldim (o'zining asosiy sohasi boshqa). Yaxshi gaplashib turgandik, gap orasida hozir AI bo'yicha mutaxassis bo'lish uchun matematikani zo'r bilish shart emas deb qoldi. Juda og'riqli gap bo'ldi. Og'riqli tomoni u odam AI haqida yaxshi bilmasligida emas, sohaga kirib kelayotgan yoshlar mutaxassisdan ko'ra o'sha odamning gapiga ko'proq ishonishida.

Men AI bo'yicha mutaxassis emasman, lekin sohaga endi qiziqishni boshlaganlarga aytmoqchiman. AI, ML sohalarida mutaxassis bo'lish uchun matematikani, ayniqsa calculus, linear algebra kabi yo'nalishlarni chuqur o'rganish muhim va shart. Busiz iloji yo'q. Gapim sizga yoqmagan bo'lsa ham, bu ayni haqiqat. Matematikasiz AI'ni o'rganish shunchaki kimdir sodda xalq oldida aqlli gapirib "ochko" ishlashi uchun yo pulingizni shilish uchun o'ylab topgan cho'pchak.

Fikrlar bo'lsa kommentga marhamat.
👍33
Engineering Notes
Yaqinda ijtimoiy tarmoqlarda AI haqida tez-tez gapirib turadigan bir kishi bilan suhbatlashib qoldim (o'zining asosiy sohasi boshqa). Yaxshi gaplashib turgandik, gap orasida hozir AI bo'yicha mutaxassis bo'lish uchun matematikani zo'r bilish shart emas deb…
Tepadagi postda "mutaxassis" degan joyiga e'tibor bering. Masalan, kimgadir 1 haftada Python yo Javaning sintaksisini o'rgatsangiz u dasturchi bo'lib qolmaydi. Xuddi shunday AI uchun tayyor toollardan foydalanib nimadir yasay oladigan odam ham AI mutaxassisi degani emas.
👍24
Yuqoridagi kod natijasini toping
🍾4
Pythonda (yoki boshqa tillarda ham) specific key set tanlab dictionary (hashmap) ishlashini sekinlashtirish mumkinmi?
Menimcha mumkin. Hozir bir narsani sinab ko'ray, o'xshasa kanalga qo'yaman.
👍7
Bir xil sizega ega 2 ta dict olib, ikkalasiga ikki xil ma'lumot qo'shdim. Bittasiga arbitrary, ikkinchisiga specific (maksimal hash collisionga olib keladigan). Ko'rib turganingizdek, ikkinchi dictionaryni build qilish ham, iterate qilish (hamma keylar orqali birma-bir valuelarni olish) birinchisiga qaraganda ancha sekin bo'ldi.

P.S. Kod sifatiga e'tibor bermaymiz ))
👍12
Ko'pchilik Uncle Bobning clean code va software design haqidagi talklarini ko'rgan bo'lsa kerak. Ochig'ini aytsam, u yerda aytilgan hamma gapga ham qo'shilmayman. Ayniqsa functional decomposition haqidagi gaplariga. Mana bu yerda software design filosofiyasi haqida boshqacharoq fikrlar berilgan ekan. Menimcha Uncle Bobning idealaridan ko'ra o'rganishga ham, amaliyotga qo'llashga ham osonroq va haqiqatga yaqinroq. Ko'rib, fikrlaringizni kommentda qoldirishingiz mumkin:

https://youtu.be/bmSAYlu0NcY
👍7🍾1
P-NP muammosiga yaqin 10 yilda pozitiv yechim topilsa (ya'ni P=NP bo'lib chiqsa) va bu birdaniga ommaga e'lon qilinsa katta ehtimol bilan butun dunyo moliya tizimlari va internet ostun-ustun bo'ladi. Lekin menimcha bu yechimning ilm-fanga qo'sha oladigan hissasi oldida tepadagi katastrofiyalar "kichkina ko'ngilsizlik" bo'lib qoladi ))
👍9
Kichkina matematik tajriba o'tkazayotgandim, ishlam kallamay qoldi.

Masala modular arithmetic (qoldiqli arifmetika) bo'yicha. Deylik, a va b sonlari olinib (a <= b < n), bu sonlar ko'paytmasini n ga bo'linganida c qoldiq chiqadi, ya'ni a * b = c (mod n). Endi savol: berilgan n soni uchun ko'paytmasida c qoldiq qoladigan nechta (a, b) pair tanlash mumkin. Masalan, ko'paytmasini 7 ga bo'lganda 5 qoldiq qoladigan (ya'ni n = 7, c = 5) jami 3 ta pair tanlash mumkin: (1, 5), (2, 6), (3, 4).

Deylik, f(n, c) shunday kombinatsiyalar sonini sanaydigan funksiya bo'lsin. Masalan, f(7, 5) = 3. Endi berilgan n soni uchun c ning har bir qiymatida (c = 0...n-1) f(n, c) funksiyasining natijalarini olaylik. Masalan, n = 6 uchun bu natijalar (8, 2, 3, 3, 4, 1) ko'rinishida.

Bir qarashda bu tuple random ko'rinadi. Aslida tajribamdan maqsad ham shu tupleni o'rganish. E'tiborimni tortgan joyi, n 2 dan katta tub son bo'lganida (1e4 gacha bo'lgan sonlar uchun tekshirib ko'ra oldim, ixtiyoriy tub son uchun deya olmayman) tupledagi distinct elementlar soni 3 tagina: n, n/2 va n/2+1 (/ bu yerda integer division). Masalan, n = 10 uchun tuple (14, 3, 6, 2, 7, 5, 7, 2, 6, 3) ga teng. Ancha tartibsiz va tushunarsiz. Lekin n = 11 uchun (11, 6, 5, 6, 6, 6, 5, 5, 5, 6, 5) tuple ancha sodda: bu yerda faqat 11, 5 va 6 sonlari bor. Original masala shartiga qaytadigan bo'lsak, ko'paytmasini 11 ga bo'lganda ixtiyoriy c qoldiq qoladigan 2 ta son tanlashning 5, 6 yoki 11 ta usuli bor.

Meni qiziqtirayotgan savol, nega aynan 3 ta? n soni borligi tushunarli, lekin nega n/2 va n/2+1 sonlari ham bor? Nega boshqa sonlar yo'q?
😢4🍾3
Engineering Notes
https://betterprogramming.pub/object-oriented-programming-the-trillion-dollar-disaster-92a4b666c7c7
Men paradigm sifatida OOPni hurmat qilaman FP OOPdan ko'ra yaxshiroq (yoki teskarisi) degan gapga qo'shilmayman. Tepadagi maqolada men e'tibor qaratmoqchi bo'lgan jihat OOP yomon paradigm emas, balki OOP qanday kod yozishni tartiblashning o'rniga vaqt o'tishi bilan o'zi kodga, tillarga moslashib o'zgarib borayotgani.

Men e'tibor qaratmoqchi bo'lgan jihat vaqt o'tishi bilan OOPning bir-birini ignore qiladigan bir qancha "versiya"lari chiqib ketayotganida. Aslida paradigmlardan maqsad software design qoidalarining maqsadga yo'nalgan aniq to'plamlarini ishlab chiqish bo'lgan. Shuning uchun ham paradigm dasturlash tilidan ko'ra yuqoriroq darajadagi tushuncha. Tepada aytilgan "versiyalar" kelib chiqishiga asosiy sabab tillar (ya'ni OOPning har xil tillardagi har xil implementatsiyasi) ekanini hisobga olsak, zamonaviy OOP language-dependent bo'lib qolayapti.
👍6
Engineering Notes
https://wiki.c2.com/?AlanKayOnMessaging
E'tibor bergan bo'lsangiz, bu yerda Alan Kay "object"dan ko'ra "messaging"ga ko'proq urg'u qaratayapti. Sababi, original OOP kelib chiqishiga sabab distributed computing uchun yaxshiroq model yaratish bo'lgan. Distributed computing bilan bog'liq o'sha vaqtdagi (va hozir ham) asosiy muammo computational unitning ichki strukturasi emas, balki ular bir-biri bilan qanday kommunikatsiya qilishi bo'lgan.
👍1
Yuqorida ko'rib turganingiz Lambda calculus, to'liqligicha matematik funksiyalarga asoslangan hisoblash modeli (computational model). Alonzo Church tomonidan ishlab chiqilgan va Turing Machinega to'liq alternativ bo'la olishi matematik tomondan isbotlangan.

E'tibor bergan bo'lsangiz, bu modelda hamma narsa matematik funksiya sifatida emplement qilinadi. Hatto valuelar ham abstrakt obyekt emas, funksiya. Hatto control flow (ya'ni if-else, loop, rekursiya va hokazolar) ham funksiyalar yordamida ishlab chiqilgan. Lambda calculus biz biladigan zamonaviy functional programmingning asosi hisoblanadi.

P.S. Kod sifatida e'tibor bermaymiz, Pythonda bu narsani boricha ko'rsatish juda qiyin (aniqrog'i, men o'xshatolmadim).
👍16
Dasturlash sohasini o'rgatayotganda o'quvchisini test yozishga majburlaydigan (shunchaki test nimaligini aytib o'tib ketadigan emas) ustozlar mening qahramonim.
👍30
👍17😁10
Oramizda UzGeeksga o'xshagan communitylarning organizatorlari bormi? Masalan, software design, programming paradigmsga o'xshash mavzulardagi talklarga qiziqish qanday bo'ladi?
👍12
Savol: Savol tug'ilganda AIdan osongina qisqa va lo'nda javob olish odamlarning saviyasini yanada pasaytirmaydimi?

Subyektiv javobim:

Assalamu alaykum, AI bo'yicha mutaxassis emasman, lekin menimcha bu xuddi siz aytgandek shundoq ham yomon vaziyatni battar qiladi.

Menimcha, bunga asosiy sabablardan biri ma'lumot olish va o'rganish orasidagi farq bo'lsa kerak (o'qish vs uqish). Ya'ni o'rganish uchun olgan ma'lumotni analiz qilib, biz shu vaqtgacha biladigan narsalarga bog'lash va "yetmay qolgan" joylarini savol so'rash orqali to'ldirish kerak bo'ladi (odatda miyadagi bilimni graph ko'rinishida abstrakt tasvirlashadi). Shundagini u uzoq vaqtli xotirada qoladi va biz "bilim" deb ataydigan narsaga aylanadi.

Qisqasi, ma'lumotni katta tezlikda va vizual ko'rinishda olishning asosiy kamchiligi, u yerda o'ylash uchun sabab va vaqt kam bo'ladi: shundoq ham vizual bo'lgani uchun tasavvur qilish shart emas va bunga vaqt ham yo'q – yana yangi ma'lumotlar kelayapti. Shunda ma'lumot qisqa vaqt xotirada saqlanib turadi, lekin ma'nosini to'liq tushunmaymiz. (Tavsiya: Video materiallardan o'rganayotganda tez-tez to'xtatib aytilgan qismni analiz qilish va videodagi har bir qism uchun batafsilroq reference materiallardan foydalanish. Ya'ni videodan asosan o'rganish uchun emas, nimani o'rganish kerakligini topish uchun foydalanish.)

Undan tashqari bu usul odatda "open edge" qoldirmaydi, ya'ni biror narsani o'rgangandan keyin davom etishga va ko'proq o'rganishga motivatsiya bo'ladigan savollar tug'ilmaydi. Sabab yana o'sha - savol tug'ilishi uchun analiz qilish kerak, analiz qilishga esa vaqt yo'q. (Aytgancha, hali fokus va dissipliniyaga ta'siri haqida aytmadim)

Lekin bu usullar mashhur bo'lib ketayotgani ham bekor emas. Odatda bizga hozir ko'rinib turgan natija kelajakdagi "side-effect"lardan ko'ra muhimroq. Va yana biz aynan bilim olishga kelganida vaqt tejashga juda ustamiz (entertainment boshqa masala). 1 hafta kitob o'qish yo yarim soat video ko'rish bo'lsa qaysi birini tanlaysiz?. Biznesga esa faqat shu, biz hozir nimani tanlashimiz qiziq. Ma'lumot olishning yanada kompakt formalari chiqaveradi ommaning katta qismi doim shu kompaktroq formani tanlaydi.

P.S. Bu javob orqali video ko'rmang yo ChatGPT ishlatmang demoqchi emasman. Shunchaki ulardan to'g'ri foydalana olish muhimligini eslatmoqchiman.
👍24🍾4😢1
Qiziq matematik masala. Sizga bir o'yin qoidalarini aytaman:
—Ikkalamiz navbatma-navbat 1 dan 9 gacha bo'lgan son tanlaymiz. Avval men, keyin siz, yana men va hokazo.
— Bitta son ikki marta tanlanishi mumkin emas.
— Birinchi bo'lib kimning tanlagan sonlaridan ixtiyoriy 3 tasining yig'indisi 15 ga teng bo'lsa shu o'yinchi yutadi.

Shu o'yinda yutish uchun (yoki yutqizmaslik uchun) algoritm o'ylab topa olasizmi? Aynan kod ko'rinishida emas, shunchaki odam tushinadigan qoidalar to'plami.
👍18