A cikk célja, hogy egy történeti áttekintés alapján bemutassa, hogy miért is érdemes 2020-ban a JavaScript programozó karriert építeni. Megtudhatod, hogy
- miért ma a legjobb elkezdeni a JavaScript nyelvvel foglalkozni,
- milyen karrierlehetőségeid vannak mint JavaScript programozó,
- miért könnyebb napjainkban a JavaScript nyelvet elsajátítani, mint a múltban bármikor.
Ez a cikk a Modern JavaScript a gyakorlatban című könyv bevezetőjében jelent meg. Eredeti változatát angol nyelven itt találod.
JavaScript a Böngészőben
Valószínű a weboldalamra egy web-böngészőn keresztül találtál, mint pl. a Google Chrome vagy a Firefox. A web-böngészőben megjeleníthető weboldalakat három nyelven írják: HTML, CSS, és JavaScript.
A HTML (Hyper Text Markup Language) nyelv a weboldal szerkezetét és tartalmát írja le. A CSS (Cascading Style Sheets) a megjelenítéssel foglalkozik: meghatározza, hogy milyen betűtípussal jelenjen meg a szöveg, milyen színek jelenjenek meg az oldalon, háttérképeket illeszt be megfelelő helyekre.
JavaScript programozó? Viccelsz?
A JavaScript egy programozási nyelv, amely a weboldalon lévő elemek mozgatásán, változtatásán kívül rengeteg más feladatot láthat el. Néhány példa:
- kommunikáció egy szerverrel, amely az adataidat tárolja,
- alkalmazás-logika leírása: például képes arra, hogy ellenőrizze, hogy helyesen írtad-e be a személyes adataidat,
- vizualizáció: például kirajzolni az OTP részvény árfolyamát.
Az animáció a képernyőn lévő elemek mozgatása és transzformálása. A mozgatás alatt az objektum jellemzői változhatnak. Az objektum színe, mérete változhat, sőt három dimenziós objektum animálásakor az objektumot elképzelhető, hogy idővel egy másik szögből látjuk.
Transzformálás alatt a vizsgált elem valamilyen jellemzőjének időbeli változtatását értjük. Megváltozhat egy elem színe, formája, helyzete.
Az előbb megemlítettük a szervert mint fogalmat. Itt az idő meghatározni, hogy mit értünk kliens oldali programozás és szerver oldali programozás alatt:
A kliens oldali JavaScript programozó a felhasználó böngészőjében futó kóddal foglalkozik. A szerver oldali programozó a háttérben futó kóddal foglalkozik, amely szolgáltatásokat biztosít a kliens számára.
Amikor lekérjük az OTP részvény adatait egy szervertől, egy szerver oldali program lekérdezi az adatokat egy adatbázisból. Ezeket az adatokat a kliens egy meghatározott formátumban (pl. XML, JSON) kapja meg. Miután a kliens elolvasta az adatokat, ki tud rajzolni egy grafikont a böngészőbe.
A JavaScript egyértelműen a kliens oldali programozás egyszerű nyelve volt a kilencvenes években és a kétezres évek elején. A JavaScript programozó kizárólagos feladata a weboldalakon lévő elemek animálása volt. Célja dinamikus tartalom létrehozása volt.
Az animációhoz kapcsolódik a renderelés fogalma.
Amikor egy adott időpillanatban megjelenítünk egy objektumot a képernyőn, az objektumot rendereljük.
Egy objektum animációja nem más, mint egy objektum folyamatos időbeli renderelése, miközben az objektum jellemzői változhatnak.
Húsz évvel ezelőtt a szoftverfejlesztők egyáltalán nem vették komolyan a JavaScript nyelvet. Ez azoknak volt köszönhető, akik mindenféle tudás nélkül csak össze-vissza másolgattak olyan JavaScript kódokat, amelyekhez lövésük sem volt, hogy mit jelent. Az Interneten kerestek egy animációt, és bemásolták a JavaScript programkódját. Mivel két animáció kódja könnyen kölcsönhatásba léphetett egymással, sokszor működőképes animációkat tett tönkre egy frissítés. A kétezres évek első felére ezért a JavaScript programozó szakma nem volt túl megbecsült.
Kliens-szerver kommunikáció a weboldal újratöltése nélkül
A JavaScript népszerűsége az AJAX (Asynchronous JavaScript And XML) elterjedésével nőtt. A 2006-os év hozta meg az XMLHttpRequest
objektum szabványosítását, amely lehetővé tette, hogy az oldal újra betöltése nélkül kérj adatokat egy szervertől. Korábban minden szerver-kommunikáció weboldalak újratöltésével járt, és ez az alacsony sebességű modemek idejében több másodpercbe is telhetett. Így az AJAX népszerűsége érthető: a felhasználók úgy érzékelték, hogy azonnal hozzájuthatnak az adataikhoz.
Ahogy a JavaScript nyelv egyre inkább elterjedt, a JavaScript programozó közösség újabb problémával kellett, hogy szembenézzen: ahhoz, hogy minden böngészőben futó kódot tudjunk írni, különböző böngészőkhöz más-más JavaScript megoldásokat kellett alkalmazni. Néha a helyzet kétségbeejtően zavart volt. Ahhoz, hogy minden fontosabb böngészőben jól működő kódot tudj írni, JavaScript-szakértővé kellett válnod.
JavaScript programozó karrier? Használj jQuery-t!
Idővel egy másik újítás ezt a problémát is megoldotta. Szintén 2006-ban a JavaScript történetének újabb mérföldköve jött el: megjelent a jQuery
könyvtár. A jQuery szlogenje write less, do more. Szabad fordításban írj kevesebbet, érj el többet. Sokszor tíz-húsz soros böngészőről böngészőre optimalizált kódot egyetlen rövid jQuery paranccsal helyettesíthettünk. Ennek következtében már nem volt szükség arra, hogy komoly szoftverfejlesztői tapasztalattal rendelkezzen egy JavaScript programozó ahhoz, hogy működőképes kódot tudjon írni. Elég volt a jQuery könyvtárat használni, és a legtöbb probléma meg is oldódott.
Sajnos a jQuery egy új problémát hozott létre: túl könnyű lett valós programozási ismeretek nélkül jQuery kódot írni. Azok is kódolni kezdtek, akik nem igazán tudták átgondolni, hogy mit is csinálnak.
Mindeközben a single page application (SPA) és a client-side rich web-application kifejezések születtek meg, amelyek a kliensoldanon egyszer betöltött webalkalmazásokat jelölték, amelyek oldalfrissítés nélkül, egyetlen oldal betöltése után működtek. Mi az újratöltés nélküli webalkalmazás kifejezést fogjuk használni a jelenség leírására.
Az AJAX és a jQuery előtt szinte mindent szerver oldali kód végzett. A szerver egy weboldal kódját állította elő, és ezt küldte el a kliensnek HTML, CSS, és JavaScript kód formájában. A kliensnek mindössze annyi feladata volt, hogy betöltse ezt a kódot. Az újratöltés nélküli webalkalmazások elterjedésével a weboldal renderelése és az alkalmazás logikájának egy része a kliens oldalra került. A JavaScript kódot az új módszer alapján egyszer kell betölteni. Ez gyakran több megabyte méretű alkalmazáskódot jelentett. Ekkorra már a kliens oldalon elég erős számítógépek voltak ahhoz, hogy megbírkózzanak a kliens oldali JavaScript futtatásával.
Az újratöltés nélküli webalkalmazások az oldal betöltésekor minden HTML, CSS, és JavaScript kódot megkapnak, és anélkül is tudnak navigálni a különböző oldalak között, hogy erről a szervert informálnák. A kliens AJAX segítségével kommunikál a szerverrel, és úgy fér hozzá a szerver által biztosított adatokhoz, hogy nem kell újratöltenie a weboldalt. Így az újratöltés nélküli webalkalmazások gyorsabbak és könnyebben használhatóbbak lettek, mint a szerver oldalon megírt alkalmazások. Pont olyan könnyű lett az futtatásuk, mint egy Windowson, Linuxon, vagy Mac-en futó alkalmazásé.
A jQuery jelentősen leegyszerűsítette a webfejlesztést, és ezáltal sokkal többen próbálkoztak meg munkát és szabadúszó feladatokat elvállalni előképzettség nélkül. Kis feladatokra ez a megközelítés működőképes is volt. A felhasználói kör azonban hamar rájött, hogy a jQuery használata önmagában egy bizonyos méretű alkalmazás felett nem ajánlott, mert a szoftver karbantartása lehetetlenné válik.
A karbantarthatóság (maintainability) egy szoftver könnyű fejleszthetőségét, módosíthatóságát, skálázhatóságát, tesztelhetőségét, és a hibák könnyű eltávolítását (debuggolhatóság) jelöli. Ha tíz sor kódot írsz, más módszerekre lesz szükséged, mint egy millió soros program írásakor.
A fenti ötösből a skálázhatóság azt jelenti, hogy megnövekedett terhelésre a program kiszámítható választ ad. A skálázhatóságot érthetjük erőforrásra és fejlesztési módszerekre is. Például ha egy szerver száz felhasználóra 1 másodperc átlagos válaszidőt garantál, akkor szeretnénk tudni, hogy mennyi idő alatt kapunk választ, ha egyszerre ezer, tízezer, vagy százezer felhasználó csatlakozik a szerverhez. Egy fejlesztési folyamat skálázhatóságánál nézhetjük például azt, hogy hogyan növekszik egy hiba kijavításának az ideje tízezer, százezer, vagy millió soros programnál, illetve hogy ezer soronként hány hibát vét egy JavaScript programozó.
JavaScript keretrendszerek
A karbantarthatósági problémára a válasz JavaScript keretrendszerek (JavaScript frameworks) formájában érkezett. A keretrendszerek úgy struktúrálják a kódot, hogy az karbantartható legyen, mindezt a szoftvermérnökök által is támogatott formában. Ahhoz, hogy a keretrendszereket megfelelően alkalmazni tudjuk, szoftverfejlesztői tudásra van szükségünk. A szabadúszó portálokon ez a tudás többet ér, mint a jQuery.
Egy keretrendszer (pl. Angular, React) a kódodat strukturálja. Használatával átadjuk az irányítást a keretrendszernek. Ez azt jelenti, hogy a keretrendszer hivatkozik a kódodra.
Egy könyvtár (pl. jQuery) olyan funkciók összessége, amelyeket a programunk használ feladatok megoldására. A könyvtár nem keretrendszer, mert az irányítás nálad marad. Egy könyvtár nem hivatkozik az általad írt kódra.
A 2010-es évek elején szinte minden JavaScript programozó keretrendszert akart írni. Hetente jöttek ki az újabbnál újabb keretrendszerek. Ezáltal sokan újra feltalálták a kereket azáltal, hogy egy jól ismert problémát egy újabb módon oldottak meg. Ha most egy szoftverfejlesztői portfóliót szeretnél építeni, nem javaslom, hogy keretrendszert írj.
Szerencsére az újabbnál újabb keretrendszerek gyors népszerűsége és még gyorsabb bukása már a múlté. Ma már nem kell újabbnál újabb keretrendszereket és könyvtárakat tanulnunk havi rendszerességgel. Napjainkban népszerű a React, az Angular, és a Vue. A Google keresési adatok alapján a React áll nyerésre, de az Angular-nek és a Vue-nek is megvan a maga felhasználási területe. Mindhárom keretrendszer mögött hatalmas nyílt forráskódú közösség áll. A React mögött a Facebook, az Angular mögött a Google áll.
Nyílt forráskódú közösségekhez bárki csatlakozhat, hiszen a a közösség nyílt. Bárki hozzájárulhat a közösség által karbantartott szoftver forráskódjához. Ez adja a megfelelően népszerű nyílt forráskódú közösségek erejét. A főbb hibákat gyorsan kijavítják, és maga a szoftver folyamatosan fejlődik. Ezáltal népszerű nyílt forráskódú közösségek iránt tanúsíthatunk egyfajta bizalmat, ami egy adott minőségi szintet garantál.
JavaScript ráncfelvarrás: ES6
Bár a keretrendszerek elterjedése kétségkívül hasznos lépés volt, a szoftverfejlesztők még egy problémával néznek szembe napjainkban. A keretrendszerek és könyvtárak olyan mértékben gazdagították a JavaScript programozó eszköztárát, hogy a JavaScript nyelv részletes elsajátítására már nem is volt szükség. A JavaScript ES5 verziója 2010-es évek közepére már egyébként is idejétmúlt volt, és szükségesnek látszott egy nagyobb ráncfelvarrás. Ezért kijött az ES6 vagy más néven ES2015 változat. Ez az újabb változatot használva rengeteg különböző forrásból táplálkozott: több könyvtár, mint pl. a jQuery és az Underscore, több keretrendszer, több nyelv, mint pl. a TypeScript újdonságait tartalmazta, és lényegesen megkönnyítette a JavaScript nyelv használatát. Kevesebb kóddal sokkal többet lehetett kifejezni.
Az ES az ECMAScript rövidítése. AZ ECMA International (European Computer Manufacturers Association) egy 1961-ben alapult szabványosító szervezet, amely többek között a JavaScript és az ActionScript nyelvek szabványosítása mögött áll. A JavaScript szabványt az ECMA-262 írja le.
Egyben a régi böngészők, mint pl. az Internet Explorer 8, kimentek a divatból, és ezáltal néhány JavaScript megoldásra nem volt már szükség. Ezáltal több kompatibilitási megoldás szükségtelenné vált, és a JavaScript kódunk egységesebbé és tömörebbé vált. Az újabb böngészők egyre inkább ragaszkodtak a legújabb ECMAScript szabványhoz, ezáltal nem volt szükség különböző böngészőkben különböző megoldásokra.
Az ES2015 megjelenése óta évről évre fejlődik a JavaScript nyelv. Az angol nyelvű ES6 in Practice könyvemet és videotanfolyamomat így évről évre frissítettem. Talán mire erre a hivatkozásra kattintasz, már át is neveztem "ES6+ in Practice" vagy "JavaScript in Practice (2019 Edition)-re" a címet.
A JavaScript fejlődési története alapján levonhatjuk a következtetést, hogy még soha nem volt jobb döntés JavaScript fejlesztőnek állni, mint napjainkban. Sok munkahelyen több pénzt visz haza egy JavaScript fejlesztő, mint egy C++ vagy PHP fejlesztő társa. Ha nem hiszel ebben a mondatban, nézz utána payscale.com-on, vagy böngészd át a stackoverflow.com-on megjelenő álláshirdetéseket.
Egy JavaScript programozó napról napra érdekes kihívásokat talál, és egy feladat megoldása közben azonnali visszajelzést kap arról, hogy működik-e a kódja vagy nem. Hiszen napjaink fejlesztőkörnyezeteiben már a böngészőt sem kell manuálisan frissítenünk, a live reload funkció élőben tölti újra a frissített kódot.
Összefoglaló:
- A JavaScript nyelvet eleinte sokan komolytalan animációkat leíró nyelvnek tartották
- Az AJAX segítségével kommunikálhattunk a szerverrel anélkül, hogy újratöltenénk a böngészőben futó oldalt
- A jQuery elterjedése jelentősen megkönnyítette a webfejlesztést
- Keretrendszerek és könyvtárak rákényszerítették a fejlesztőket arra, hogy könnyen karbantartható kódot írjanak
- A régi böngészők elavulásával könnyebb lett JavaScript nyelven programot írni, mert az új böngészők egyre jobban ragaszkodtak a JavaScript szabványához.
- Az ES2015 után évente frissült a JavaScript nyelv, és sok könyvtárakban, keretrendszerekben, és más nyelvekben használt megoldás beépült a JavaScript nyelvbe
JavaScript a szerver oldalon: full stack JavaScript programozó
Ha a fenti előnyök nem lennének elegek ahhoz, hogy JavaScript programozó legyen belőled, ez a fejezet további bíztató információkkal szolgál.
A JavaScript nem csak a kliens oldalon használható. A node.js használatával szerver oldalon is futtathatunk JavaScript kódot. A node.js a Google Chrome alapjául szolgáló motor alapján épült. Ennek a motornak a neve V8. A V8 motor előnye, hogy gyors, mint egy Forma-1-es autó. Emlékezzünk vissza, Michael Schumacher is V8-as motorral nyerte meg az első világbajnoki címét. A V8 fordító (compiler) a JavaScript kódot gépi kóddá alakítja, ezáltal szerver oldalon már nem interpretált kódot, hanem gépi kódot futtathatunk.
Az interpretált kód egy virtuális gépen fut. A virtuális gép a fejlesztő által írt kódot a számítógép által érthető utasításokká alakítja. Az interpretált nyelvek általában lassabbak, mint a gépi kóddá fordított (compiled) nyelvek. Az interpretált nyelvek másik előnye a hordozhatóság, ami azt jelenti, hogy az interpretálható forráskódot különböző környezetekben különböző virtuális gépek segítségével futtathatjuk. A gépi kóddá fordítható nyelvek előnye, hogy a lefordított kód gépközelibb, ezáltal jobban kihasználja az adott számítógép rendszerének lehetőségeit. Ezáltal a lefordított kód hordozhatósága el is veszik, mert különböző operációs nyelvek nem ismerik egymás belső felépítését.
A node.js azáltal lett gyors, hogy egy fordító gépi kóddá alakítja a JavaScript kódot. Ez önmagában még nem jelent sokat, mert sok más szerver oldali nyelv képes ugyanerre. Így feltehetjük a nyilvánvaló kérdést: miért éri meg node.js-ben fejleszteni szerver oldali alkalmazásokat?
A node.js népszerűségének oka az architekturájában rejlik. A node.js egy eseményciklust (event loop) használ a párhuzamos szerver oldali kérések (request) ütemezésére. Mivel a véleményem szerint az eseményciklus nem túl jó szakkifejezés, a továbbiakban event loop-ként fogunk hivatkozni rá. Fölösleges mindent magyarosítani, hiszen a túlzott magyarosításnak az lesz az eredménye, hogy elszigeteljük magunkat, és ezáltal drasztikusan csökkennek a lehetőségeink.
Az architektúra szó töve az architect, ami tervezőmérnököt jelent. A szoftver tervezőmérnök terméke szoftver architektúra, amely egy szoftver működési elvét leíró terv. Így legkönnyebben működési elvként hivatkozhatunk rá.
Az event loop-ot egy végtelen körfolyamként lehet elképzelni, ahol a párhuzamos folyamatok egy időszeletet kapnak. Ezáltal több párhuzamos folyamatot is futtatni tudunk anélkül, hogy az egyes folyamatokat blokkolódnának. Ezt nevezzük blokkolásmentes I/O-nak (non-blocking I/O = non-blocking Input/Output).
Az I/O műveletekből az I/O Input/Output-ot jelent. Az input beviteli, az output kiviteli művelet. A beviteli művelet az, amikor adatot viszünk be egy rendszerbe. Ilyen például a billentyűzeten való gépelés, az egér, a scanner, a fényképezőgép, a letöltés, és a banki egyenlegünk lekérdezése. A kiviteli művelet ennek az ellentéte. Kiviteli művelet során egy rendszer adatot szolgáltat, pl. megjeleníti a begépelt szöveget, nyomtat, feltölt egy másik szerverre, vagy megadja a banki egyenlegünket mint a kérésünkre adott választ egy adott formátumban.
Sok más nyelvvel ellentétben egy adatbázis vagy fájl írása közben a node.js nem blokkol más folyamatokat amíg az I/O művelet véget nem ér, hiszen ezalatt más feladatokat is elvégezhetünk, amelyek más ügyfeleknek vagy folyamatoknak fontosak lehetnek.
Gondolkodjunk el egy pillanatra. Mikor is van blokkolásmentes I/O-ra szükség?
A node.js fő előnye abban rejlik, hogy sok párhuzamos I/O intenzív műveletet tud kezelni. A node.js más alternatívákhoz képest nem különösen erősebb olyan feladatokban, ahol sok számítást kell végezni.
Például egy három dimenziós renderelő algoritmus nagyon számításigényes. Bár a V8 motor gyors gépi kódot eredményez, más, gépközelibb nyelvek hatékonyabban képesek ugyanezt a feladatot megoldani. A node.js akkor válik hatékonyabb alternatívává, ha sok alacsony számításigényű műveletet kell párhuzamosan kezelni.
Napjainkban a legnépszerűbb alkalmazások legfőbb jellemzője pont a sok alacsony számításigényű feladat. A felhasználók számítógépei már elég erősek ahhoz, hogy az alkalmazási logika megjelenítési részével megbírkózzanak, és táblázatokat, grafikonokat, és egyéb komponenseket jelenítsenek meg. Az alkalmazás szerver egy API-n (Application Programming Interface, szándékosan nem fordítom le) keresztül biztosít adatokat. Ehhez adatbázisok és fájl szerverek szolgáltatásait veszi igénybe. A kliens oldali alkalmazás elsősorban AJAX hívásokkal kommunikál a szerver által biztosított API-val.
API (Application Programming Interface): egy alkalmazás használati módját, kommunikációs protokollját írja le egy külső felhasználó szemszögéből. Egy alkalmazás szerver egy szolgáltatásának (service) API-ja végpontokból (endpoint) áll, amelyeket egy API request (kérés) segítségével lehet meghívni. Általában az API request egy webcímet és megfelelő adatokat (payload, magyarul szakmaiatlanul hangzó hasznos teher) tartalmaz. Az API válasza (API response) adott formátumban prezentált információ, ami lehet JSON (JavaScript Object Notation) vagy XML (eXtensible Markup Language). Az API request payload és az API response általában ugyanabban a formátumban íródik. Ez a formátum JavaScript alkalmazások esetén a legtöbbször JSON. Az alkalmazás szerver API-jának a felhasználója a kliens oldali alkalmazás, vagy más szerver oldali alkalmazás lehet.
Napjaink API alapú alkalmazásai ritkán számításigényesek. Ebben a környezetben a node.js előnyei könnyen érvényre jutnak.
A microservice-ek (mikroszolgáltatás) sok problémát hatékonyan megoldanak. Szerver-szerver kommunikáció segítségével egyszerűen csak lekérdezhetünk egy számításigényes műveletet egy microservice-től, és ezt a szolgáltatást nem kell feltétlenül JavaScript-ben megírni. Ha ez a téma érdekel téged, akkor olvasd el a mellékelt angol nyelvű cikkemet.
Általánosságban levonható az a következtetés, hogy a kliens oldali programozás megtanulása után könnyen megtanulható a szerver oldali programozás is. Full stack fejlesztőnek hívjuk azokat a szoftverfejlesztőket, akik mind a kliens oldali, mind a szerver oldali programozáshoz értenek. A full stack fejlesztővé válás egy kiváló út a karrieredben, amennyiben több felelősségre vágysz egy kisebb cégben. Ezekben a cégekben a felelősségvállalás gyors kiugrási lehetőséget biztosít.
Összefoglalás:
- A JavaScript nyelv gyors gépi kóddá fordítható a Google V8 motorja segítségével. Ez a gépi kód szerver oldalon is képes futni.
- A node.js blokkolásmentes módon kezeli az I/O műveleteket. Ezáltal sok I/O műveletet képes párhuzamosan kezelni.
- Napjainkban sok számításigényes alkalmazást kliens oldalon vagy egy adott feladatra specializált microservice segítségével oldanak meg. Ezáltal a kevésbé erőforrásigényes, de sok párhuzamos kérés kiszolgálását lehetővé tevő API programozásra a node.js kiválóan alkalmas.
A JavaScript egyéb felhasználási lehetőségei
A JavaScript programozó élete élvezetes. Eredetileg a JavaScript fő felhasználási területe a kliens oldali fejlesztés volt. Ezt követte a szerver oldali programozás node.js segítségével. Ha viszont körbenézünk, hogy milyen egyéb feladatokat képes a JavaScript ellátni, könnyen meglepődhetünk:
- JavaScript és a virtuális valóság. A React 360 segítségével virtuális valóságélményt hozhatunk létre JavaScript-ben. A React 360 mellett további VR könyvtárak állnak a rendelkezésedre.
- A JavaScript más programozási nyelvekre fordítható, és más programozási nyelvek JavaScript-re fordíthatók. Például a WebAssembly több nyelvet képes JavaScript-re fordítani, ezáltal más programozási nyelvben írt kódot futtathatunk a böngészőnkben és használhatunk fel a saját JavaScript kódunkban.
- JavaScript machine learning (gépi tanulás) és mesterséges intelligencia. A Google gépi tanulási funkciókat biztosító népszerű könyvtára a TensorFlow, elérhető JavaScript-ben is. A TensorFlow segítségével neurális hálókat hozhatunk létre JavaScript-ben. Sok más gépi tanulást és mesterséges intelligenciát elősegítő könyvtár elérhető JavaScript-ben.
- Szoftverfejlesztés mobil eszközökre. A React Native lehetővé teszi, hogy mobil eszközökre fejlesszünk alkalmazásokat JavaScript-ben. Ez egy nagyon hatásos kombináció, mert több eszközön is újrafelhasználhatjuk a programkódunkat.
- Blokklánc-fejlesztés. A fejezet írásának pillanatában több, mint ezer blokklánc (blockchain) témájú fejlesztés áll rendelkezésre npm-ben (bizonyíték). Például a Crypto-js könnyen használható titkosító és visszafejtő algoritmusokat ad. A rendelkezésre álló könyvtárak segítségével könnyedén létrehozhatunk JavaScript alapú blokkláncot.
- Valós idejű kommunikáció a weben. Mind videó, mind audio streaming szolgáltatások hozhatók létre JavaScriptben a WebRTC nyílt forráskódú projekt segítségével.
- Microservice alkalmazások. A Seneca egy lehetséges példa, amely microservice alapú alkalmazások létrehozását segíti.
A JavaScript bizonyos feladatok elvégzésére optimális, míg más feladatokra csupán alkalmas. Értelemszerűen a nagy számításigényű feladatok (pl. karakter animáció, 3D-s árnyékolás) elvégzésére a JavaScript messze nem optimális. Ugyanakkor a JavaScript képességei és futtatókörnyezete folyamatosan fejlődik, így újabbnál újabb felhasználási lehetőségek merülnek fel, ahol a JavaScript megbízható alternatívát nyújt más nyelvekhez képest.
Amint egy felhasználási lehetőség megoldhatóvá válik JavaScript segítségével, számíthatsz egy méretes és lelkes nyílt forráskódú közösség támogatására, és akár ipari támogatottságra is. Ezáltal a JavaScript programozó szakma további fejlődési lehetőségeket biztosít számodra.
JavaScript dominancia a munkaerőpiacon
Megjegyzés a magyar kiadáshoz: Ennek a fejezetnek az első változata angol nyelven jelent meg, így itt most nemzetközi trendekkel foglalkozunk. Magyarország számos területen nagyjából öt évvel van elmaradva a nemzetközi trendekhez képest. Így a Python és a JavaScript helyett Magyarországon ma még a Java dominál. Ez viszont változni fog, mert Magyarország rendre leköveti a nemzetközi trendeket.
Ugyanakkor nem véletlenül teszünk elérhetővé a magyar nyelvű anyagok mellett angol cikkeket is. Hiszünk abban, hogy a nemzetközi piacon több lehetőséged van megfelelő fizetés vagy szabadúszó munkák megszerzésére, és ehhez kiváló lehetőséget.
Mit is jelent ez a szempontodból? Mire igazán befutsz a karrieredben, feltehetőleg akkorra a magyar trendek elérik a mai nemzetközi helyzetet. Ezáltal az alábbi leírás kicsit a jövőt is előrevetítheti. Emellett ne feledd, hogy a JavaScript jelenleg egyeduralkodó a kliens oldalon, és a felhasználói élmény (UX – User Experience) előretörésével a JavaScript fejlesztés megkerülhetetlen az életben maradást megcélzó cégeknél. Remélem egy nap az Oracle is rájön erre, mert az előző munkahelyemen a HR rendszerük kezelése képzett szoftverfejlesztőknek is hatalmas fejtörést okozott.
Hackerrank közvéleménykutatás, 2019
A 2019-es HackerRank közvéleménykutatás a következő tanulságokkal szolgált:
Hatalmas a szakadék a munkaadói kereslet és a fejlesztők keretrendszerekben való jártassága között. A legnagyobb szakadék Reactban volt: a munkaadók 38,38%-a keresett React fejlesztőket, míg a kínálat csak 25,77%. A szűkösség felfelé viszi a fizetéseket, alacsonyabb a verseny, és több a lehetőség.
- A 2018-as változatban volt egy pont, ahol a munkaadók igényeiről tudhattál meg többet. Eszerint önmagadat is képezheted, mert a cégek lényegesen nagyobb hangsúlyt fektetnek a tapasztalatra (90.6%), a portfóliódra (72.7%), mint a végzettségedre. Megfelelő marketing mellett a tapasztalat megszerezhető azáltal, hogy saját projekteket fejlesztesz, amelyeket a portfóliódba teszel. Ez azt jelenti, hogy a JavaScript fejlesztővé válás legfőbb korlátozó tényezője te magad vagy. Senki másnak nincs irányítása a sorsod felett. Nincsenek befolyásos emberek, egyetemek, még szakmai gyakorlatra és tanúsítványokra (certifications) sincs szükséged. Saját tapasztalatom alapján Berlinben több tíz saját magát képző szoftverfejlesztővel dolgoztam együtt, akik több pénzt vittek haza, mint egy átlagos berlini. Sok más városra igazak ezek az elvek. Ha nem szeretnél otthonról elköltözni, akkor rendelkezésedre áll a távmunka, ami a 21. században már egy valós lehetőség. Külföldi színvonalon keresel, és ha megfelelően strukturálod az ügyfeleiddel való viszonyt, még a KATA adózás alapján az általad megkeresett pénz 90%-a nálad marad. Azaz több, mint havi nyolcszázezer forintot kereshetsz adózás után, miközben ezért jó eséllyel még heti negyven órát sem kell dolgoznod. Ha csak egy 30 eurós órabért nézünk, és átváltjuk 9000Ft-ra, kevesebb, mint 1350 óra alatt bruttó 12 millió forintot keresünk. Alkalmazottként jó eséllyel kevesebb, mint évi 240 napot dolgozol. Ebből következik, hogy 30 eurós órabér mellett munkanaponként 5.625 órát kell dolgoznod.
- A TypeScript a JavaScript típusos változata. 2019-ben a Go, Kotlin, és Python után a TypeScript a negyedik helyen áll azok között a nyelvek között, amelyet a szoftverfejlesztők 2019-ben meg szerettek volna tanulni. Ez valószínű elhomályosította a JavaScript iránti keresletet, mert megoszlottak a válaszok a két nyelv között. Mi hozzátesszük, hogy a TypeScript ismeretéhez szükséges a JavaScript tudás is.
StackOverflow közvéleménykutatás, 2019
A 2019-es StackOverflow közvéleménykutatás hasonlóan bíztató eredményeket hozott:
A Stackoverflow közönségében a JavaScript a legnépszerűbb nyelv, 67,8%-os részesedéssel. A HTML és a CSS áll a második helyen 63,5%-kal.
Három JavaScript keretrendszer áll az összes elérhető keretrendszer élén: React.js (74,5%), vue.js (73,6%), és Express (68,3%).
Bár az elérhető JavaScript programozó fizetések alacsonyabbak, mint sok más területen, véleményem szerint ezek a számok félrevezetőek. A megfelelő tudással rendelkező fejlesztők ugyanis egy kalap alá vannak véve az alacsonyabb tudású fejlesztőkkel. Ez sokkal inkább jellemző a JavaScript nyelvre, mint más nyelvekre. Saját tapasztalatom alapján nem ritka, hogy egy JavaScript első interjún a jelentkezők 70%-a elbukik. Nem azért, mert nehéz az interjú, hanem azért, mert annak a töredékét sem tudják, amit ebben a könyvben olvashatsz. Ezzel szemben egy C++ interjún sokkal többen átmennek az első interjún, mert nagyon kevesen táplálnak reményt egy megalapozatlan próbálkozásra, hiszen ha valamilyen csoda folytán fel is vennének egy képzetlen C++ fejlesztőt egy munkahelyre, pár héten belül bebizonyosodna, hogy alkalmatlan bármilyen használható munkára.
A fizetésekkel kapcsolatban javaslom, hogy végezz kutatást a payscale.com és a glassdoor.com oldalakon. Keress olyan JavaScript fejlesztői fizetéseket és sávokat, amelyek jellemzőek arra a tudásra, amit elsajátítasz.
Bár a felvevőpiac számít, napjainkban nehéz a JavaScript megtanulásával rosszul járni. Emellett várható, hogy a JavaScript népszerűsége tovább nő.
Összefoglalás:
- A JavaScript és a JavaScript keretrendszerek nagy népszerűségnek örvendenek
- A JavaScript programozó iránti kereslet nagyobb, mint a kínálat
Miért könnyebb ma a JavaScript programozó élete, mint eddig bármikor?
A JavaScript fejlesztővé válás gazdasági hátterének áttekintése után levonhatjuk a következtetést, hogy mind kliens oldalon, mind szerver oldalon megfelelően nagy a kereslet. Ugyanakkor a világ összes pénze sem kárpótolna, ha a fejlesztői élmény rossz lenne.
A JavaScript nyelv elsajátítása ma könnyebb, mint eddig bármikor. Összehasonlításképp érdemes visszaemlékezni arra, hogy évekkel ezelőtt több frusztrációval kellett a JavaScript nyelvet megtanulni vágyó fejlesztőknek:
- Lassabb számítógépeken dolgoztunk
- A nyelv szabványa kiforratlanabb volt, amelynek következménye, hogy
if
–else
ágakban különböző böngészők különböző megoldásait kellett használnunk, hogy működőképes kódot kapjunk, - Az ES5 felhasználói élménye jelentősen rosszabb volt, mint az ES2015 és későbbi változatoké,
- A JavaScript nyelvet kevesen vették komolyan,
- A böngészőkben lévő fejlesztőkörnyezet és a hibakeresési eszközök fejletlenek voltak,
- Kevés nyílt forráskódú szoftver állt rendelkezésre, amelyek javarészt alacsony megbízhatósággal működtek,
- Nem voltak jó integrált fejlesztőkörnyezetek, vagy JavaScript fejlesztéshez megfelelő szövegszerkesztők.
A fenti pontokat leellenőrizheted, ha egy tapasztalt JavaScript programozó véleményét kéred ki, aki 15 éve a szakmában van. Azóta a JavaScript teljes átalakuláson ment át.
Ha problémába ütközöl, kérheted egy lelkes és megfelelő méretü nyílt forráskódú közösség segítségét. Sok projekt mögött ipari támogatás áll, pl. a Google és a Facebook is jó eséllyel megbízható JavaScript megoldásokat hoz létre. A szabványosítás folyamatának gyümölcseit 2015 óta éves rendszerességgel élvezhetjük. Megállapíthatjuk, hogy a JavaScript történetének legjobb korszakát éljük. És a jövőben további fejlődést várhatunk.
Emellett mi is elindítottunk egy JavaScript alapjaival foglalkozó videótréninget. A lejátszási listát itt találod.
Ha a videótréning anyagát írott formában is meg szeretnéd tekinteni, vagy érdekel a több, mint 60 JavaScript feladat megoldása, az alábbi képre kattintva rendeld meg a Modern JavaScript a Gyakorlatban című könyvet.