Направио сам апликацију која алгоритме учења и структуре података чини забавнијим

Ја сам самоуки програмер. То значи да се стално бавим синдромом самозванца. Необично је да се осећам као да сам неадекватан и у неповољном положају због схватања сложених концепата рачунарства.

Никад нисам био добар у математици. А ја сам увек везао јаке математичке вештине за нечију природну способност да се истакнем у програмирању. Осећам да морам да радим више од других (који имају урођене вештине из математике) да бих научио исте појмове. Са овом идејом укорењеном дубоко у мом мозгу, био сам прилично сигуран да никада нећу моћи научити ствари попут преласка бинарних стабала претраживања и како ментално рашчланити рекурзивне ноћне море попут Мергесорта.

Иако сам уз мало труда успео да изненадим себе. Тако сам желео да поделим мало о томе и опипљивим резултатима мојих напора. Као и увек, са надом да ће можда бити неких сарадника који су спремни да се укључе!

Уђите у ЦС-Плаигроунд-Реацт, једноставно ЈаваСцрипт окружење у прегледачу за учење и вежбање алгоритама и структура података.

Ова апликација за припрему за интервју без пријављивања аутоматски штеди ваш напредак, нуди решења за заглављивање и пуна је веза до корисних чланака, водича и других ресурса који ће вам учинити путовање много мање болним од мог. !

Дозволите ми да одмах признам да ова апликација није ништа преломно. (Знам да сте размишљали!) Постоји гомила апликација које подучавају сличне вештине и пружају вам могућност писања и покретања кода директно у вашем прегледачу.

Али ЦС Плаигроунд Реацт намерава да буде крајње минималистички и усавршава се на врло специфичном скупу тема. Осим тога, ово није требало да буде следећа велика ствар. Изградња ове апликације био је само мој начин да учење ових ствари учиним забавним. Ако на крају постане драгоцен ресурс чак и за још једну особу, тим боље.

Апликација је још увек у току и остало је још доста простора за покривање када је реч о теми и потенцијалним карактеристикама. Дакле, ако знате кул изазов или структуру података које нисам обрађивао или видите нешто што мислите да можете побољшати, не устручавајте се отворити проблем или предати захтев за повлачење. ?

Ако само желите да проверите апликацију, не читајте више - она ​​је овде уживо (доступна је и преко хттпс-а, ​​регистроваће услужног радника за кеширање ван мреже).

Ако вас занима код, не тражите даље.

Остало су све досадне ствари о томе зашто и како :-)

Зашто сам ово саградио

Моји мотиви за изградњу ове апликације били су једноставни: желео сам да учим и желео сам да учење учиним лакшим и забавнијим. Још важније је зашто сам желео да научим ове специфичне вештине.

Током протеклих 18 месеци или тако некако, могу са сигурношћу рећи да сам научио како да кодирам. Иако се још увек оклевам назвати програмером. И то није зато што не кодирам за живот (не), већ мање-више због феномена синдрома варалице на који сам раније упутио. Знам како да правим ствари, наравно. Али све до недавно, знао сам врло мало о формалној рачунарској науци.

Учећи основе ЦС-а, надао сам се да ћу не само бити сигурнији у размишљање о себи као програмеру, већ и да помогнем другима да ме виде такву.

Програми самоуки су таблета коју је технолошка индустрија последњих година лакше прогутала. Нарочито у областима попут Силицијумске долине, где су на сваком углу изникли кампови за покретање кода.

Ипак, још увек постоји велика препрека за превазилажење већине програмера који се надају да ће ући у индустрију без формалног образовања из области рачунарства.

Тако да бих помогао да умањим ударце бацхелорс оф артс, а не бацхелорс оф сциенце, кренуо сам да научим неке концепте које би студент прве или друге године ЦС могао научити. Мислио сам да ће ово употпунити неке моје практичније развојне вештине и помоћи другима да ме озбиљније схвате као програмера.

Као основну тему коју сам хтео да покријем користио сам скуп тема за које је познато да су заједнички програмским интервјуима.

Сортирање облачића, сортирање избора, сортирање уметања, сортирање обједињавања, брзо сортирање, сортирање гомиле, стогови, редови, повезане листе, хеш табеле и бинарна стабла претраживања. Пхвевф…

Био сам јако заплашен тим низом проблема и већ дуже време одлажем са њиховим решавањем.

Не желећи да прихватим пораз, напокон сам почео да копам по њима. Трагајући по упутствима, читајући сваки чланак који сам могао наћи и из дана у дан вртећи кругове збуњености око себе.

Временом су неки концепти почели да тонеју. Али било је неколико проблема:

  1. Било ми је досадно. Волим решавање проблема, али суочимо се с тим да је решавање проблема reverseLevelOrderбинарног стабла претраживања много мање забавно од решавања стварног проблема за вашу најновију апликацију.
  2. То је било јако пуно времена. Радим пуно радно време (НЕ пишем код цео дан) и моје слободно време за кодирање је изузетно драгоцено. Знао сам да ћу месеце трошити на ово и забринуо сам се да ћу изгубити контакт са својим вештинама које се више могу продати.

Све ове ЦС ствари је сјајно имати под појасом, али признајмо, најчешће се ми веб програмери ангажујемо за израду ствари. И нема превише практичне употребе већине ових концепата у свакодневном веб развоју.

За мене је учење ових концепата било понос, и нисам намеравао да одустанем. Али мој приоритет број 1 и даље је био да знам стручњак за практични веб развој.

Зато сам одлучио да спојим две идеје. Одговор је био да направим једноставну апликацију која ће ми помоћи да постигнем своје циљеве и будем добро увежбана у својим основним вештинама.

За мене је најбољи начин да научим нешто (посебно нешто суво) повезивање са нечим што волите. Дакле, док сам градио ову апликацију, аи пуцао сам, развијао сам и садржај за њу.

Сада је учење алгоа и структура података било неопходан део мог најновијег пројекта. Јер, наравно, која је сврха прављења апликације за припрему за интервју, осим ако је нећете напунити проблемима!

Сваких неколико дана учио сам нови алгоритам или структуру података. Једном кад бих га готово спустио, саставио бих ресурсе за учење и додао га у апликацију. Сада бих то могао изнова и изнова вежбати у супер једноставном радном простору који сам сам изградио. Како је то кул!?

Главна ствар је да сам узео нешто што сам дуго одгађао и пронашао начин да то учиним забавним. И сигурно, због тога сам имао већи успех у постизању својих циљева.

Направио сам ову апликацију за мене, али сам је желео да поделим са свима са разлогом. Ако чак и још једној особи ЦС-Плаигроунд-Реацт буде користан, осетићу се као да сам учинио свој део (или бар део) да вратим овој заједници.

Постоји толико пуно програмера који слободно деле своје знање и искуства и траже мало или ништа заузврат. Без такве отворене заједнице тешко би било научити самостално програмирање.

Пре десет година било је много мање могућности када је реч о самоуправном учењу. Тако да сам свакодневно захвалан што живим у информатичком добу где је толико знања тако лако доступно.

Омогућило ми је ово путовање и надам се да ће неко други налетјети на овај чланак и открити да је њихово сопствено путовање постало само мало лакше.

Тецх Стацк & Хацкс

У случају да сте заинтересовани, ову апликацију сам направио са Реацт & Реацт-Редук (иако је прва верзија била ванилин ЈС, ЦСС и ХТМЛ). Такође користи ЦодеМиррор и Реацт-Цодемиррор2 за уградњу уређивача у прегледач (НАПОМЕНА: оригинални Реацт-ЦодеМиррор се више не одржава и не игра се добро са новијим верзијама Реацт-а, зато идите и дајте Сцниро-овом репо-у звездицу на ГитХуб-у за одабир горе лабаво!).

Моцк цонсоле

Мало хаковања ми омогућава да покренем редук акцију сваки пут када корисник позове console.logсвој код. На тај начин могу да снимим евидентиране поруке и заузврат се подсмевам конзоли у прегледачу како бих приказао излаз кода - за шта сам мислио да је кул! Можете покренути clearConsole()било када желите да обришете поруке лажне конзоле.

Постојани код

Желео сам да ову апликацију учиним супер једноставном за употребу. Дакле, уместо да имплементирам базу података и затражим од корисника да се пријаве, изабрао сам једноставнији приступ за уштеду напретка. Редук управља стањем апликације током сваке сесије, а ја користим localStorageза трајни код током сесија. Апликација преузима ово сачувано стање приликом ваше следеће посете и помоћу ње хидрира Редук продавницу. На овај начин можете наставити тамо где сте стали.

Ако из неког разлога желите да избришете сав напредак, resetState()у било ком тренутку можете да покренете програм за уређивање. Ако не желите да свој код доделите локалном складишту, оставите // DO NOT SAVEкоментар у свом коду пре него што одете . Ово ће спречити чување било ког кода, не само за ту датотеку.

Као додатну напомену, испоставило се да постоји пакет који то чини за вас, под називом Редук-Персист (што сам сазнао након чињенице). Али за једноставан случај употребе, ако можете да урадите нешто са неколико редова кода или инсталирате НПМ пакет да бисте урадили исту ствар? Сваки пут ћу одабрати прво. Шансе су да штедите стотине редова кода и потпуно нови сет зависности. То је увек давање и узимање и морате одлучити када је високо оптимизовано решење (али веће тежине) боље од вашег поједностављеног.

Променљива окна

Последњи трик који сам имао у рукаву био је да радни простор учиним флексибилним и лаким за употребу. Желео сам да дам корисницима могућност да промене величину и уређивача и конзоле, па сам користио малу скрипту коју сам пронашао под називом simpleDrag.jsРеацт refsи магију флекбок-а како бих то омогућио.

Хвала на читању и срећно хаковање!