Boshqalar

Dasturlash mashqlarining qanday afzalliklari bor?

Oxirgi paytlarda dasturlash mashqlari haqida oʻylay boshladim, chunki odamlarga koʻnikmalarni oʻrgatishni boshlamoqchi edim. Ammo dasturlash mashqlari nimasi bilan yaxshi hisoblanadi? Bu haqida Twitterʼda soʻraganimda, bir qancha foydali javoblar oldim. Quyida esa ularning baʼzilari bilan boʻlishmoqchiman...

Bu qiziqarli

Sarlavha oʻzini oʻzi tavsiflayapti va men ham aynan qiziqarlilikni muhim deb hisoblayman. Dasturlash qiziqarli jarayon, oʻrganish ham shunday. Demak, dasturlash boʻyicha mashqlar ham zerikarli boʻladi deb oʻylamayman.

Bu sizga kerakli narsani oʻrgatadi

Bu izoh mashqlar qatʼiy tarzda “ishingizga hozirning oʻzidayoq mos kelishi kerak”ligini bildirmaydi, insonlar shunchaki ishlamaydi, baʼzida biz sanʼat asarlari, turli oʻyin va qiziqarli shaxsiy loyihalar yaratishni xohlaymiz, baʼzan esa shunchaki atrofimizdagi olamni tushunishga ehtiyoj sezamiz. Shunday boʻlsa ham, bu mashqlar sizga qaysi maqsadlarda yordam berishi va qaysi sohaga aloqador ekanini bilib qoʻyish ham muhim.

Baʼzi taxminiy misollar:

  • Veb-saytdan biror surat olib, uni CSS yordamida noldan qayta yaratish (bu CSS yordamida ajoyib koʻrinishli veb-saytlar yaratish yoʻlidagi mashq boʻladi);
  • Hech qanday freymvorksiz, noldan veb-server yaratish (haqiqiy veb-server muammolarini osonroq hal qilish uchun HTTP protokolini oʻrganish maqsadida);
  • Kichikroq nur trassirovkasini yozish (keyinchalik shaderhubʼda nur trassirovkasi texnikalari yordamida ajoyib suratlar yarata olish uchun);
  • Assemblerning kichikroq qismini yozish (bu Spectre va Meltdown nima ekanini va ularning oldini olish uchun nega kompyuterlarni sekinroq ishlashga majbur qilishimizni tushunish yoʻlida ilk qadam boʻladi).

Bu qiyin

Hammada ham shundaymi, bilmadim, ammo koʻpincha dasturlash mashqlarini boshlayman-u, tezda zerikib qolaman (“Eh, buni qanday qilishni bilaman, bu zerikarli ish”, — deyman). Men uchun dasturlash mashqlari bilmaydigan narsamni oʻrgatishi va biroz murakkab boʻlishi judayam muhim sanaladi. 

Eng yoqtirgan dasturlash mashqlari toʻplamim bu – cryptopals kriptomasalalar boʻlib, ular tezda murakkablashib boradi – 6-mashqda oʻyinchoq shifrlash protokolini buzsangiz, 12-mashqqa kelib haqiqiy shifrlash protokolini buzasiz (ECB rejimidagi AES)!

Uddalaganingizni aytishingiz mumkin

Oʻta noaniq tavsiflangan mashqlarni yozish oson (“oʻyinchoq tcp stack yozing!” kabi). Ammo bu aslida nimani bildiradi? TCP stack hajmi qancha boʻlishi kerak? Test namunalari va “Barakalla! Sen buni uddalading! Tabriklayman” deya olish uchun aniq tavsifning boʻlishi juda muhim narsa.

Mashqni tez bajara olasiz

Mashqlarni 2—3 soat ichida (kechqurun, ishdan keyin) bajarish mumkin. Agar mashq chindan ham qiziqarli boʻlmasa, unga sarflash uchun 8 soat vaqt topish ham qiyin kechadi.

Yana real maʼlumotlarni (“buni 97 daqiqada noldan bajardim!” kabi) taqdim qilish ham yaxshi boʻladi deb oʻylayman.

Muallif sizga ishonadi

“Bu biroz tushunarsiz boʻlsayam juda ajoyib ekan” – Twitterʼdagi bir kishi shunday yozgandi:

“Xuddi shu kabi mashq sabr bilan yozilgan va menda uni bajara olishga ishonch bordek taassurot uygʻotdi. Avvaliga Linux HOWTO mashqlaridan koʻp narsa oʻrgandim. Baʼzi mashqlar uddalay olmaslik imkonsizdek his uygʻotardi. Shunchaki yoʻriqnomaga amal qilish kerak, bor-yoʻgʻi shu”.

Ayniqsa, yuqorida qayd etilganidek ancha qiyin mashq bajarayotgan boʻlsangiz, muallifning muvaffaqiyatingizga ishonishi ham yoqimli boʻladi (albatta, bunda mualliflar chindan toʻgʻri mashq yozishi va uni uddalay olishingiz ham muhim oʻrin tutadi).

Bu sinalgan

Yaqinda “Qadrligim: Juliya Chayldning ajoyib hayoti” biografik asarini oʻqib chiqdim va unda meni hayratga solgan narsa — bosh qahramonning “Fransuz oshxonasi sirlarini oʻrganish” kitobidagi barcha retseptlarni sinab koʻrgani boʻldi. Kitobni yozish, retseptlarni sinab koʻrish va amerikalik uy oshpazlari barcha mahsulotlarni topa olishi mumkinligiga ishonch hosil qilish ayolning yillab vaqtini oldi.

Oshpazlik kitoblarining barcha mualliflari oʻz retseptlarini sinab koʻradi va shunday qilish chindan ham pazandalik kitoblarini yaxshilaydi deb hisoblayman.

Biroz vaqt avval SQL boʻyicha mashqlar yozishni boshladim (masalan, mana bu Group BY uchun prototip kabi) va qaysidir nuqtada mashqlarimni testdan oʻtkazuvchilar yoʻqligi ishimni eng koʻp orqaga surayotganini sezib qoldim. Odamlar bu mashqlarimdan chindan nimanidir oʻrganayotgani men uchun qorongʻi edi.

Bu men uchun yangilik boʻldi, chunki blog uchun post yozganimda ularni tekshirib oʻtirmayman (hatto tahrirlamayman ham). Postlarni shunchaki yozib, eʼlon qilaman, odamlar koʻpincha ularni yoqtiradi, tamom-vassalom! Twitterʼdagi Emi Hoyga bloglardagi postlarni tekshirib oʻtirmas ekanmiz, nega mashqlarni testdan oʻtkazish kerakligini tushunmayotganimni aytdim. U esa odamlar postlardan koʻra mashqlardan koʻproq narsa kutishini qayd etdi – blog postlari orqali 1—2 ta yangi fakt oʻrganishingiz mumkin, ammo mashqlardan chindan ham yangi koʻnikmani mukammal oʻzlashtirishni kutasiz.

Bundan tashqari, odamlar mashqlar uchun ancha vaqt sarflaydi (ayniqsa dasturlash muhitini sozlash kabi nimadir qilmoqchi boʻlishganda). Shuning uchun mashqlar chindan ish berishiga ishonch hosil qilish kerak.

Toʻxtab qolmaysiz

Dasturlash mashqlarida oʻrganayotgan koʻnikmangizga bogʻliq boʻlmagan qandaydir norelevant nuqtada toʻxtab qolish juda oson. Masalan, oson yechiladigan qandaydir xatoga yoʻl qoʻyib, keyin uni yechishga koʻp vaqt sarflashingiz mumkin. Aslida, bu sizga uncha koʻp narsa oʻrgatmaydi.

Yordam olish oson

Agar murakkab mashq bajarayotgan boʻlsangiz, doʻst va hamkasblardan yoki internet yordamiga ehtiyoj sezishingiz mumkin.

Kutilgan natijaga olib bormasligi mumkin boʻlgan holatlar:

  • Doʻstlaringizdan hech biri bu mashq nimada yordam berishi mumkinligini eshitmagani uchun ham ular bilan bu haqida gaplasholmaysiz.
  • Mashqda biror dasturiy taʼminotning eng yangi versiyasidan foydalanish koʻzda tutilgan boʻlsa-yu, internetdagi barcha misollar eski versiyaga aloqador boʻlsa, mashq texnik jihatdan toʻgʻri tuzilgan boʻlsa ham yordam olish qiyin boʻladi.
  • Mashqda foydalanilgan texnologiyaga oid jamiyat xudbin, yordam bermaydigan turda boʻlishi mumkin.


Bunga erishishning yaqqol usullaridan biri – odamlarga qulay dasturlash tilidan foydalanish imkonini berish. Chunki ular, katta ehtimol bilan, shu muhitda qanday yordam izlash kerakligini biladi.

Uzoq vaqt sozlash talab qilinmaydi

Dasturiy taʼminotni oʻrnatish zerikarli ish, koʻplab dasturlash loyihalarida esa dasturiy taʼminot oʻrnatish talab qilinadi. Bu bilan bogʻliq bir qancha koʻzda tutilmagan holatlar quyidagicha (aslida bu yerdagidan ancha koʻproq) boʻlishi mumkin: 

Shu paketni kompyuterimga oʻrnatayotganimda kompilyator xatoligi chiqyapti.

Bu misolga koʻra, jarayon toʻgʻri kechishi uchun paketning muayyan versiyalari kerak boʻladi. Agar sizda ayni shu versiyalar oʻrnatilmagan boʻlsa, bir qancha sirli xatoliklar chiqadi va ularni toʻgʻrilash uchun uch soat Google bilan “doʻstlashish”ga toʻgʻri keladi.

Bunday narsalar juda koʻp vaqt oladi va kayfiyatingizga ham salbiy taʼsir oʻtkazadi. Bundan qochish ham oson ish emas. Agar kimgadir dasturiy taʼminotning oʻzini emas, uning muayyan qismini oʻrgatmoqchi boʻlsangiz, buni hal qilishda koʻrgan va foydalangan bir qancha variantlarim quyidagilardan iborat:

  • Odamlarga nima ishlashini bilishingizni ayting (bu jihatni Mac/Linuxʼda testdan oʻtkazdim, ammo Windowsʼda emas);
  • Har qanday dasturiy taʼminotni oʻrnatishdan qoching (Shunchaki Pythonʼdan foydalaning);
  • Hamma narsani ishga tushirish uchun Dockerʼdan foydalaning;
  • Barcha kodni oʻsha kishining brauzerida ishga tushiring (chunki brauzerlar ham odatda xuddi shunday qiladi);
  • Bulutli tizimdan foydalaning (shunda hammasi boshqa kompyuterda ham ishlaydi). Bular pandas pazandalik kitobim uchun qiladigan ishlarim boʻlib, bu uni Binderʼda ishga tushirish imkonini beradi (Binder Jupyter bloknotlarini joylash uchun juda ajoyib bepul servis hisoblanadi).

Buni davom ettirish oson

@tefʼda “Scratch: kompyuterda qilishingiz mumkin boʻlgan millionlab narsalar” mavzusida ajoyib maʼruza topishingiz mumkin. Unda Scratch haqida uchta asosiy gʻoya tushuntiriladi:

  • past qavatlar
  • keng devorlar
  • baland shiftlar

Nimanidir oʻrganishni boshlasangiz-u, keyinroq bu narsa bilan qilishingiz mumkin boʻlgan ishlar juda cheklanganini bilib qolish juda yomon holat. Ammo nimadir haqida bilish va “Qoyil, shuncha imkoniyatlarim bor ekan, buning oʻrniga X ni ham qilsam nima boʻlar ekan?” deyish esa yanada ishtiyoqni kuchaytiradi.

Bu juda koʻp narsani anglatadi!

Biz anglagan tushunchalar:

  • qiziqarli mashqlar;
  • sizga muhim narsani oʻrgatadi;
  • murakkabliklar tugʻdiradi;
  • muvaffaqiyatning aniq belgisini koʻrsatadi;
  • tez bajarsa boʻladi;
  • murakkab oʻrnatishlarsiz bajariladi;
  • bir nechta yashirin xatoliklar boʻladi;
  • yordam olishingiz mumkin boʻlgan texnologiyalar asosida yaratiladi;
  • oʻsishingiz uchun koʻplab yoʻnalishlar mavjud.

Bu ancha murakkab koʻrinishi mumkin, ammo intilishga arziydigan maqsad boʻla oladi! Men esa mashqlar ustida juda sekin ishlashni davom ettiraman.

Mohirdev Telegram

Telegram kanalimizga obuna bo’lishni unutmang

Obuna bo'lish
Julia Evans

Julia Evans