
Скоро проведох интервю с разработчик на JavaScript, който кандидатстваше за позиция сениор. Колега, който също беше на интервюто, помоли претендента да напише функция, която да извършва HTTP заявка и в случай на неуспех да я повтори няколко пъти.
Той пишеше код директно на дъската, затова беше достатъчно да нарисува нещо приблизително. Ако просто беше показал, че добре разбира основите, щяхме да бъдем напълно доволни. Но за съжаление, не успя да намери добро решение. Тогава, след като приписахме това на вълнението, решихме да облекчим задачата и го помолихме да направи функцията с обратни извиквания на функция, основана на промиси.
Но уви. Да, беше очевидно, че е виждал подобен код преди. Той в общи линии знаеше как работи, но не можеше да повтори общия принцип на интервюто. Вероятно беше запомнил фрагмент наизуст – не е толкова трудно:
Разработчиците смятат готовия код за самоочевиден.
В процеса на разработка постоянно се сблъскваме с воспроизводими материали. Пренасяме фрагменти от код, за да не се налага всеки път да ги пишем отново. Следователно, съсредоточавайки всичкото внимание върху ключовите части, гледаме на готовия код, с който работим, като на нещо очевидно – просто предполагаме, че всичко ще работи както трябва.
Обикновено наистина работи, но когато възникнат трудности, разбирането на механиката му повече от компенсира.
Така нашият кандидат за позицията на разработчик-сениор смяташе, че обектите promise са очевидни. Вероятно си представяше как да ги управлява, когато ги види в чужд код, но не разбираше общия принцип и не успя да го повтори на интервюто. Може би беше запомнил фрагмент наизуст – не е толкова сложно:
return new Promise((resolve, reject) => {
functionWithCallback((err, result) => {
return err ? reject(err) : resolve(result);
});
});Аз също правех така – да, вероятно всички ние сме го правили някога. Просто запаметявахме парче код, за да го използваме после в работата, като при това само в общи линии си представяхме как е устроено всичко. Но ако разработчикът наистина разбираше концепцията, нямаше да му се налага да запомня нищо – просто щеше да знае как става и без усилия да воспроизведе всичко необходимо в кода.
Обратете се към източниците
През 2012 г., когато още не беше установено господството на фронтенд фреймворките, светът беше под власта на jQuery и четях книга , автор на която беше Джон Резиг, създателят на jQuery.
Книгата учи читателя как да създаде собствена jQuery от нулата и предоставя уникална възможност да се запознае с начина на мислене, който е довел до създаването на библиотеката. В последните години jQuery загуби своята предишна популярност, но все пак книгата бих препоръчал силно. Най-впечатляващото в нея за мен беше настойчивото чувство, че и аз бих могъл да се догадя до всичко това. Стъпките, които авторът описваше, изглеждаха толкова логични, толкова разбираеми, че наистина ми се струваше, че и аз бих могъл лесно да създам jQuery, ако само се захвана.
Разбира се, в действителност нищо такова не бих могъл да постигна – щях да реша, че е непосилно трудно. Собствените ми решения щяха да ми се струват твърде прости и наивни, за да проработят, и щях да се откажа. Щях да считам jQuery за нещо очевидно, в правилната работа на което трябваше просто сляпо да вярвам. Впоследствие едва ли ще бих отделил време за да се запозная с механиката на тази библиотека, а просто ще я използвах като нещо като черна кутия.
Но запознанството с тази книга ме направи друг човек. Започнах да чета изходния код и открих, че реализацията на много решения всъщност е много прозрачна, дори очевидна. Не, разбира се, сам да се догадя за нещо такова – това е вече от друга опера. Но именно изучаването на чуждия код и възпроизвеждането на вече съществуващи решения ни помага да измисляме нещо свое.
Вдъхновението, което ще получите, и моделите, които ще започнете да забелязвате, ще ви променят като разработчик. Ще откриете, че тази прекрасна библиотека, която постоянно използвате и за която сте свикнали да мислите като за магически артефакт, работи не на магия, а просто решава проблема по лаконичен и находчив начин.
Понякога ще трябва да се мъчите с кода, разглеждайки го стъпка по стъпка, но точно така, напредвайки с малки последователни стъпки, ще можете да повторите пътя на автора към решението. Това ще ви позволи да се потопите дълбочинно в процеса на писане на код и ще ви даде повече увереност при търсенето на собствени решения.
Когато започнах да работя с обещания, ми изглеждаха като чиста магия. После разбрах, че в основата им стоят същите обратни извиквания и моят програмистки свят се обърна. Тоест, моделът, чиято цел е да ни освободи от обратните извиквания, сам се реализира чрез обратни извиквания?!
Това ми помогна да погледна на нещата с различни очи и да осъзная, че пред мен не са някакви сложни парчета код, чието необикновено сложност никога няма да разбера. Това са просто модели, с които може да се справите без проблеми, ако имате нужната любопитност и дълбочинно потапяне. Именно така хората учат да програмират и растат като разработчици.
Изобретете колелото отново
Така че смело преоткривайте колелата: напишете сами кода за свързване на данни, създайте собствено обещание или дори направете собствено решение за управление на състояния.
Няма значение, че никой никога няма да използва всичко това – важното е, че сега го умеете. А ако имате възможност по-късно да използвате тези разработки в собствените си проекти, това е страхотно. Ще можете да ги развивате и ще научите нещо ново.
Смисълът тук не е да изпратите кода си в продукция, а да усвоите нещо ново. Да напишете самостоятелно реализация на вече съществуващо решение е отличен начин да учите от най-добрите програмисти и по този начин да усъвършенствате уменията си.
Източник: habr.com
