Qaysi dasturlash tili zo'r?
Bu savolni eshitsam kulgim keladi, sababi juda oddiy. Bu savolni yo o'ylamay berishadi yoki o'ylay olmaganlari uchun berishadi.
Javobim: Usta xonada qurollar juda ko'p. Hammasini o'z o'rni va joyi bor ishlatish uchun. Hech biri, hech biridan na ustun emas na a'lo.
Keling bu savolni berishni to'xtataylik. Sizga dasturlash tili emas tajriba muhim bo'lsin.
Hozirgi kungacha men shaxsan C, Java, Go, Swift, Python, JavaScript, yaml, TypeScript kabi dasturlash tillaridan foydalanganman. Har birini o'z o'rni va joyi bor.
Hech biri, hech biridan ustun emas. Python AI, Data bo'yicha qolganlaridan biroz yaxshiroq ammo eng zo'ri emas.
Swift Apple ecosystem uchun qolganlaridan yaxshiroq ammo eng zo'ri emas.
Ko'rib turibsizki har taraflama zo'ri mavjud emas.
Ustaga qaysi qurolni ishlatish emas, qaysi quroldan qanday muammoni hal qila olish muhim.
Muammoni hal qilish esa odatda tajribadan kelib chiqadi.
O'sha eski vasiyatni davom etaman: Problem solvingni kuchaytiring
@otabekswe
Bu savolni eshitsam kulgim keladi, sababi juda oddiy. Bu savolni yo o'ylamay berishadi yoki o'ylay olmaganlari uchun berishadi.
Javobim: Usta xonada qurollar juda ko'p. Hammasini o'z o'rni va joyi bor ishlatish uchun. Hech biri, hech biridan na ustun emas na a'lo.
Keling bu savolni berishni to'xtataylik. Sizga dasturlash tili emas tajriba muhim bo'lsin.
Hozirgi kungacha men shaxsan C, Java, Go, Swift, Python, JavaScript, yaml, TypeScript kabi dasturlash tillaridan foydalanganman. Har birini o'z o'rni va joyi bor.
Hech biri, hech biridan ustun emas. Python AI, Data bo'yicha qolganlaridan biroz yaxshiroq ammo eng zo'ri emas.
Swift Apple ecosystem uchun qolganlaridan yaxshiroq ammo eng zo'ri emas.
Ko'rib turibsizki har taraflama zo'ri mavjud emas.
Ustaga qaysi qurolni ishlatish emas, qaysi quroldan qanday muammoni hal qila olish muhim.
Muammoni hal qilish esa odatda tajribadan kelib chiqadi.
O'sha eski vasiyatni davom etaman: Problem solvingni kuchaytiring
@otabekswe
Abstraction - Abstraksiya
Abstraksiya – Computer Sciencedagi bir tushuncha bo‘lib, asosiy e’tiborni eng muhim detallarga qaratish va keraksiz detallarni yashirish orqali murakkab tizimlarni soddalashtirish imkonini beruvchi konsept desak bo'ladi.
Buni xaritaga o'xshatsak bo'ladi. Xarita sizga joylashuvning muhim xususiyatlari (masalan, yo'llar, binolar va diqqatga sazovor joylar)ni ko'rsatadi, lekin u sizga barcha tafsilotlarni ko'rsatmaydi (masalan, uylarning ranglari yoki derazalar soni).
Xarita real hayotdagi abstraktsiyasidir va u sizga faqat bilishingiz kerak bo'lgan narsalarni ko'rsatadi.
Dasturlashda abstraksiya murakkab tizimlarning soddalashtirilgan modellarini yaratish uchun qo'llaniladigan tushuncha. Shuning uchun u bilan ishlash oson bo'ladi.
Dasturlashda funksiyalarni yaratishdan maqsadlardan biri aynan abstraction xisoblanadi.
Masalan: Pultli moshina sotib oldingiz va uning pultida 4 ta tugmacha bor ekan ⬆️⬇️⬅️➡️.
Biz ⬆️ ni bosganimizda moshina oldinga yurayabdi. Bizga ⬆️ bosganimizdagi ichkarida yuz beradigan jarayon muhim emas, moshinani yurishi muhim. Aynan shu narsani abstraction deb olsak bo'ladi.
Bu yerda ⬆️ bosilganda
Abstraktsiya dasturlashda kuchli vosita deb bilaman. Chunki u sizga, u bilan ishlashni, tushunishni va to'g'irlashni osonlashtirish imkonini beradi.
Agar postni foydali deb topsangiz share qilishni unutmang.
Keyingi epizodda ko’rishguncha poka-poka!
@otabekswe
Abstraksiya – Computer Sciencedagi bir tushuncha bo‘lib, asosiy e’tiborni eng muhim detallarga qaratish va keraksiz detallarni yashirish orqali murakkab tizimlarni soddalashtirish imkonini beruvchi konsept desak bo'ladi.
Buni xaritaga o'xshatsak bo'ladi. Xarita sizga joylashuvning muhim xususiyatlari (masalan, yo'llar, binolar va diqqatga sazovor joylar)ni ko'rsatadi, lekin u sizga barcha tafsilotlarni ko'rsatmaydi (masalan, uylarning ranglari yoki derazalar soni).
Xarita real hayotdagi abstraktsiyasidir va u sizga faqat bilishingiz kerak bo'lgan narsalarni ko'rsatadi.
Dasturlashda abstraksiya murakkab tizimlarning soddalashtirilgan modellarini yaratish uchun qo'llaniladigan tushuncha. Shuning uchun u bilan ishlash oson bo'ladi.
Dasturlashda funksiyalarni yaratishdan maqsadlardan biri aynan abstraction xisoblanadi.
Masalan: Pultli moshina sotib oldingiz va uning pultida 4 ta tugmacha bor ekan ⬆️⬇️⬅️➡️.
Biz ⬆️ ni bosganimizda moshina oldinga yurayabdi. Bizga ⬆️ bosganimizdagi ichkarida yuz beradigan jarayon muhim emas, moshinani yurishi muhim. Aynan shu narsani abstraction deb olsak bo'ladi.
Bu yerda ⬆️ bosilganda
up()
degan funksiya ishga tushishi mumkin. Ammo aytganimdek bizga uning qanday ishlashi emas moshinani yurishi muhim.Abstraktsiya dasturlashda kuchli vosita deb bilaman. Chunki u sizga, u bilan ishlashni, tushunishni va to'g'irlashni osonlashtirish imkonini beradi.
Agar postni foydali deb topsangiz share qilishni unutmang.
Keyingi epizodda ko’rishguncha poka-poka!
@otabekswe
DSA.UZ
🎉 Va nihoyat biz kutgan kun keldi. Data Structure and Algorithms mavzusidagi o'sha ajoyib va qiziqarli qo'llanmaga start berildi.
Darsliklar har hafta Juma kuni soat 12:00da chiqadi.
Contribute qilmoqchi bo'lganlarga doim pull request eshiklarimiz ochiq.
Xato kamchiliklarni to'ldirib borishga harakat qilamiz. Agar xato topsangiz Issues bo'limida New Issue ochishni unutmang!
Sizdan bitta Star bizdan tinimsiz ajoyib darsliklar 😉
@otabekswe
🎉 Va nihoyat biz kutgan kun keldi. Data Structure and Algorithms mavzusidagi o'sha ajoyib va qiziqarli qo'llanmaga start berildi.
Darsliklar har hafta Juma kuni soat 12:00da chiqadi.
Contribute qilmoqchi bo'lganlarga doim pull request eshiklarimiz ochiq.
Xato kamchiliklarni to'ldirib borishga harakat qilamiz. Agar xato topsangiz Issues bo'limida New Issue ochishni unutmang!
Sizdan bitta Star bizdan tinimsiz ajoyib darsliklar 😉
@otabekswe
This media is not supported in your browser
VIEW IN TELEGRAM
Booking.com'dan offer oldim🎉
Ko'plab rejactlar va stresslar oxir oqibat natijaga olib keldi. Interviewlar biroz qiyin bo'ldiku ammo amalladik.
Yana boshqa yaxshi xabarlarni tez orada e'lon qilsh nasib qilsin.
Amsterdamda ko'rishguncha Booking.com ✈️
Happy Fools' Day fam!
@otabekswe
Ko'plab rejactlar va stresslar oxir oqibat natijaga olib keldi. Interviewlar biroz qiyin bo'ldiku ammo amalladik.
Yana boshqa yaxshi xabarlarni tez orada e'lon qilsh nasib qilsin.
Amsterdamda ko'rishguncha Booking.com ✈️
Happy Fools' Day fam!
@otabekswe
Clean Code
Bugungi postimiz clean code ya'ni toza kod yozish haqida bo'ladi.
Clean code yozish o'zi oson ammo ko'pchilik uni o'ziga-o'zi qiyinlashtiradi.
Bugun sizlar bilan clean code yozish uchun tips ko'rib ketamiz.
Agar bu aytganlarimga amal qilsangiz, o'zingizni clean coder deb e'lon qilaversangiz bo'ladi.
Let's Go 🚀
@otabekswe
Bugungi postimiz clean code ya'ni toza kod yozish haqida bo'ladi.
Clean code yozish o'zi oson ammo ko'pchilik uni o'ziga-o'zi qiyinlashtiradi.
Bugun sizlar bilan clean code yozish uchun tips ko'rib ketamiz.
Agar bu aytganlarimga amal qilsangiz, o'zingizni clean coder deb e'lon qilaversangiz bo'ladi.
Let's Go 🚀
@otabekswe
Follow Coding Standards
Har qanday dasturlash tilida o'z standartlari mavjud.
Ular sizga maksimal ravishda yaxshi kod yozishga yo'l ko'rsata oladi.
Bu qo'llanmaga ergashish orqali siz Clean Coderga aylanasiz.
Standartlarni o'qing va ularda berilgan tiplarga amal qiling.
Ba'zi tiplarni misol qilib oladigan bo'lsak:
💻 Python: PEP8
💻 JavaScript: Airbnb JavaScript Style Guidline
💻 Java: Oracle Java Code Conventions.
💻 Rust: Rust Style Guide.
💻 C: Linux Kernel Coding Style.
💻 C++: Google C++ Style Guide.
💻 Swift: Swift API Design Guidelines.
@otabekswe
Har qanday dasturlash tilida o'z standartlari mavjud.
Ular sizga maksimal ravishda yaxshi kod yozishga yo'l ko'rsata oladi.
Bu qo'llanmaga ergashish orqali siz Clean Coderga aylanasiz.
Standartlarni o'qing va ularda berilgan tiplarga amal qiling.
Ba'zi tiplarni misol qilib oladigan bo'lsak:
💻 Python: PEP8
💻 JavaScript: Airbnb JavaScript Style Guidline
💻 Java: Oracle Java Code Conventions.
💻 Rust: Rust Style Guide.
💻 C: Linux Kernel Coding Style.
💻 C++: Google C++ Style Guide.
💻 Swift: Swift API Design Guidelines.
@otabekswe
Use meaningful names
Ko'p kuzatiladigan xolatlardan biri bu Variable, Function va Classlarga noto'g'ri va ma'nosiz nomlar berilishi.
Berilayotgan nomlar qanchalik noto'g'ri bo'lsa shunchalik dasturni tushunish va debuq qilish qiyinlashadi.
Gap faqat o'zingiz haqingizda emas balkim boshqa dasturchilar haqida ham ketayabdi.
Ularni ham, o'zingizni ham ishiningizni osonlashtirish uchun ma'noli va vazifasidan kelib chiqib nomlang.
❌
✅
@otabekswe
Ko'p kuzatiladigan xolatlardan biri bu Variable, Function va Classlarga noto'g'ri va ma'nosiz nomlar berilishi.
Berilayotgan nomlar qanchalik noto'g'ri bo'lsa shunchalik dasturni tushunish va debuq qilish qiyinlashadi.
Gap faqat o'zingiz haqingizda emas balkim boshqa dasturchilar haqida ham ketayabdi.
Ularni ham, o'zingizni ham ishiningizni osonlashtirish uchun ma'noli va vazifasidan kelib chiqib nomlang.
❌
x = "John"
✅
name = "John"
@otabekswe
Write comments
Odatda jamoaviy ishda kodimizni faqat o'zimiz emas balkim boshqalar ham o'qiydi, ko'radi.
Shu holatda boshqa dasturchilarga ushbu kod nima vazifani bajarishini comment qilib ketsangiz bo'ladi.
Bu orqali boshqalarni ham o'zingizni ham vaqtini tejaysiz.
Nafaqat vaqt tejash balkim boshqa dasturchiga bitmagan ishni bildirib ketsangiz bo'ladi.
@otabekswe
Odatda jamoaviy ishda kodimizni faqat o'zimiz emas balkim boshqalar ham o'qiydi, ko'radi.
Shu holatda boshqa dasturchilarga ushbu kod nima vazifani bajarishini comment qilib ketsangiz bo'ladi.
Bu orqali boshqalarni ham o'zingizni ham vaqtini tejaysiz.
Nafaqat vaqt tejash balkim boshqa dasturchiga bitmagan ishni bildirib ketsangiz bo'ladi.
@otabekswe
White space
Ba'zi odamlar shu darajada erinchoqki xatto space bosishga ham erinadi.😅
Xullas kichik maslahat bo'sh joy tashlab turingda hay.
To'g'ri kodingizda hech qanday o'zgarish bo'lmaydi ammo boshqa odam o'qiganda tushunmay qolishi mumkin.
Misol uchun:
❌
✅
@otabekswe
Ba'zi odamlar shu darajada erinchoqki xatto space bosishga ham erinadi.😅
Xullas kichik maslahat bo'sh joy tashlab turingda hay.
To'g'ri kodingizda hech qanday o'zgarish bo'lmaydi ammo boshqa odam o'qiganda tushunmay qolishi mumkin.
Misol uchun:
❌
hello=lambda x: "World" if x==None else x
✅
hello = lambda x: "World" if x == None else x
@otabekswe
DSA.UZ
🎉 Bugun vada qilinganidek Array mavzusida qo'llanma chiqdi.
Siz ushbu qo'llanmani yaxshilab o'qib chiqib o'z tushunchalaringizni oshirishingiz mumkin.
Biz mashqlar bilan berib borishga harakat qilayabmiz.
Ba’zi dasturlash tillarini yoza olmadim vaqt yetishmovchiligi bo’lib qoldi.
Agar yozib bera olsangiz va contribution qilmoqchi bo’lsangiz, pull request eshiklarimiz ochiq
Tez orada web formatga o'tkaziladi.
@otabekswe
🎉 Bugun vada qilinganidek Array mavzusida qo'llanma chiqdi.
Siz ushbu qo'llanmani yaxshilab o'qib chiqib o'z tushunchalaringizni oshirishingiz mumkin.
Biz mashqlar bilan berib borishga harakat qilayabmiz.
Ba’zi dasturlash tillarini yoza olmadim vaqt yetishmovchiligi bo’lib qoldi.
Agar yozib bera olsangiz va contribution qilmoqchi bo’lsangiz, pull request eshiklarimiz ochiq
Tez orada web formatga o'tkaziladi.
@otabekswe
GitHub
GitHub - otabekswe/dsalgo: "Data Structure and Algorithms" uchun O'zbek tilidagi va illustratsiyalarga boy bo'lgan qo'llanma.
"Data Structure and Algorithms" uchun O'zbek tilidagi va illustratsiyalarga boy bo'lgan qo'llanma. - otabekswe/dsalgo
Backendga sayohat
Bismillah! Aytilgan gap otilgan o'q.
Vaqt muammo bo'lib ba'zan to'xtab qolsak ham bizni tark etmaysiz degan umiddamiz.
Qo'ldan kelgancha tushunchalarni sodda, jaydari va vizuallashtirishga urunayabmiz.
Postni foydali deb topgan bo'lsangiz ulashib qo'ying, sizdan faqat bitta click ketadi.
Post haqida feedback qoldirib ketsangiz, uni yaxshilashga yordam qilgan bo'lardingiz.
@otabekswe
Bismillah! Aytilgan gap otilgan o'q.
Vaqt muammo bo'lib ba'zan to'xtab qolsak ham bizni tark etmaysiz degan umiddamiz.
Qo'ldan kelgancha tushunchalarni sodda, jaydari va vizuallashtirishga urunayabmiz.
Postni foydali deb topgan bo'lsangiz ulashib qo'ying, sizdan faqat bitta click ketadi.
Post haqida feedback qoldirib ketsangiz, uni yaxshilashga yordam qilgan bo'lardingiz.
@otabekswe
Telegraph
Backendga sayohat
Ushbu loyiha sizni Backend soxasiga biroz bo'lsada olib kirish yoki bilmaganlaringizni sizga qaysidir darajada o'rgatish maqsadida yozilayabdi. Bunda olgan bilimlaringizni boshqalar bilan ham bo'lishib borishni va bu jarayonda bizni ham eslab o'tishni unutmasangiz…
Otabek’s I/O
Backendga sayohat Bismillah! Aytilgan gap otilgan o'q. Vaqt muammo bo'lib ba'zan to'xtab qolsak ham bizni tark etmaysiz degan umiddamiz. Qo'ldan kelgancha tushunchalarni sodda, jaydari va vizuallashtirishga urunayabmiz. Postni foydali deb topgan bo'lsangiz…
This media is not supported in your browser
VIEW IN TELEGRAM
Access Network chiqdi 🎉
Ushbu qismda biz qanday qilib internetga ulanish haqida qisqacha ko'rib o'tganmiz.
Kelasi qismlarda Advanced topiclarga to'xtalamiz.
Postni foydali deb topgan bo'lsangiz share qilib qo'yishni unutmang🙃
Post haqida feedbacklarni kommentda yozib keting. Bu orqali xatolarimizni to'g'irlashga yordam qilasiz.
@otabekswe
Ushbu qismda biz qanday qilib internetga ulanish haqida qisqacha ko'rib o'tganmiz.
Kelasi qismlarda Advanced topiclarga to'xtalamiz.
Postni foydali deb topgan bo'lsangiz share qilib qo'yishni unutmang🙃
Post haqida feedbacklarni kommentda yozib keting. Bu orqali xatolarimizni to'g'irlashga yordam qilasiz.
@otabekswe
Tree
Frontendni o'rganayotgan paytlarim "HTML Tree" desa g'alati eshitilar edi.
HTML Tree bekorga tree emasligini DSA o'rganib tushundim.
Tree data structureda "leaf" degan termin mavjud ya'ni "barg".
Undan tashqari internal node va external node lar ham bor (bularni to'liqroq "dsa.uz"da gaplashamiz).
Binary Tree ni uzog'i ikkita yoki umumman bolasi bo'lmasligi mumkin.
Yuqoridagi rasmda keltirilgan misolda siz HTML treeni va Treeni ko'rishingiz mumkin.
HTML Treeni Binary Treedan farqi u ko'p leaflarga egalik qila olishida.
Siz ishlatayotgan ammo bilmaydigan ko'plab narsalar shular asosida qurilgan.
Misol uchun browserda yangi pagega o'tish va ortga qaytishni "Stack" bajaradi va h.k.z
DSA o'rganish sizni nafaqat problem solving qobilyatingizni rivojlantiradi.
Balkim siz o'rganayotgan yoki o'rganib bo'lgan bilimlaringizni asosini ko'rsatib beradi.
@otabekswe
Frontendni o'rganayotgan paytlarim "HTML Tree" desa g'alati eshitilar edi.
HTML Tree bekorga tree emasligini DSA o'rganib tushundim.
Tree data structureda "leaf" degan termin mavjud ya'ni "barg".
Undan tashqari internal node va external node lar ham bor (bularni to'liqroq "dsa.uz"da gaplashamiz).
Binary Tree ni uzog'i ikkita yoki umumman bolasi bo'lmasligi mumkin.
Yuqoridagi rasmda keltirilgan misolda siz HTML treeni va Treeni ko'rishingiz mumkin.
HTML Treeni Binary Treedan farqi u ko'p leaflarga egalik qila olishida.
Siz ishlatayotgan ammo bilmaydigan ko'plab narsalar shular asosida qurilgan.
Misol uchun browserda yangi pagega o'tish va ortga qaytishni "Stack" bajaradi va h.k.z
DSA o'rganish sizni nafaqat problem solving qobilyatingizni rivojlantiradi.
Balkim siz o'rganayotgan yoki o'rganib bo'lgan bilimlaringizni asosini ko'rsatib beradi.
@otabekswe
OSI Model chiqdi 🎉
Qo'llanma yozishda ba'zi xatoliklarga yo'l qo'ygan bo'lishimiz mumkin.
Iltimos uni izohlarda yozib to'g'irlab keting.
Qatiyatli bo'ling va o'rganishda charchamang.
Post foydali bo'lsa, ulashishingiz mumkin!
@otabekswe
Qo'llanma yozishda ba'zi xatoliklarga yo'l qo'ygan bo'lishimiz mumkin.
Iltimos uni izohlarda yozib to'g'irlab keting.
Qatiyatli bo'ling va o'rganishda charchamang.
Post foydali bo'lsa, ulashishingiz mumkin!
@otabekswe
Best practices
Shaxsiy fikrim inson nimanidir qilishga boshidan odatlanishi juda yomon agar u haqiqatdan yomon narsa bo'lsa.
Yomon kod yozishga boshidan o'rgansa keyin yaxshilashi uchun juda ko'p vaqt ketadi.
Boshlagan ishini oxiriga yetkazmasa, keyin to'g'irlash juda qiyin bo'ladi.
Shuni inobatga olib boshidan o'zini shu narsaga o'rgata olsa bu uning eng katta yutug'i bo'ladi deb o'ylayman.
Daraxt o'sib bo'lgandan keyin uni to'g'irlash juda katta muammolar keltirishi, sinishlar yuzaga kelishi mumkin.
Ammo nixol paytida qiyshiqlikni to'g'irlash hech qanday zarar yetkazmaydi.
Chiroyli va tushunarli kod yozishga odatlaning. Bilmasngiz o'rganing.
Mana bu sizga oz-moz yordam berishi mumkin.
@otabekswe
Shaxsiy fikrim inson nimanidir qilishga boshidan odatlanishi juda yomon agar u haqiqatdan yomon narsa bo'lsa.
Yomon kod yozishga boshidan o'rgansa keyin yaxshilashi uchun juda ko'p vaqt ketadi.
Boshlagan ishini oxiriga yetkazmasa, keyin to'g'irlash juda qiyin bo'ladi.
Shuni inobatga olib boshidan o'zini shu narsaga o'rgata olsa bu uning eng katta yutug'i bo'ladi deb o'ylayman.
Daraxt o'sib bo'lgandan keyin uni to'g'irlash juda katta muammolar keltirishi, sinishlar yuzaga kelishi mumkin.
Ammo nixol paytida qiyshiqlikni to'g'irlash hech qanday zarar yetkazmaydi.
Chiroyli va tushunarli kod yozishga odatlaning. Bilmasngiz o'rganing.
Mana bu sizga oz-moz yordam berishi mumkin.
@otabekswe
Balkim qiziqdir
biror o'zgaruvchiga yangi qiymatni reassign qilganingizda nima sodir bo'lishini bilasizmi?
Ba'zilar bilmasligi mumkin keling o'rganamiz. Bu yerda tup o'zgaruvchisining qiymati update bo'ladi yoki o'zgarib qoladi degan fikrni unutaylik chunki unday emas.
O'zgaruvchilar shunchaki biror objectga reference xisoblanadi. Ushbu holatda esa (1, 2, 3, 4, 5) alohida object (3, 4, 5, 6, 7) alohida object.
Ularning ikkisi ham xotirada yaratiladi ammo yuqoridagi misolda aytilganidek siz endi (1, 2, 3, 4, 5) ga kira olmaysiz chunki tup reference unga emas balkim yangi object (3, 4, 5, 6, 7) ga kirish uchun qaratildi.
Xuddi shu holat boshqa typedagi qiymatlar bilan ham sodir bo'ladi. Agar biror o'zgaruvchiga biror yangi qiymatni reassign qilsangiz aynan shunday jarayon sodir bo'lishini tushundingiz deb umid qilaman.
Sizdan endi mana shunday oddiy savollar so'ralsa qiynalmay javob bera olasiz degan umiddaman )
P.S: Commentda rasm bilan misol keltirilgan.
@otabekswe
tup = (1, 2, 3, 4, 5)
tup = (3, 4, 5, 6, 7)
biror o'zgaruvchiga yangi qiymatni reassign qilganingizda nima sodir bo'lishini bilasizmi?
Ba'zilar bilmasligi mumkin keling o'rganamiz. Bu yerda tup o'zgaruvchisining qiymati update bo'ladi yoki o'zgarib qoladi degan fikrni unutaylik chunki unday emas.
O'zgaruvchilar shunchaki biror objectga reference xisoblanadi. Ushbu holatda esa (1, 2, 3, 4, 5) alohida object (3, 4, 5, 6, 7) alohida object.
Ularning ikkisi ham xotirada yaratiladi ammo yuqoridagi misolda aytilganidek siz endi (1, 2, 3, 4, 5) ga kira olmaysiz chunki tup reference unga emas balkim yangi object (3, 4, 5, 6, 7) ga kirish uchun qaratildi.
Xuddi shu holat boshqa typedagi qiymatlar bilan ham sodir bo'ladi. Agar biror o'zgaruvchiga biror yangi qiymatni reassign qilsangiz aynan shunday jarayon sodir bo'lishini tushundingiz deb umid qilaman.
Sizdan endi mana shunday oddiy savollar so'ralsa qiynalmay javob bera olasiz degan umiddaman )
P.S: Commentda rasm bilan misol keltirilgan.
@otabekswe
Forwarded from Otabek Nurmuhammad
Vaqt kerak
Oldinlari "vaqt" muammo edi hozir esa uni "to'g'ri sarflash".
Biz vaqtim yo'q iborasini ishlatamiz aslida esa noto'g'ri. Vaqt doim bo'lgan.
Uxlash, yeyish, dam olish, kitob o'qish, ishlash uchun topilayabdiku.
Vaqtni topishdan ko'ra to'g'ri sarflash qiyinroq muammo deb bilaman.
Instagramga ketadigan vaqtingizni o'sha ishlarga sarflang.
Vaqtingizni bekorchi o'g'irlaydigan ishlardan o'zingizni chetlating.
Doim oldinda bo'ling. Ustozingiz 1-mavzuda bo'lsa siz 3-mavzuda bo'ling.
Internet rivojlangan davrda oldinda yurish muammo emas qidirmaslik muammo.
Vaqt doim topilgan va topiladi. Ammo uni sarflash uchun qobilyat va matonat kerak.
P.S: Pul topishdan ko'ra uni sarflash muhimroq.
@otabeknurmatov_1
Oldinlari "vaqt" muammo edi hozir esa uni "to'g'ri sarflash".
Biz vaqtim yo'q iborasini ishlatamiz aslida esa noto'g'ri. Vaqt doim bo'lgan.
Uxlash, yeyish, dam olish, kitob o'qish, ishlash uchun topilayabdiku.
Vaqtni topishdan ko'ra to'g'ri sarflash qiyinroq muammo deb bilaman.
Instagramga ketadigan vaqtingizni o'sha ishlarga sarflang.
Vaqtingizni bekorchi o'g'irlaydigan ishlardan o'zingizni chetlating.
Doim oldinda bo'ling. Ustozingiz 1-mavzuda bo'lsa siz 3-mavzuda bo'ling.
Internet rivojlangan davrda oldinda yurish muammo emas qidirmaslik muammo.
Vaqt doim topilgan va topiladi. Ammo uni sarflash uchun qobilyat va matonat kerak.
P.S: Pul topishdan ko'ra uni sarflash muhimroq.
@otabeknurmatov_1
GIL
Bu mavzu haqida anchadan beri yozish niyatim bor edi va bugun shu kun keldi.
Keling GILga kirishdan oldin bazi narsalarni ko'rib chiqsak.
Thread - Bu kompyuteringiz ichida ishlaydigan ishchi. Biror ishni qilish uchun siz thread yaratasiz va unga task berasiz. U esa bajaradi.
Thread yaxshikuya ammo tasavvur qiling ikkita ishchingiz bitta ishni qilishga talashib qolsa nima qilasiz?
Bu muammo bizga "race condition"ni keltirib chiqaradi. Jaydarichasiga aytganda "Poyga"ni keltirib chiqaradi. Well shu yerda yordamga "Lock" keladi.
Lock - xojatxonaga hamma istalgan vaqt kira olmasligi uchun qulf qo'yishadiyu. Python ham huddi shu ishni qiladi. Bir nechta threadlar share qilingan resursga bir vaqtda kira olmasligi uchun lock ishlatiladi.
Moshinani bir vaqtda 2ta odam haydashini istamasangiz kerak menimcha.
Biror share qilingan resursni olaylik misol uchun o'zgaruvchi. O'zgaruvchiga kirayotgan thread avval uni "lock"ini ya'ni kalitini so'raydi.
Agar "Lock" boshqa thread tomonidan olingan bo'lsa, u o'sha thread o'z ishini tugatishini kutib turadi. Va keyin tugatishi bilan u ham o'z ishini o'sha resurs ustida bajaradi.
Yaxshi bir muammodan qutildik ammo yana bir muammo bor. Agar ikkita thread ham bir-birini resursi uchun "lock"ni kutib qolsa nima bo'ladi?
Bu muammo Deadlock deyiladi va bu butun dasturni birgalikda ishlashini cheklab qo'yadi. Buni yechish uchun "lock"lardan foydalanishda ehtiyot bo'lishimiz va boshqa threadlar resurslarni o'z vaqtida ishlatish uchun bo'shatishiga ishonch hosil qilishimiz kerak.
Garbage collector - o'z nomi bilan aytib turibdiki "musor teruvchi". U kompyuteringiz xotirasidagi anchadan buyon ishlatilmayotgan ma'lumotlarni musor deb o'ylab yig'ib ketadi. Ya'ni o'sha musor ma'lumotlarni o'chiradi.
Ammo ba'zan u thread ishlatayotgan ma'lumotni tasodifan musor deb o'ylab olib ketishi mumkin. Buni oldini olish uchun thread ma'lumotdan foydalanayotgan vaqtda, garbage collector ishlamasligini taminlash kerak.
GIL - Global Interpreter Lock. Bu xuddi gaichi akalarga o'xshaydi. Ubu joyda tekshiruv bo'lganda moshinalarni bitta-bitta o'tqazganidek ular ham threadlarni bitta-bitta ishlashini taminlaydi.
Python dasturlash tilini xotira menejmenti thread-safe emasligi uchun ular tunu kun ishlashadi. Ya'ni birdan ikkita moshina kirib ketib qolsa avaria yuzaga keladi deyayabman.
Bu akalarni o'z ishini yaxshi bajarganidan har bir thread o'z navbatini kelishini kutadi.
Demak qisqacha shular edi. Postda xatolar bo'lishi mumkin, yordam uchun comment tayyor.
Foydali bo'lsa share qilib qo'ying.
@otabekswe
Bu mavzu haqida anchadan beri yozish niyatim bor edi va bugun shu kun keldi.
Keling GILga kirishdan oldin bazi narsalarni ko'rib chiqsak.
Thread - Bu kompyuteringiz ichida ishlaydigan ishchi. Biror ishni qilish uchun siz thread yaratasiz va unga task berasiz. U esa bajaradi.
Thread yaxshikuya ammo tasavvur qiling ikkita ishchingiz bitta ishni qilishga talashib qolsa nima qilasiz?
Bu muammo bizga "race condition"ni keltirib chiqaradi. Jaydarichasiga aytganda "Poyga"ni keltirib chiqaradi. Well shu yerda yordamga "Lock" keladi.
Lock - xojatxonaga hamma istalgan vaqt kira olmasligi uchun qulf qo'yishadiyu. Python ham huddi shu ishni qiladi. Bir nechta threadlar share qilingan resursga bir vaqtda kira olmasligi uchun lock ishlatiladi.
Moshinani bir vaqtda 2ta odam haydashini istamasangiz kerak menimcha.
Biror share qilingan resursni olaylik misol uchun o'zgaruvchi. O'zgaruvchiga kirayotgan thread avval uni "lock"ini ya'ni kalitini so'raydi.
Agar "Lock" boshqa thread tomonidan olingan bo'lsa, u o'sha thread o'z ishini tugatishini kutib turadi. Va keyin tugatishi bilan u ham o'z ishini o'sha resurs ustida bajaradi.
Yaxshi bir muammodan qutildik ammo yana bir muammo bor. Agar ikkita thread ham bir-birini resursi uchun "lock"ni kutib qolsa nima bo'ladi?
Bu muammo Deadlock deyiladi va bu butun dasturni birgalikda ishlashini cheklab qo'yadi. Buni yechish uchun "lock"lardan foydalanishda ehtiyot bo'lishimiz va boshqa threadlar resurslarni o'z vaqtida ishlatish uchun bo'shatishiga ishonch hosil qilishimiz kerak.
Garbage collector - o'z nomi bilan aytib turibdiki "musor teruvchi". U kompyuteringiz xotirasidagi anchadan buyon ishlatilmayotgan ma'lumotlarni musor deb o'ylab yig'ib ketadi. Ya'ni o'sha musor ma'lumotlarni o'chiradi.
Ammo ba'zan u thread ishlatayotgan ma'lumotni tasodifan musor deb o'ylab olib ketishi mumkin. Buni oldini olish uchun thread ma'lumotdan foydalanayotgan vaqtda, garbage collector ishlamasligini taminlash kerak.
GIL - Global Interpreter Lock. Bu xuddi gaichi akalarga o'xshaydi. Ubu joyda tekshiruv bo'lganda moshinalarni bitta-bitta o'tqazganidek ular ham threadlarni bitta-bitta ishlashini taminlaydi.
Python dasturlash tilini xotira menejmenti thread-safe emasligi uchun ular tunu kun ishlashadi. Ya'ni birdan ikkita moshina kirib ketib qolsa avaria yuzaga keladi deyayabman.
Bu akalarni o'z ishini yaxshi bajarganidan har bir thread o'z navbatini kelishini kutadi.
Demak qisqacha shular edi. Postda xatolar bo'lishi mumkin, yordam uchun comment tayyor.
Foydali bo'lsa share qilib qo'ying.
@otabekswe
Jahongir aka bilan bo'lgan o'sha "Oldik" men bilan ham bo'lgan.
Bu tasodif menimcha. Ammo bu narsa kursdoshlar bilan ancha qiziq bo'lgan.
Chet ellik do'stlar va hamkasblar bilan bo'ladigan voqealar juda qiziq bo'ladida.
Oldik 😅
Bu tasodif menimcha. Ammo bu narsa kursdoshlar bilan ancha qiziq bo'lgan.
Chet ellik do'stlar va hamkasblar bilan bo'ladigan voqealar juda qiziq bo'ladida.
Oldik 😅