Kāpēc ir lietderīgi izgudrot riteņus no jauna?

Kāpēc ir lietderīgi izgudrot riteņus no jauna?

Citu dienu es intervēju JavaScript izstrādātāju, kurÅ” pretendēja uz vadoÅ”o amatu. Kolēģis, kurÅ” arÄ« piedalÄ«jās intervijā, lÅ«dza kandidātu uzrakstÄ«t funkciju, kas veiktu HTTP pieprasÄ«jumu un, ja tas neizdodas, vairākas reizes mēģinātu vēlreiz.

ViņŔ uzrakstÄ«ja kodu tieÅ”i uz tāfeles, tāpēc pietiktu uzzÄ«mēt kaut ko aptuvenu. Ja viņŔ vienkārÅ”i bÅ«tu parādÄ«jis, ka labi saprot, par ko ir runa, mēs bÅ«tu bijuÅ”i diezgan apmierināti. Bet diemžēl viņŔ nespēja atrast veiksmÄ«gu risinājumu. Tad mēs, sajÅ«sminādami, nolēmām nedaudz atvieglot uzdevumu un lÅ«dzām viņam funkciju ar atzvanÄ«Å”anu pārvērst par funkciju, kas balstÄ«ta uz solÄ«jumiem.

Bet diemžēl. Jā, bija acÄ«mredzams, ka viņŔ ar Ŕādu kodu bija saskāries jau iepriekÅ”. ViņŔ vispārÄ«gi zināja, kā tur viss darbojas. Viss, kas mums nepiecieÅ”ams, ir risinājuma skice, kas parāda koncepcijas izpratni. Taču kods, ko kandidāts uzrakstÄ«ja uz tāfeles, bija pilnÄ«gs absurds. Viņam bija ļoti neskaidrs priekÅ”stats par to, kādi solÄ«jumi ir JavaScript, un viņŔ nevarēja Ä«sti izskaidrot, kāpēc tie bija nepiecieÅ”ami. Junioram tas bÅ«tu bijis piedodami, taču viņŔ vairs nebija piemērots seniora amatam. Kā Å”is izstrādātājs spētu izlabot kļūdas sarežģītā solÄ«jumu ķēdē un izskaidrot citiem, ko tieÅ”i viņŔ darÄ«ja?

Izstrādātāji gatavu kodu uzskata par paŔsaprotamu

Izstrādes procesā mēs pastāvÄ«gi sastopamies ar reproducējamiem materiāliem. Mēs pārsÅ«tām koda fragmentus, lai mums tie katru reizi nebÅ«tu jāraksta no jauna. AttiecÄ«gi, koncentrējot visu savu uzmanÄ«bu uz galvenajām daļām, mēs skatāmies uz gatavo kodu, ar kuru strādājam, kā uz kaut ko paÅ”saprotamu - mēs vienkārÅ”i pieņemam, ka viss darbosies kā nākas.

Un parasti tas darbojas, bet, kad lietas kļūst sarežģītas, mehānikas izpratne vairāk nekā atmaksājas.

LÄ«dz ar to mÅ«su kandidāts uz vecākā attÄ«stÄ«tāja amatu solÄ«jumu objektus uzskatÄ«ja par paÅ”saprotamiem. Viņam, iespējams, bija ideja par to, kā ar tām rÄ«koties, kad tās parādās kaut kur kāda cita kodā, taču viņŔ nesaprata vispārējo principu un nevarēja to atkārtot intervijas laikā. VarbÅ«t viņŔ atcerējās fragmentu no galvas - tas nav tik grÅ«ti:

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

Es arÄ« to izdarÄ«ju ā€“ un, iespējams, mēs visi kaut kad to esam darÄ«juÅ”i. Viņi vienkārÅ”i iegaumēja koda gabalu, lai vēlāk varētu to izmantot savā darbā, vienlaikus iegÅ«stot tikai vispārēju priekÅ”statu par to, kā viss tur darbojas. Bet, ja izstrādātājs patieŔām saprata koncepciju, viņam nekas nebÅ«tu jāatceras - viņŔ vienkārÅ”i zinātu, kā to izdarÄ«t, un viegli reproducētu visu nepiecieÅ”amo kodā.

Atgriezieties pie saknēm

2012. gadā, kad priekÅ”gala ietvaru dominÄ“Å”ana vēl nebija noteikta, jQuery valdÄ«ja pasaulē, un es izlasÄ«ju grāmatu JavaScript nindzjas noslēpumi, autors Džons Resigs, jQuery radÄ«tājs.

Grāmata māca lasÄ«tājam, kā no nulles izveidot savu jQuery, un sniedz unikālu ieskatu domāŔanas procesā, kas noveda pie bibliotēkas izveides. Pēdējos gados jQuery ir zaudējis savu agrāko popularitāti, taču es joprojām ļoti iesaku grāmatu. Mani visvairāk viņā pārsteidza neatlaidÄ«gā sajÅ«ta, ka es pati par to visu bÅ«tu varējusi domāt. Autora aprakstÄ«tās darbÄ«bas Ŕķita tik loÄ£iskas, tik skaidras, ka es nopietni sāku domāt, ka es varētu viegli izveidot jQuery, ja tikko tikÅ”u pie tā.

Protams, Ä«stenÄ«bā es neko tādu nebÅ«tu varējis izdarÄ«t ā€“ es bÅ«tu nolēmis, ka tas bija neizturami grÅ«ti. Mani risinājumi Ŕķistu pārāk vienkārÅ”i un naivi, lai strādātu, un es padoties. Es jQuery klasificētu kā paÅ”saprotamas lietas, kuru pareizai darbÄ«bai vajag tikai akli ticēt. Pēc tam es diez vai veltu laiku, iedziļinoties Ŕīs bibliotēkas mehānikā, bet vienkārÅ”i izmantotu to kā sava veida melno kasti.

Taču, lasot Å”o grāmatu, es kļuvu par citu cilvēku. Es sāku lasÄ«t avota kodu un atklāju, ka daudzu risinājumu ievieÅ”ana patiesÄ«bā ir ļoti caurspÄ«dÄ«ga, pat acÄ«mredzama. Nē, protams, kaut ko tādu izdomāt paÅ”am ir cits stāsts. Taču tā ir citu cilvēku koda izpēte un esoÅ”o risinājumu reproducÄ“Å”ana, kas palÄ«dz mums nākt klajā ar kaut ko savu.

IegÅ«tā iedvesma un modeļi, kurus sākat pamanÄ«t, mainÄ«s jÅ«s kā izstrādātāju. JÅ«s atklāsiet, ka Ŕī brÄ«niŔķīgā bibliotēka, kuru jÅ«s pastāvÄ«gi izmantojat un kuru esat pieradis uzskatÄ«t par maÄ£isku artefaktu, nemaz nedarbojas ar maÄ£iju, bet vienkārÅ”i lakoniski un atjautÄ«gi atrisina problēmu.

Dažkārt nāksies pārspēt kodu, soli pa solim to analizējot, taču Ŕādi, maziem, konsekventiem solÄ«Å”iem, var atkārtot autora ceļu uz risinājumu. Tas ļaus jums dziļāk ienirt kodÄ“Å”anas procesā un sniegs jums lielāku pārliecÄ«bu, izstrādājot savus risinājumus.

Kad sāku strādāt ar solÄ«jumiem, man tā Ŕķita tÄ«ra maÄ£ija. Tad es uzzināju, ka tie ir balstÄ«ti uz tiem paÅ”iem atzvaniem, un mana programmÄ“Å”anas pasaule apgriezās kājām gaisā. Tātad modelis, kura mērÄ·is ir glābt mÅ«s no atzvanÄ«Å”anas, pati par sevi tiek Ä«stenota, izmantojot atzvanÄ«Å”anu?!

Tas man palÄ«dzēja paskatÄ«ties uz Å”o lietu ar citām acÄ«m un saprast, ka manā priekŔā nav nekāds neskaidrs koda fragments, kura pārmērÄ«go sarežģītÄ«bu es nekad mūžā nesapratÄ«Å”u. Tie ir tikai modeļi, kurus var bez problēmām saprast ar pienācÄ«gu zinātkāri un dziļu iedziļināŔanos. Tādā veidā cilvēki iemācās kodēt un augt kā izstrādātāji.

Izgudrojiet Ŕo riteni no jauna

Tāpēc turpiniet un izgudrojiet riteņus no jauna: uzrakstiet savu datu saistÄ«Å”anas kodu, izveidojiet paÅ”māju solÄ«jumu vai pat izveidojiet savu valsts pārvaldÄ«bas risinājumu.
Nav svarÄ«gi, ka neviens to visu neizmantos, taču tagad jÅ«s zināt, kā to izdarÄ«t. Un, ja jums ir iespēja vēlāk izmantot Ŕādas izstrādes savos projektos, tad tas parasti ir lieliski. Varēsi tās attÄ«stÄ«t un iemācÄ«ties ko citu.

Å eit mērÄ·is nav nosÅ«tÄ«t savu kodu uz ražoÅ”anu, bet gan iemācÄ«ties kaut ko jaunu. PaÅ”a esoŔā risinājuma ievieÅ”anas rakstÄ«Å”ana ir lielisks veids, kā mācÄ«ties no labākajiem programmētājiem un tādējādi pilnveidot savas prasmes.

Avots: www.habr.com

Pievieno komentāru