Jahongir akaning mana bu postini o'qib bir holat esimga tushdi. Qisqasi, eskiroq bir servisimizning funksionalligini o'zgartirmagan holda qayta yozib chiqishimiz kerak edi. Yaxshiki, bu servis uchun anchagina testlar yozilgan ekan. Codebaseni boshqa tilga o'tkazmayotganimiz uchun servis funksionalligini tekshirish osonroq bo'lishi kerak: eski servisdagi testlar refactoringdan keyin ham yaxshi o'tsa, demak servis to'g'ri ishlayapti.
Aniqrog'i, boshida shunday o'ylagandik. Lekin keyin savol tug'ildi: aslida funksionallik o'zgarib, lekin testlardan baribir o'tsachi? Ya'ni bizdagi testcaselar kichkina o'zgarishni ham seza oladigan darajada aniqmi? Masalan, bir koddagi
Odatda, dasturchilar kodni test qilishadi. Lekin biz oldin testlarning o'zini test qilishimiz kerak edi. Biroz izlanganimizdan keyin bir jamoadoshimiz mutation test haqida gapirib qoldi (shunday test turi borligini o'sha vaqt bildim). Mutation test bu kodda kichkina o'zgarish (mutation)lar qilib, yozilgan testcaselardan qayta-qayta o'tkazish. Bundan maqsad kodni emas, testcaselarning o'zini tekshirish. Agar testlar yaxshi yozilgan bo'lsa, kod funksionalligi ozgina o'zgarganda ham qaysidir testcase fail bo'lishi kerak. O'zgartirilgan (mutant) kod hamma testlardan o'ta olsa mutation test fail bo'ladi. Dasturchilar natijani analiz qilib, testcaselarni o'zgartirishi, yangi testcase yozishi yoki shunchaki hech narsa qilmasligi mumkin.
Oldik☕️
Aniqrog'i, boshida shunday o'ylagandik. Lekin keyin savol tug'ildi: aslida funksionallik o'zgarib, lekin testlardan baribir o'tsachi? Ya'ni bizdagi testcaselar kichkina o'zgarishni ham seza oladigan darajada aniqmi? Masalan, bir koddagi
if a < b
joyi refactoringda if a <= b
ga o'zgarib ketsa testlarimiz bu o'zgarish sabab fail bo'ladimi yoki o'tkazib yuboradimi?Odatda, dasturchilar kodni test qilishadi. Lekin biz oldin testlarning o'zini test qilishimiz kerak edi. Biroz izlanganimizdan keyin bir jamoadoshimiz mutation test haqida gapirib qoldi (shunday test turi borligini o'sha vaqt bildim). Mutation test bu kodda kichkina o'zgarish (mutation)lar qilib, yozilgan testcaselardan qayta-qayta o'tkazish. Bundan maqsad kodni emas, testcaselarning o'zini tekshirish. Agar testlar yaxshi yozilgan bo'lsa, kod funksionalligi ozgina o'zgarganda ham qaysidir testcase fail bo'lishi kerak. O'zgartirilgan (mutant) kod hamma testlardan o'ta olsa mutation test fail bo'ladi. Dasturchilar natijani analiz qilib, testcaselarni o'zgartirishi, yangi testcase yozishi yoki shunchaki hech narsa qilmasligi mumkin.
Oldik☕️
👍34👎1
Xalq dengizdir, xalq to‘lqindir, xalq kuchdir,
Xalq botnetdir, xalq DDoSdir...
P.S. my.uzbmb.uz sog' bo'lasila✋
Xalq botnetdir, xalq DDoSdir...
P.S. my.uzbmb.uz sog' bo'lasila✋
😁46👍6
Engineering Notes
Xalq dengizdir, xalq to‘lqindir, xalq kuchdir, Xalq botnetdir, xalq DDoSdir... P.S. my.uzbmb.uz sog' bo'lasila✋
Webpage server-side render bo'layapti. O'zi shundoq ham serverda resurs yetmasligini bilib turib yana ortiqcha load qo'shish. Juda qiziq tanlov.
😁12👍1
Yaqinda bir dasturchi bilan gaplashib qoldim. Aytishicha, yaqinda hamma narsa cloudga o'tib ketar ekan. Natijada DevOps, System Engineer va hokazolarga umuman ish qolmas ekan. Xo'sh, o'sha cloudlarni kim qurib, maintain qiladi desam javob bera olmadi. Tushuntirishga harakat qildim, menimcha foydasi bo'lmadi. Sohani chuqurroq o'rganishga yana bir motivatsiya.
👍39🍾7😁3
Kod yoki dokumentatsiya yozishda ba'zida ozgina hazil (a sense of humor) qo'shishga qanday qaraysiz? (Kommentda ustozlarning fikrini kutamiz)
Anonymous Poll
23%
Qo'shilmayman, bu noprofessionallik
57%
Qo'shilaman, dasturchiyam odam
20%
Menga F (farqi yo'q), natijani ko'rmoqchiman
👍6
Shu paytgacha Javaning file(fayl)lar bilan ishlash usulini unchalik yoqtirmas edim. Yaqinda Pythonda yozilgan codebase ustida ishlashimga to'g'ri keldi. OOP paradigmda yozilgan, kod sifati ham ancha yaxshi.
Faqat file system bilan ishlash uchun hech qanday custom layer yozilmagan, Pythonda standard qanday bo'lsa shunday ishlatilgan.
Python filesystem bilan ko'proq functional styleda ishlagani uchun shu narsa kodning qolgan qismidan ajralib qolgan va ba'zi muammolarni keltirib chiqargan. Dasturning kattagina qismi file system bilan ishlashi sababli Pythonda filelar bilan object-oriented styleda ishlash imkonini beradigan "wrapper" yozishga qaror qildim.
Idealarni cheklamaslik uchun internetdan izlab ko'rishdan oldin biroz "brainstorm" qildim. Ikkita alohida-alohida ideani analiz qilib ko'rdim. Keyin ikkalasining yaxshi tomonlarini birlashtirishga harakat qilib ko'rdim. Boshida e'tibor bermagan ekanman, 1 soatlardan keyin qaytib kelib chizilgan designga qarasam Javaga ancha o'xshab qolibdi. Shular bir narsani bilsa kerak deb implement qilib ko'rdim. Yaxshi ishlayapti.
Javachilar uchun oldik ☕️
Faqat file system bilan ishlash uchun hech qanday custom layer yozilmagan, Pythonda standard qanday bo'lsa shunday ishlatilgan.
Python filesystem bilan ko'proq functional styleda ishlagani uchun shu narsa kodning qolgan qismidan ajralib qolgan va ba'zi muammolarni keltirib chiqargan. Dasturning kattagina qismi file system bilan ishlashi sababli Pythonda filelar bilan object-oriented styleda ishlash imkonini beradigan "wrapper" yozishga qaror qildim.
Idealarni cheklamaslik uchun internetdan izlab ko'rishdan oldin biroz "brainstorm" qildim. Ikkita alohida-alohida ideani analiz qilib ko'rdim. Keyin ikkalasining yaxshi tomonlarini birlashtirishga harakat qilib ko'rdim. Boshida e'tibor bermagan ekanman, 1 soatlardan keyin qaytib kelib chizilgan designga qarasam Javaga ancha o'xshab qolibdi. Shular bir narsani bilsa kerak deb implement qilib ko'rdim. Yaxshi ishlayapti.
Javachilar uchun oldik ☕️
👍29🍾8
Forwarded from Aleph Nought
Ish joyi kerak:
👨💼 Xodim: Muhammadxon Najimov
🕑 Yosh: 28
📚 Texnologiya: Javascript, Webgl, Wasm (Rust)
🇺🇿 Telegram: @Mathammed
🌐 Hudud: Toshkent Shahar
💰 Narxi: $3000 (minimum)
👨🏻💻 Kasbi: Computer Graphics Developer (Junior)
🕰 Murojaat qilish vaqti: 11:00 - 02:00
🔎 Maqsad: Pul, juda ko'p pul, commercial experience, networking
PS: Saidolim aka rozi bo'ling, UstozShogird botingizni shablonidan foydalandim). Tushunishimcha moderatordan o'tmadi. Shunga shu yerda share qilayapman.
PS: post fake emas
👨💼 Xodim: Muhammadxon Najimov
🕑 Yosh: 28
📚 Texnologiya: Javascript, Webgl, Wasm (Rust)
🇺🇿 Telegram: @Mathammed
🌐 Hudud: Toshkent Shahar
💰 Narxi: $3000 (minimum)
👨🏻💻 Kasbi: Computer Graphics Developer (Junior)
🕰 Murojaat qilish vaqti: 11:00 - 02:00
🔎 Maqsad: Pul, juda ko'p pul, commercial experience, networking
PS: Saidolim aka rozi bo'ling, UstozShogird botingizni shablonidan foydalandim). Tushunishimcha moderatordan o'tmadi. Shunga shu yerda share qilayapman.
PS: post fake emas
👍11
Aytgancha, o'zim ham ish izlayapman. Iloji boricha systems engineering sohasida yoki software qualityga rostdan yaxshi e'tibor qaratiladigan kompaniyada backend engineer sifatida.
👍17
Programming paradigmlar haqida ko'proq o'qiganim sari har birining g'oyasini, o'rnini va paydo bo'lishiga sabab bo'lgan muammolarni yaxshiroq tushuna boshlayapman.
👍14
Engineering Notes
Programming paradigmlar haqida ko'proq o'qiganim sari har birining g'oyasini, o'rnini va paydo bo'lishiga sabab bo'lgan muammolarni yaxshiroq tushuna boshlayapman.
Yana bir gap. Shu paytgacha functional programming va procedural programmingni bir-biriga yaqin, hatto ikkalasi bir xil deb yozgan resurslarni ham ko'rdim. Shunchaki aytib qo'ymoqchiman, bu ikkalasi bir-biridan butunlay farq qiladigan paradigmlar.
👍14
Hozirgi ko'pchilik dasturchilar hatto oddiygina fayllarga har xil uzunlikdagi nom bera olish imkoniyatini qo'shish uchun vaqtida OS designerlar qancha mehnat qilganini bilishganida dasturlashni va yoshi katta dasturchilarni boshqacha hurmat qilishgan bo'lardi menimcha.
👍36😁3👎2
Kimdir Canonical(Ubuntuni support qiladigan kompaniya)ga ishga topshirmoqchi bo'lsa avval ichkaridagi hiring process haqida internetdagi fikrlarni o'qib ko'rishni tavsiya qilaman. Boshida o'qib ko'rib bular kompaniyaning haterlari bo'lsa kerak deb ishonmagandim. O'zim shu processdan o'tgandan keyin ishondim.
Recruitment process o'ta ko'p vaqt talab qiladi va yozuv-chizuv byurokratiyaga to'la. Offergacha o'rtacha 3 ta assesment (kamida to'liq 2-3 kun oladi) va 8-9 ta(!) interviewdan o'tish kerak bo'lar ekan. Shularning orasida IQga o'xshash test, reaction test, va 5000 ta so'zdan iborat o'zingiz haqingizda "essay" ham bor. Bir interviewer o'zida hiring process 4 oyga yaqin davom etganini aytgandi.
Recruiting team o'ta disrespectful. Faqat menda shundaymi desam yo'q, ko'pchilikda bo'lgan ekan. Hatto offer olganlar ham buni ochiqchasiga yozgan. Eng yomoni, bir dunyo tasklar va interviewlardan yaxshi o'tib rejection olganimdan keyin batafsil feedback so'raganimda 2 qatorli automated email oldim.
Bilmadim, kirgandan keyin ishlash muhiti yaxshiroq deyishayapti, lekin hiring process juda sifatsiz ekan.
P.S. Muammo Canonicaldami yo o'zi katta tech kompaniyalarda shunday ishlashadimi?
Recruitment process o'ta ko'p vaqt talab qiladi va yozuv-chizuv byurokratiyaga to'la. Offergacha o'rtacha 3 ta assesment (kamida to'liq 2-3 kun oladi) va 8-9 ta(!) interviewdan o'tish kerak bo'lar ekan. Shularning orasida IQga o'xshash test, reaction test, va 5000 ta so'zdan iborat o'zingiz haqingizda "essay" ham bor. Bir interviewer o'zida hiring process 4 oyga yaqin davom etganini aytgandi.
Recruiting team o'ta disrespectful. Faqat menda shundaymi desam yo'q, ko'pchilikda bo'lgan ekan. Hatto offer olganlar ham buni ochiqchasiga yozgan. Eng yomoni, bir dunyo tasklar va interviewlardan yaxshi o'tib rejection olganimdan keyin batafsil feedback so'raganimda 2 qatorli automated email oldim.
Bilmadim, kirgandan keyin ishlash muhiti yaxshiroq deyishayapti, lekin hiring process juda sifatsiz ekan.
P.S. Muammo Canonicaldami yo o'zi katta tech kompaniyalarda shunday ishlashadimi?
😢14👍5
Qiymat qaytarishi kerak bo'lgan (non-void) funksiya kutilmagan natijaga uchraganini bildirish uchun odatda qaysi usulni qo'llaysiz?
Anonymous Poll
34%
Null qiymat qaytarish
66%
Exception hosil qilish
👍2
Engineering Notes
Qiymat qaytarishi kerak bo'lgan (non-void) funksiya kutilmagan natijaga uchraganini bildirish uchun odatda qaysi usulni qo'llaysiz?
Savolni aniqroq qilish uchun Django ORMdagi berilgan filterlar bo'yicha 1 ta object (DB record) olishning 2 xil usulini misol keltiraman. Birinchi usulda agar object mavjud bo'lmasa exception chiqaradi va caller buni handle qilishi kerak. Ikkinchi usulda agar object mavjud bo'lmasa shunchaki None (null) qiymati qaytariladi.
👍12
Forwarded from Saidolim Djuraev
Avvallari video darslar kam bo`lgan. Odamlar kitob o`qigan.
Kitob o`qishning foydasi, miyyada o`qiyotgan narsan odam tasavvur qiladi. Miyyada biror strukturaga kelishni boshlidi.
Video darsda esa, shu struktura ko`rsatib beriladi. Va bu struktura muallifning o`zi his qila olgan strukturasi. Sizniki emas.
Masalan, biror kinoni olaylik. U yerda effektlar va qizziq jarayonlar bilan bitta scenariyni ko`tsatishadi. Bittagina yo`l. Shu yo`lni turlicha usullar bilan yoritishadi. Lekin yo`l bitta.
Kitobda shu kinoni o`qib chiqsangiz, siz har bir yo`lni o`ziz qarab chiqasiz. Sizga qulay bo`lgan yo`l bilan yurib, jarayonlardan o`tasi. Bu esa sizning miyyangizda bu narsa shakllanishiga va saqlanishiga yordam beradi.
Oddiy misol. Uyni tasavvur qiling. Shiftida (potolok) nima bor? Eshigini rangi qanaqa?
Endi javob bering, nima uchun eshik tangini qizil demadingiz? Nima uchun shiftda turgan faner bo`yalgan?
Siz hozir tasavvur qilishga hayotdan ko`rgan uyingizdan kelib chiqib fikrladingiz. O`z uyingiz, o`rtog`ingiz uyi, siz qurmoqchi bo`ldan uy. Lekin siz tanimagan Said akani uylarini tasavvur qilmadingiz. Chunki uni uyini ko`rmagansiz-da.
Kitobda agar uyning ichi muhim bo`lmasa, uy deb etib ketiladi va siz o`z uyingizga moslab eslab qolasiz. Qayerdan odam kirdi, shkaf qayerda edi, oson eslab qolasiz. Agar kinoda ko`rsangiz va sizning uyingiz unga mos kelmasa, ertaga esizda ham bo`lmaydi.
Bilim ham shunday. Ilmni o`qishda miyyada shakllantira olsangiz va saqlay olsangiz bilim bo`ladi. 2 + 2 = ? deganda, kimdur cho`plarni o`ylidi, kimdur olmalarda sanaydi, kimdur tosh bilan, kimdur esa pizza bilan sanab 4 deydi.
Masala 2 ning shakli emas, qiymatida.
Shuning uchun kitob o`qish kerak....
Kitob o`qishning foydasi, miyyada o`qiyotgan narsan odam tasavvur qiladi. Miyyada biror strukturaga kelishni boshlidi.
Video darsda esa, shu struktura ko`rsatib beriladi. Va bu struktura muallifning o`zi his qila olgan strukturasi. Sizniki emas.
Masalan, biror kinoni olaylik. U yerda effektlar va qizziq jarayonlar bilan bitta scenariyni ko`tsatishadi. Bittagina yo`l. Shu yo`lni turlicha usullar bilan yoritishadi. Lekin yo`l bitta.
Kitobda shu kinoni o`qib chiqsangiz, siz har bir yo`lni o`ziz qarab chiqasiz. Sizga qulay bo`lgan yo`l bilan yurib, jarayonlardan o`tasi. Bu esa sizning miyyangizda bu narsa shakllanishiga va saqlanishiga yordam beradi.
Oddiy misol. Uyni tasavvur qiling. Shiftida (potolok) nima bor? Eshigini rangi qanaqa?
Endi javob bering, nima uchun eshik tangini qizil demadingiz? Nima uchun shiftda turgan faner bo`yalgan?
Siz hozir tasavvur qilishga hayotdan ko`rgan uyingizdan kelib chiqib fikrladingiz. O`z uyingiz, o`rtog`ingiz uyi, siz qurmoqchi bo`ldan uy. Lekin siz tanimagan Said akani uylarini tasavvur qilmadingiz. Chunki uni uyini ko`rmagansiz-da.
Kitobda agar uyning ichi muhim bo`lmasa, uy deb etib ketiladi va siz o`z uyingizga moslab eslab qolasiz. Qayerdan odam kirdi, shkaf qayerda edi, oson eslab qolasiz. Agar kinoda ko`rsangiz va sizning uyingiz unga mos kelmasa, ertaga esizda ham bo`lmaydi.
Bilim ham shunday. Ilmni o`qishda miyyada shakllantira olsangiz va saqlay olsangiz bilim bo`ladi. 2 + 2 = ? deganda, kimdur cho`plarni o`ylidi, kimdur olmalarda sanaydi, kimdur tosh bilan, kimdur esa pizza bilan sanab 4 deydi.
Masala 2 ning shakli emas, qiymatida.
Shuning uchun kitob o`qish kerak....
👍45