Дөңгелекті қайта ойлап табу неліктен пайдалы?

Дөңгелекті қайта ойлап табу неліктен пайдалы?

Келесі күні мен жоғары лауазымға үміткер JavaScript әзірлеушісінен сұхбат алдым. Сұхбатта болған әріптесі үміткерден HTTP сұрауын жасайтын функцияны жазуды сұрады және егер сәтсіз болса, бірнеше рет қайталап көріңіз.

Ол кодты тікелей тақтаға жазды, сондықтан шамамен бірдеңе сызу жеткілікті болар еді. Егер ол жай ғана мәселенің не екенін жақсы түсінетінін көрсетсе, біз әбден қанағаттанар едік. Бірақ, өкінішке орай, ол сәтті шешім таба алмады. Содан кейін біз оны қобалжу деп есептей отырып, тапсырманы сәл жеңілдету туралы шешім қабылдадық және одан кері шақырулары бар функцияны уәделерге негізделген функцияға айналдыруды сұрадық.

Бірақ өкінішті. Иә, оның мұндай кодпен бұрын кездескені анық еді. Ол жерде барлығының қалай жұмыс істейтінін жалпы түрде білді. Бізге тек тұжырымдаманы түсінуді көрсететін шешімнің нобайы қажет. Алайда кандидаттың тақтаға жазған коды мүлдем бос сөз болды. Ол JavaScript-те қандай уәделер бар екендігі туралы өте анық емес түсінікке ие болды және олардың не үшін қажет екенін түсіндіре алмады. Кіші оқушы үшін бұл кешірімді болар еді, бірақ ол енді аға лауазымына сай келмеді. Бұл әзірлеуші ​​күрделі уәделер тізбегіндегі қателерді қалай түзете алады және басқаларға нақты не істегенін түсіндіре алады?

Әзірлеушілер дайын кодты өздігінен түсінікті деп санайды

Даму процесінде біз үнемі қайталанатын материалдарды кездестіреміз. Біз код фрагменттерін әр жолы қайта жазудың қажеті болмас үшін тасымалдаймыз. Тиісінше, барлық назарымызды негізгі бөліктерге аудара отырып, біз жұмыс істейтін дайын кодқа өзінен-өзі түсінікті нәрсе ретінде қараймыз - біз жай ғана бәрі қажет болғандай жұмыс істейді деп болжаймыз.

Әдетте бұл жұмыс істейді, бірақ қиындықтар туындағанда, механиканы түсіну жақсы нәтиже береді.

Осылайша, аға әзірлеуші ​​лауазымына үміткеріміз уәде объектілерін өзінен-өзі түсінікті деп санады. Ол басқа біреудің кодексінде орын алған кезде олармен қалай күресуге болатынын түсінген шығар, бірақ ол жалпы принципті түсінбеді және сұхбат кезінде оны қайталай алмады. Мүмкін ол үзіндіні жатқа есіне түсірген шығар - бұл қиын емес:

return new Promise((resolve, reject) => {
  functionWithCallback((err, result) => {
   return err ? reject(err) : resolve(result);
  });
});

Мен мұны да жасадым - және біз мұны бір сәтте жасаған шығармыз. Олар жай ғана кодтың бір бөлігін жаттап алды, осылайша олар оны кейінірек өз жұмыстарында қолдана алады, сонда барлығының қалай жұмыс істейтіні туралы жалпы түсінік болды. Бірақ егер әзірлеуші ​​тұжырымдаманы шынымен түсінсе, ол ештеңені есте сақтаудың қажеті жоқ еді - ол мұны қалай жасау керектігін біледі және кодта өзіне қажет нәрсенің барлығын оңай шығарар еді.

Тамырларға оралыңыз

2012 жылы, фронтальды фреймворктардың үстемдігі әлі орнатылмаған кезде, jQuery әлемді басқарды, мен кітапты оқыдым. JavaScript ниндзясының құпиялары, авторы Джон Ресиг, jQuery жасаушысы.

Кітап оқырманға нөлден бастап жеке jQuery жасауды үйретеді және кітапхананы құруға әкелген ойлау процесі туралы бірегей түсінік береді. Соңғы жылдары jQuery бұрынғы танымалдылығын жоғалтты, бірақ мен әлі де кітапты өте ұсынамын. Оның мені қатты таң қалдырғаны – мұның бәрін өзім де ойлай алатынмын деген тұрақты сезім болды. Автор сипаттаған қадамдар соншалықты қисынды және түсінікті болып көрінді, сондықтан мен оған кіріссем, jQuery-ді оңай жасай аламын деп ойлай бастадым.

Әрине, шын мәнінде мен мұндай ештеңе істей алмас едім - мен бұл адам төзгісіз қиын деп шешкен болар едім. Менің жеке шешімдерім жұмыс істеу үшін тым қарапайым және аңғал болып көрінеді және мен бас тартатын едім. Мен jQuery-ді дұрыс жұмыс істейтініне соқыр сену керек болатын өздігінен түсінікті нәрселер ретінде жіктер едім. Кейіннен мен бұл кітапхананың механикасымен танысу үшін уақытты босқа өткізбеймін, бірақ оны қарапайым қара жәшік ретінде қолданар едім.

Бірақ бұл кітапты оқу мені басқаша адам етіп шығарды. Мен бастапқы кодты оқи бастадым және көптеген шешімдерді іске асыру іс жүзінде өте ашық, тіпті айқын екенін білдім. Жоқ, әрине, мұндай нәрсені өз бетінше ойлаудың өзі бөлек әңгіме. Бірақ бұл басқа адамдардың кодын зерттейді және өзімізден бірдеңе ойлап табуға көмектесетін бар шешімдерді қайта шығарады.

Сіз алған шабыт және сіз байқай бастаған үлгілер сізді әзірлеуші ​​ретінде өзгертеді. Сіз үнемі қолданатын және сіз сиқырлы артефакт ретінде ойлауға дағдыланған тамаша кітапхананың сиқырға мүлдем әсер етпейтінін, бірақ мәселені қарапайым және тапқыр шешетінін көресіз.

Кейде сізге кодты бірте-бірте талдауға тура келеді, бірақ осылайша шағын, дәйекті қадамдармен қозғала отырып, автордың шешімге жолын қайталай аласыз. Бұл кодтау процесіне тереңірек енуге мүмкіндік береді және өзіңіздің шешімдеріңізді табуға көбірек сенімділік береді.

Мен алғаш рет уәдемен жұмыс істей бастағанда, бұл маған таза сиқыр сияқты көрінді. Содан кейін мен олардың бірдей кері қоңырауларға негізделгенін білдім және менің бағдарламалау әлемім төңкерілді. Сонымен, мақсаты бізді кері қоңыраулардан құтқару болып табылатын үлгінің өзі кері қоңыраулар арқылы жүзеге асады ма?!

Бұл маған мәселеге басқаша көзқараспен қарауға және бұл менің алдымда тұрған, өмірімде ешқашан түсінбейтін тыйым салатын күрделі код емес екенін түсінуге көмектесті. Бұл қызығушылық пен терең суға түсу арқылы қиындықсыз түсінуге болатын үлгілер. Осылайша адамдар кодтауды үйренеді және әзірлеушілер ретінде өседі.

Бұл дөңгелекті қайта ойлап табыңыз

Ендеше, доңғалақтарды қайта ойлап табыңыз: өзіңіздің деректерді байланыстыру кодын жазыңыз, үйдегі уәдені жасаңыз немесе тіпті мемлекеттік басқару шешімін жасаңыз.
Мұның бәрін ешкім ешқашан қолданбайтыны маңызды емес - бірақ енді сіз мұны қалай жасау керектігін білесіз. Егер сізде мұндай әзірлемелерді кейіннен өз жобаларыңызда пайдалану мүмкіндігі болса, онда бұл өте жақсы. Сіз оларды дамытып, басқа нәрсені үйрене аласыз.

Бұл жерде мәселе кодты өндіріске жіберу емес, жаңа нәрсені үйрену. Қолданыстағы шешімді өзіңіздің енгізуіңізді жазу - ең жақсы бағдарламашылардан үйренудің және осылайша өз дағдыларыңызды жетілдірудің тамаша тәсілі.

Ақпарат көзі: www.habr.com

пікір қалдыру