Men o'rganish algoritmlari va ma'lumotlar tuzilmalarini yanada qiziqarli qiladigan dastur yaratdim

CS-o'yin maydonchasi-reaktsiya interfeysi

Men o'zim o'rgatgan dasturchiman. Bu men doimiy ravishda firibgarlik sindromi bilan shug'ullanaman. O'zimni nomaqbul his etayotganim va kompyuter fanlari bo'yicha murakkab tushunchalarni anglamasligim odatiy holdir.

Men hech qachon matematikani yaxshi bilmaganman. Men har doim matematik mahoratni tabiiy ravishda dasturlashda ustun bo'lish qobiliyatiga bog'laganman. Men xuddi shu tushunchalarni o'rganish uchun boshqalarga qaraganda (matematikada tug'ma qobiliyatga ega) ko'proq ishlashim kerakligini his qilaman. Miyamga singib ketgan bu g'oya tufayli men hech qachon ikkilik qidirish daraxtlarini kesib o'tish va Mergesort singari rekursiv kabuslarni aqliy tahlil qilishni o'rgana olmasligimga amin edim.

Bir oz kuch sarflagan bo'lsam ham, o'zimni hayratda qoldirishga muvaffaq bo'ldim. Shunday qilib, men qanday qilib va ​​harakatlarimning aniq natijalari haqida bir oz gapirib bermoqchiman. Har doimgidek, u erga kirishga tayyor bo'lganlar bo'lishi mumkin degan umidda!

CS-Playground-React, algoritmlar va ma'lumotlar tuzilmalarini o'rganish va amalda qo'llash uchun oddiy brauzer ichida JavaScript muhitini kiriting.

Ro'yhatdan o'tmagan intervyu tayyorlovchi ilova sizning muvaffaqiyatingizni avtomatik ravishda tejashga yordam beradi, qotib qolganingizda echimlarni taklif qiladi va sizning sayohatingizga nisbatan ozroq og'riqli bo'lishiga yordam beradigan foydali maqolalar, darsliklar va boshqa manbalarga havolalar bilan ta'minlaydi. !

Ushbu ilova hech qanday asossiz emasligini ochiqchasiga tan olaman. (Men siz buni o'ylaganingizni bilaman!) U erda bir nechta ilovalar mavjud bo'lib, ular sizga shu kabi ko'nikmalarni o'rgatadi va brauzeringizda kod yozish va ishlatish qobiliyatini beradi.

Ammo CS Playground React juda minimalizmga intiladi va juda aniq mavzularda suhbat quradi. Bundan tashqari, bu keyingi katta narsa bo'lishi kerak emas. Ushbu ilovani yaratish men uchun bu narsalarni qiziqarli qilishni o'rganishimning yagona usuli edi. Agar u yo'lda hatto bir kishi uchun qimmatli manba bo'lib qolsa, yaxshi bo'ladi.

Ilova hanuzgacha ishlamoqda va mavzu va potentsial xususiyatlar haqida gap ketganda ko'p joy qoldirilishi kerak. Shunday qilib, agar siz men qamrab olmagan ajoyib vazifani yoki ma'lumotlarning tuzilishini bilsangiz yoki o'zingiz yaxshilash mumkin deb o'ylagan narsangizni ko'rsangiz, muammoni ochishdan yoki iltimos qilishdan qo'rqmang.

Agar siz shunchaki ilovani tekshirishni istasangiz, boshqa o'qimang - bu erda jonli efir (shuningdek, https orqali mavjud, xizmatni ishchini oflayn keshlash uchun ro'yxatdan o'tkazadi).

Agar kod sizni qiziqtirsa, boshqa qaramang.

Qolganlari - nima uchun va qanday qilib :-) haqida barcha zerikarli narsalar.

Buni nega qurdim

Ushbu ilovani yaratishga bo'lgan harakatlarim sodda edi: men o'rganishni xohlardim va o'rganishni oson va qiziqarli qilishni xohlardim. Eng muhimi shundaki, men ushbu o'ziga xos ko'nikmalarni o'rganishni istadim.

O'tgan 18 oy yoki undan ko'proq vaqt ichida ishonch bilan ayta olamanki, men kodlashni o'rgandim. Garchi hanuzgacha o'zimni dasturchi deb atashdan qo'rqsam ham. Va bu men yashash uchun kodni kiritmagani uchun emas (emas), lekin men ilgari aytib o'tgan aldamchi sindrom hodisasi tufayli. Men qanday qilib qurilishni bilaman, aniq. Ammo yaqin vaqtgacha men rasmiy Informatika haqida juda kam ma'lumotga ega edim.

CS asoslarini o'rganib, men nafaqat o'zimni dasturchi sifatida tasavvur qilishda o'zimni ko'proq ishonibgina qolmay, boshqalarga ham menga shunday qarashda yordam berishga umid qilaman.

O'z-o'zini o'rgatadigan dasturchilar - bu so'nggi yillarda texnologiya sohasi yutishni osonlashtiradigan tabletka. Ayniqsa, Silikon vodiysi kabi joylarda, ko'chalarning har bir burchagida kodlash dastgohlari paydo bo'lgan.

Rasmiy kompyuter bilimisiz ushbu sohaga kirishni umid qilayotgan ko'pchilik dasturchilar uchun hali ham katta to'siq mavjud.

Shunday qilib, fan bakalavriga emas, balki san'at bakalavriga ega bo'lish zarbasini kamaytirish uchun men o'zimga birinchi yoki ikkinchi kurs CS talabasi o'rganishi mumkin bo'lgan ba'zi tushunchalarni o'rgatishni maqsad qildim. Bu mening ko'proq amaliy rivojlanish ko'nikmalarimni to'ldiradi va boshqalarga meni dasturchi sifatida jiddiy qabul qilishga yordam beradi deb o'yladim.

Men dasturlash uchun odatiy bo'lgan ma'lum mavzular to'plamidan foydalanganman.

Pufakchalarni saralash, saralash, qo'shib taqsimlash, saralash, tez saralash, to'plangan saralash, ustunlar, navbatlar, bog'langan ro'yxatlar, xesh jadvallar va ikkitomonlama qidirish daraxtlari. Qurilma ...

Men muammolarning bunday tarkibidan juda qo'rqib ketdim va bir muncha vaqt ularni echishga harakat qilardim.

Mag'lubiyatni qabul qilishni xohlamay, oxir-oqibat qazishni boshladim. Darsliklarni kuzatib boraman, topa oladigan har bir maqolamni o'qib chiqaman va kundan-kunga o'zimning atrofimdagi tartibsizliklarga duch kelaman.

Vaqt o'tishi bilan ba'zi tushunchalar paydo bo'la boshladi. Ammo bir nechta muammolar paydo bo'ldi:

  1. Men zerikdim. Men muammoni hal qilishni yaxshi ko'raman, lekin shuni tan olaylik, teskari qidiruv daraxtini teskari tartibda hal qilish, eng so'nggi ilovangiz uchun haqiqiy muammolarni hal qilishdan ko'ra, kamroq bo'ladi.
  2. Bu juda ko'p vaqt talab qildi. Men to'liq ishlayman (kun bo'yi kod yozmayman) va bo'sh vaqtim juda qimmatlidir. Bunga bir necha oy sarflashimni bilardim va ko'proq bozor qobiliyatlari bilan aloqani yo'qotib qo'yishdan qo'rqardim.

Bularning barchasi sizning kamaringiz ostida bo'lishi juda yaxshi, lekin shuni tan olaylik, aksariyat hollarda biz veb-ishlab chiqaruvchilarimiz narsalarni qurish uchun yollaymiz. Va har kuni veb-ishlab chiqishda ushbu kontseptsiyalarning ko'pi uchun amaliy maqsadlar juda ko'p emas.

Men uchun bu tushunchalarni o'rganish mag'rurlik edi va men taslim bo'lmoqchi emas edim. Ammo mening birinchi raqamli ustuvorligim shu bilan birga amaliy veb-ishlab chiqarishni yaxshi bilish edi.

Shuning uchun men bu ikki g'oyani birlashtirishga qaror qildim. Javob: mening maqsadlarimga erishishga yordam beradigan va asosiy ko'nikmalarimni yaxshi o'zlashtirishga yordam beradigan oddiy dasturni yaratish edi.

Men uchun biror narsani (ayniqsa, quruq narsa) o'rganishning eng yaxshi usuli bu uni sevgan narsangiz bilan bog'lashdir. Shunday qilib, men ushbu ilovani yaratayotgan edim va uni amalga oshirayotib, men ham uning tarkibini ishlab chiqardim.

Endi algos va ma'lumotlar tuzilmalarini o'rganish mening so'nggi loyihamning ajralmas qismi edi. Albatta, agar siz uni muammolar bilan to'ldirmoqchi bo'lsangiz, intervyu tayyorlov dasturini tuzishdan nima foyda!

Har bir necha kun ichida men yangi algoritm yoki ma'lumotlar tuzilishini o'rganardim. Men deyarli uni yo'q qilgandan so'ng, men o'quv manbalarini tuzib, uni ilovaga qo'shib qo'yardim. Endi, men buni o'zim qurgan juda oddiy ish maydonida qayta-qayta mashq qilishim mumkin edi. Qanday ajoyib !?

Algos va ma'lumotlarni tuzish qanday ishlashini ingl. Bu Quicksort o'z elementini 100 ta elementlar qatorida bajaradi. Vizualizatsiyaning to'liq ro'yxatini bu erda topishingiz mumkin. USFga rahmat, bu juda zo'r!

Asosiysi, men uzoq vaqtdan beri tashlab qo'ygan narsamni oldim va uni kulgili qilish uchun yo'l topdim. Va shunga qaramay, maqsadlarimga erishishda ko'proq muvaffaqiyatlarga erishdim.

Men ushbu ilovani o'zim uchun yaratganman, lekin buni biron bir sabab bilan sizlar bilan baham ko'rmoqchi edim. Agar yana bir kishi CS-Playground-React-ni foydali deb bilsa, men o'z hissamni (yoki hech bo'lmaganda) bu jamoaga qaytarib bergandek his qilaman.

U erda juda ko'p dasturchilar bor, ular o'z bilimlari va tajribalarini bemalol baham ko'radilar va buning evaziga hech narsa yoki hech narsa so'ramaydilar. Bunday ochiq fikrli hamjamiyatsiz, o'zingizning kodingizni o'rganib bo'lmaydi.

O'n yil oldin, o'z-o'zidan o'qishga kelganda, variantlar kamroq edi. Shuning uchun har kuni juda ko'p bilimga ega bo'lgan ma'lumot asrida yashayotganimdan minnatdorman.

Bu sayohatni amalga oshirishimga imkon yaratdi va umid qilamanki, boshqa birov ushbu maqolada qoqilib, o'z sayohatlari biroz osonlashdi.

Tech Stack & Hacks

Agar qiziqsangiz, men ushbu ilovani React & React-Redux-da yaratdim (garchi birinchi versiyasi vanilya JS, CSS va HTML bo'lsa ham). Shuningdek, u tahrirlovchini brauzerga kiritish uchun CodeMirror va React-Codemirror2 dasturlaridan foydalanadi (QAYD: asl React-CodeMirror endi saqlanmaydi va React-ning yangi versiyalari bilan yaxshi ishlamaydi, shuning uchun GitHub-dagi Scniro repo-ni yulduz uchun bering. pastga!).

Soxta pulti

Kichkina hack, har safar foydalanuvchi o'zlarining kodlarida konsol.log-ga qo'ng'iroq qilganda, qayta ishga tushirishga imkon beradi. Shunday qilib, men qayd qilingan xabarlarni yozib olishim va o'z navbatida kodning chiqishini ko'rsatish uchun brauzerda konsolni masxara qilishim mumkin - men buni juda yaxshi deb o'yladim! Soxta konsol xabarlarini o'chirishni xohlagan vaqtingizda clearConsole () ni ishga tushirishingiz mumkin.

Doimiy kod

Men ushbu ilovani juda oson ishlatishni xohladim. Shunday qilib, ma'lumotlar bazasini yaratish va foydalanuvchilarga tizimga kirishni so'rashning o'rniga men taraqqiyotni saqlash uchun sodda usulni tanladim. Redux har bir sessiya davomida dastur holatini boshqaradi, va men sessiyalar davomida saqlanib turadigan mahalliyStorage-dan foydalanaman. Ilova keyingi tashrifingizda saqlangan holatni qaytaradi va Redux do'konini qayta to'ldiradi. Shu tarzda siz o'zingiz tashlab ketgan joyni tanlashingiz mumkin.

Agar biron bir sababga ko'ra barcha muvaffaqiyatlaringizni o'chirib tashlamoqchi bo'lsangiz, istalgan vaqtda muharrirda resetState () dasturini ishga tushirishingiz mumkin. Agar kodingizni mahalliy saqlash joyiga topshirishni xohlamasangiz, boshqa joyga ketishdan oldin kodingizda izoh qoldiring. Bu har qanday kodni saqlashni oldini oladi, nafaqat bu fayl uchun.

Qo'shimcha izoh sifatida, sizga Redux-Persist deb nomlangan to'plam mavjudligi ma'lum bo'ldi (men buni haqiqatdan keyin bilib oldim). Oddiy foydalanish holati uchun, agar siz bir necha kodli kod bilan biror narsa qila olsangiz yoki xuddi shu narsani amalga oshirish uchun NPM paketini o'rnatsangiz? Men har safar avvalgisini tanlayman. Siz yuzlab kod satrlarini va yangi qaramlik to'plamini saqlash imkoniyatiga egasiz. Bu har doim berish va olishdir va siz optimallashtirilgan (ammo og'irroq) echim sizning sodda echimingizdan yaxshiroq bo'lganida qaror qilishingiz kerak.

Qayta tiklanadigan panellar

Mening yengimdagi so'nggi hiyla ish maydonini moslashuvchan va ishlatish uchun qulay qilish edi. Men foydalanuvchilarga muharrirni ham, konsolni ham hajmini o'zgartirish qobiliyatini berishni xohladim, shuning uchun men buni amalga oshirish uchun simpleDrag.js, React refs va fleksbox sehr deb nomlangan kichik skriptni ishlatdim.

O'qiganingiz va baxtli xakerlik uchun rahmat!