Miért hasznos újra feltalálni a kerekeket?

Miért hasznos újra feltalálni a kerekeket?

A minap interjút készítettem egy JavaScript fejlesztővel, aki vezető pozícióra pályázott. Egy kolléga, aki szintén jelen volt az interjún, arra kérte a jelöltet, hogy írjon egy olyan függvényt, amely HTTP kérést küld, és ha nem sikerül, többször próbálkozzon újra.

A kódot közvetlenül a táblára írta, így elég lenne valami hozzávetőlegeset rajzolni. Ha egyszerűen megmutatta volna, hogy jól érti, miről van szó, akkor teljesen elégedettek lettünk volna. De sajnos nem talált sikeres megoldást. Aztán izgalomba hozva úgy döntöttünk, hogy egy kicsit megkönnyítjük a feladatot, és megkértük, hogy egy visszahívásos függvényt alakítson át ígéretekre épített függvényré.

De sajnos. Igen, nyilvánvaló volt, hogy találkozott már ilyen kóddal. Általánosságban tudta, hogyan működik ott minden. Csak egy olyan megoldás vázlatára van szükségünk, amely bemutatja a koncepció megértését. Az a kód azonban, amit a jelölt a táblára írt, teljes nonszensz volt. Nagyon homályos elképzelése volt arról, hogy milyen ígéretek vannak a JavaScriptben, és nem igazán tudta megmagyarázni, miért van rájuk szükség. Egy ifi számára ez megbocsátható lett volna, de már nem volt alkalmas a rangidős posztra. Hogyan lenne képes ez a fejlesztő kijavítani a hibákat az ígéretek összetett láncolatában, és elmagyarázni másoknak, mit is csinált pontosan?

A fejlesztők a kész kódot magától értetődőnek tartják

A fejlesztés során folyamatosan reprodukálható anyagokkal találkozunk. A kódrészleteket úgy helyezzük át, hogy ne kelljen minden alkalommal újraírnunk őket. Ennek megfelelően, ha minden figyelmünket a kulcsfontosságú részekre összpontosítjuk, úgy tekintünk a kész kódra, amivel dolgozunk, mint valami magától értetődő dologra – egyszerűen feltételezzük, hogy minden úgy fog működni, ahogyan kell.

És általában működik, de ha a dolgok bonyolulttá válnak, a mechanika megértése kifizetődő.

A vezető fejlesztői posztra jelöltünk tehát magától értetődőnek tartotta az ígéretes tárgyakat. Valószínűleg volt ötlete, hogyan kezelje őket, ha valaki más kódjában előfordulnak, de nem értette az általános elvet, és maga sem tudta megismételni az interjú során. Talán fejből emlékezett a töredékre - ez nem olyan nehéz:

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

Én is megcsináltam – és valószínűleg mindannyian megtettük valamikor. Egyszerűen megjegyeztek egy kódrészletet, hogy később felhasználhassák munkájuk során, miközben csak általános elképzelésük volt arról, hogyan működik ott minden. De ha a fejlesztő valóban megértette a koncepciót, nem kellene semmire sem emlékeznie - egyszerűen csak tudja, hogyan kell csinálni, és könnyen reprodukálna mindent, amire szüksége van.

Menj vissza a gyökerekhez

2012-ben, amikor még nem alakult ki a front-end keretrendszerek dominanciája, a jQuery uralta a világot, én pedig elolvastam a könyvet. A JavaScript nindzsa titkai, szerzője John Resig, a jQuery megalkotója.

A könyv megtanítja az olvasót saját jQuery létrehozására a semmiből, és egyedülálló betekintést nyújt abba a gondolkodási folyamatba, amely a könyvtár létrehozásához vezetett. Az elmúlt években a jQuery elvesztette korábbi népszerűségét, de továbbra is nagyon ajánlom a könyvet. Leginkább az a kitartó érzés döbbent meg benne, hogy mindezt magam is gondolhattam volna. A szerző által leírt lépések annyira logikusnak és egyértelműnek tűntek, hogy komolyan elkezdtem azon gondolkodni, hogy könnyen létrehozhatom a jQuery-t, ha csak ráérek.

Persze a valóságban semmi ilyesmire nem lettem volna képes – úgy döntöttem volna, hogy elviselhetetlenül nehéz. A saját megoldásaim túl egyszerűnek és naivnak tűnnek ahhoz, hogy működjenek, és feladnám. A jQuery-t a magától értetődő dolgok közé sorolnám, aminek a helyes működésében csak vakon kell hinni. Ezt követően aligha vesztegetném az időt a könyvtár mechanikájának elmélyedésére, hanem egyszerűen egyfajta fekete doboznak használnám.

De ezt a könyvet olvasva más emberré váltam. Elkezdtem olvasni a forráskódot, és rájöttem, hogy sok megoldás megvalósítása valójában nagyon átlátható, sőt nyilvánvaló. Nem, persze, ha ilyesmire egyedül gondolsz, az egy másik történet. De mások kódjának tanulmányozása és a meglévő megoldások reprodukálása segít nekünk, hogy kitaláljunk valamit.

Az inspiráció, amit kapsz, és a minták, amelyeket kezdesz észrevenni, megváltoztatják Önt, mint fejlesztőt. Rá fog jönni, hogy az a csodálatos könyvtár, amelyet folyamatosan használ, és amelyre megszokta, hogy mágikus műtárgynak gondolja, egyáltalán nem működik a varázslaton, hanem egyszerűen lakonikusan és találékonyan oldja meg a problémát.

Néha át kell tekinteni a kódot, lépésről lépésre elemezve, de így, kis, következetes lépésekben haladva megismételheti a szerző útját a megoldáshoz. Ez lehetővé teszi, hogy mélyebbre merüljön a kódolási folyamatban, és nagyobb magabiztosságot ad a saját megoldások kidolgozásában.

Amikor először elkezdtem az ígéretekkel dolgozni, ez tiszta varázslatnak tűnt. Aztán rájöttem, hogy ugyanazokon a visszahívásokon alapulnak, és a programozási világom fenekestül felfordult. Tehát a minta, aminek az a célja, hogy megkíméljen minket a visszahívásoktól, maga a visszahívások segítségével valósul meg?!

Ez segített abban, hogy más szemmel nézzek a témára, és rájöjjek, hogy ez nem valami elgondolatlan kódrészlet, ami előttem áll, aminek a mértéktelen bonyolultságát soha életemben nem fogom felfogni. Ezek csak minták, amelyek kellő kíváncsisággal és mély elmélyüléssel gond nélkül megérthetők. Így tanulnak meg az emberek kódolni, és így fejlődnek fejlesztőként.

Találja fel újra ezt a kereket

Tehát menjen előre, és találja fel újra a kerekeket: írja meg saját adatkötési kódját, készítsen otthoni ígéretet, vagy akár saját államkezelési megoldást is.
Nem számít, hogy soha senki nem fogja használni mindezt – de most már tudod, hogyan kell csinálni. És ha lehetősége van arra, hogy később felhasználja ezeket a fejlesztéseket a saját projektjeiben, akkor ez általában nagyszerű. Képes lesz fejleszteni őket és tanulni valami mást.

Itt nem az a lényeg, hogy elküldje a kódot az élesre, hanem az, hogy tanuljon valami újat. Egy meglévő megoldás saját implementációjának megírása nagyszerű módja annak, hogy tanuljon a legjobb programozóktól, és ezáltal tökéletesítse készségeit.

Forrás: will.com

Hozzászólás