Denník N

Ako som sa za 6 mesiacov naučil programovať (a našiel si lepšiu prácu)

Moje praktické skúsenosti s objektovo-orientovaným programovaním a následnom uplatnení sa na trhu práce.

Kto som?

Mám 35 rokov a 15 rokov som pracoval zväčša v technologických firmách, kde som robil buď technickú podporu (tech support), alebo spracovanie objednávok (order management), prípadne kombináciu týchto dvoch. Nemám IT vzdelanie, špeciálne znalosti a nebol som ani extra dobrý v matematike. Poznám len prostredie Windows a aj to možno len o trochu lepšie, než hocikto, kto bežne pracuje s počítačom. Moje doterajšie zamestnania sa točili okolo riešenia jednoduchých problémov anglicky a nemecky hovoriacich zákazníkov v rôznych call centrách, alebo zadávania dát do počítača v shared-service centrách. Žijem v Prahe.

Čo som chcel dosiahnuť?

Sprvu som bol spokojný s tým, že s kombináciou angličtina-nemčina a so všeobecnou orientáciou v IT sa vo veľkom meste vždy dala nájsť práca. Chvíľu trvalo, kým som si uvedomil, že táto výbava ma bude vždy predurčovať len na rovnaký typ zamestnania. Niektorí moji kolegovia mali vysokoškolské vzdelanie, iní nie, väčšinu však spájalo, že sa buď naučili nemčinu (alebo iný cudzí jazyk) v útlom veku ako ja, alebo to bol ich materinský jazyk. Obvykle necítili potrebu rozširovať svoje znalosti, keďže stále mohli žiť z toho, čo sa naučili – bezprácne a bezbolestne – ešte v detstve. Videl som dve možnosti: buď sa zameriam na svoju, ehm, kariéru v call centre, kde by som však stále robil rovnakú prácu ako na nemanažérskom poste, akurát by k nej pribudlo riešenie personálnych otázok, alebo sa naučím nejakú technológiu, vďaka čomu by som sa dostal preč zo začarovaného kruhu pre mňa často nudnej a frustrujúcej práce.

Aký bol môj plán?

Chcel som si osvojiť konkrétnu informačnú technológiu, ktorá je známa a žiadaná. Ktorá by to však mala byť? Zameriam sa na Linux, aby som mohol robiť systémového administrátora? Naučím sa SQL, aby som rozumel databázam? Alebo sa sústredím na siete, aby som sa uplatnil trebárs v oblasti kybernetickej bezpečnosti? Zo širokého spektra dostupných technológií, ktoré sa dali naučiť zadarmo a online, ma najviac lákalo programovanie, konkrétne jazyk Java, pretože, na rozdiel od vyššie zmienených, považujem písanie kódu a riešenie problémov programátorským prístupom za kreatívnu činnosť, ktorá mi je osobnostne najbližšia. Chcel som robiť prácu, ktorá ma baví.

Prečo práve Java?

Ostrieľaní programátori sa zrejme uškrnú a v duchu si povedia, že Scala a Kotlin onedlho aj tak Javu odtisnú na perifériu programovacieho sveta, faktom však zostáva, že Java ako jazyk existuje vyše 25 rokov a je v nej údajne napísaných asi 7% biznis aplikácií. Keď uvážime, že existujú stovky programovacích jazykov, tak to s Javou vôbec nevyzerá zle. Vďaka JVM (Java Virtual Machine) je to cross-platformový jazyk, čo znamená, že nemusíte upravovať zdrojový kód svojho programu, aby fungoval na Windowse, Linuxe, alebo na OS X. V Jave sa dajú vytvárať webové aplikácie, ktoré bežia na serveri a o ktorých zrejme ani neviete, že sú napísané v tomto jazyku, pretože ich používate cez svoj webový prehliadač (napr. internet banking), ale aj desktopové aplikácie, ktoré bežia iba lokálne na vašom počítači, alebo appky pre Android. Java je univerzálna a, keďže je rokmi overená, mnoho veľkých spoločností ako banky a energetické podniky ju stále používa ako primárny jazyk pre svoje serverové prostredie. Okrem toho, kvalitná dokumentácia a početná komunita okolo Javy zaručuje, že skoro všetky otázky a nejasnosti, na ktoré človek môže naraziť, už niekto riešil. Odpovede sa dajú ľahko vygoogliť.

Ako to prebiehalo?

Môj prvý pokus s Javou prebehol približne pred dvoma rokmi, kedy som si kúpil pár učebníc. Popri vtedajšej práci a iných povinnostiach, po večeroch a cez víkendy, som začal čítať Thinking in Java (B. Eckel). Dostal som sa asi do štvrtiny knihy, kde som sa zasekol pri kapitole o polymorfizme. Z tejto učebnice som ani po viacnásobnom prečítaní nebol schopný pochopiť, čo vlastne polymorphism znamená v praxi. Knihu som odložil a začal som pozerať tutoriály, pomocou ktorých som napísal svoju prvý (ak nerátame cvičenia typu Napíš program na súčet dvoch čísel) program. Fungoval iba v príkazovom riadku (v textovom móde), pretože nemal grafické rozhranie, tzv. GUI. Neskôr som sa naučil Swing, čo je staršia knižnica vizuálnych komponentov (novšia sa volá JavaFX), takže som dokázal napísať program, ktorý sa dá spustiť dvojklikom a beží v okne, má textové polia, ktoré môže používateľ vyplniť, tlačítka (button), niekoľko drop-down menu (combobox) a štvorčeky, ktoré sa dajú odfajknúť (checkbox). Obe verzie môjho programu mali vyriešiť ten istý problém – mesačný rozpis služieb lekárov v nemocnici. Po roku a pol polovičatého a prerušovaného učenia sa sa mi naskytla možnosť zostať 6 mesiacov doma a venovať sa výlučne len programovaniu. Aj napriek vzmáhajúcej sa covidovej pandémii, zavretým škôlkam a dvom malým deťom som sa rozhodol, že toto je ideálna príležitosť vrhnúť sa na Javu naplno, tentokrát poctivo, poriadne a od začiatku. Najprv som si prečítal učebnicu Head First Java (Sierra, Bates), potom Head First Design Patterns (Freeman, Robson), a nakoniec Modern Java in Action (Urma, Fusco, Mycroft). To, čo mi nebolo jasné, som hľadal buď priamo na stránkach Oracle vo voľne dostupnej dokumentácii, prípadne na fórach, osobných stránkach vývojárov, alebo na Youtube. Ak som nenašiel odpoveď v jednom zdroji, hľadal som ďalšie. Platilo, že som neupustil od témy, až kým som nemal pocit, že som ju pochopil.

Ako to dopadlo?

Keďže som vedel, že samotná Java nie je príliš užitočná bez znalosti databáz a ďalších pridružených technológií (najmä frameworkov), prvý mesiac som sa venoval hlavne MySQL. Ďalšie tri mesiace som študoval teóriu zo zdrojov v predošlom odstavci. Potom som za približne 7 týždňov vytvoril desktopovú aplikáciu, ktorá úspešne vyriešila relatívne komplikovaný problém so službami. Môj program ešte nie je dokonalý (kód by mohol byť prehľadnejší a taktiež zrejme obsahuje priveľa statických metód) a stále je to work in progress, ale je funkčný. Stiahnuteľná verzia a viac informácií o mojom prvom programe sa dajú nájsť tu.

Nastal čas zúročiť novozískané schopnosti a nájsť si prácu

Behom prvých dvoch týždňov hľadania vysvitlo, že polročná programátorská prax (aj napriek mojej fungujúcej aplikácii, ktorou som sa prezentoval v životopise), ma znevýhodňuje. Ak sa na tú istú pozíciu hlásilo 5 alebo viac uchádzačov a každý z nich mal 2 alebo viac rokov praxe, tak môj životopis zvyčajne neprešiel ani len cez HR filter. Zvyčajne som sa ani nedostal k tomu, aby som sa s niekým rozprával o programovaní. Znamenalo to, že najprv som dostával samé zamietavé odpovede: Ľutujeme, hľadáme alebo našli sme niekoho skúsenejšieho. Okrem toho som zistil, že by som potreboval ešte pár mesiacov, aby som sa naučil framerowky Spring a Hibernate, ktoré uľahčujú vytváranie webových služieb a aplikácií (najčastejšie využitie Javy). Je málo pravdepodobné, že by vás ako nováčika niekto zamestnal, aby ste vytvárali desktopové programy. Stalo sa však čosi nečakané: Na základe môjho vynoveného LinkedIn profilu ma kontaktovala firma, ktorá hľadala softvérového konzultanta. Nie programátora, ale človeka, ktorý dokáže efektívne poradiť klientovi, prípadne mu dať na výber z viacerých možností, a zároveň tlmočiť jeho priania vývojárskemu teamu. Pôvodne som si myslel, že budem potrebovať jeden až dva roky programátorskej praxe, aby som sa mohol stať konzultantom (keďže som neuvažoval o čisto vývojárskej dráhe), no nebolo to tak. Vysvitlo, že som dosť dobrý už teraz!

Pri hľadaní práce som sa teda zameral na poradenské pozície. Zväčša to znamenalo, že firma ponúka nejaký komplexný, špeciálny softvér, ktorý nie je možné naučiť sa nikde inde, len u nich, a konzultant pomáha zákazníkom konfigurovať daný softvér, prípadne riešiť problémy a tlmočiť ich vývojárom aj s návrhom riešenia. Ukázalo sa, že pri tomto type práce moja krátka vývojárska skúsenosť nie je hendikepom, ale veľkou výhodou. Po niekoľkých pokusoch a týždňoch aktívneho hľadania som si vďaka Jave našiel zaujímavú a perspektívnu prácu v skvelej spoločnosti, a to všetko s nečakaným benefitom – pracovisko je iba kúsok od môjho bydliska, a to je v Prahe vzácnosť. Prilepšil som si tak vo všetkých smeroch, ktoré sú pre mňa v zamestnaní dôležité.

Na záver niekoľko postrehov:

  • ak sa chcete naučiť programovať od nuly, nájdite si zaujímavý projekt, ktorý môžete sami vytvoriť. Odporúča sa tzv. bug tracker, ale v princípe to môže byť čokoľvek. Zo zdrojového kódu vášho projektu však musí byť jasné, že ste ho neskopírovali napríklad zo stackoverflow.com. Cvičenia typu piškvorky vám môžu pomôcť pri učení, lenže v reálnom svete nikoho neohúria. Ak sa však dokážete prezentovať funkčnou aplikáciou, ktorá navyše rieši reálny biznis problém, hoci aj veľmi špecifický, je to bod k dobru.
  • neučte sa len jednu technológiu, ale kombinácie, ktoré sú priamo použiteľné v biznise, napr. Java – MySQL – Spring – Hibernate (+ Maven, REST API atď.). Pozrite sa na pracovné ponuky vo vašej lokalite a uvidíte, ktoré technológie váš potenciálny zamestnávateľ požaduje.
  • urobte si čas na štúdium, vytvorte si priestor a nezabúdajte na prestávky. Pre mňa sú ideálne približne dvojhodinové bloky, počas ktorých sa viem naplno sústrediť, potom moja pozornosť poľavuje a potrebujem krátku pauzu, ísť na vzduch, alebo robiť chvíľu niečo iné.

  • ak niečo hneď nechápete, nevzdávajte to. Nájdite si iný zdroj informácií, ktorý rovnakú tému vysvetlí zrozumiteľnejšie.

  • zapíšte sa na kurz, alebo sa prihláste na programovaciu akadémiu, ak vám to vyhovuje. Asi neexistuje séria prednášok, tutoriál alebo učebnica, ktorá by vás po jednom vypočutí/pozretí/prečítaní naučila všetko, ale ak potrebujete učiteľa, neváhajte a nájdite si vyhovujúci kurz. Určite vám to uľahčí postup. Taktiež existujú programovacie školy, ktoré spolupracujú alebo sú zriadené softvérovou firmou, a tá vám po ukončení kurzu dokáže ponúknuť junior vývojársku pozíciu. Počítajte však s tým, že 95% času, potrebného na osvojenie si jazyka, strávite samoštúdiom.

Podporte najlepšie slovenské vydavateľstvo a prečítajte si moju novú knihu o ovládnutí sveta tu.

Alebo sa mrknite na moju predošlú knihu tu.

Ak sa vám tento článok páčil, zdieľajte ho. Ďakujem.

Teraz najčítanejšie

Richard Brenkuš

V noci som autorom špekulatívnej fikcie, cez deň pracujem v IT. V tomto blogu pôjde najmä o to druhé.