Top 10 skillov programátora
Na akých 10 skillov by si sa mal/a podľa nás zamerať? Rozmýšľali sme nad tým, že keby sme mali niekedy vlastnú firmu a hľadali do nej programátorov, tak týchto 10 skillov by sme si cenili najviac. Skilly nie sú zoradené. Všetky sú rovnako dôležité a každý jeden sa dá trénovať.
Nezáleží na tom, či si frontend alebo backend programátor. Či používaš Vim, nadávaš na Javu, programuješ hry alebo mobilné aplikácie. Pre každého platia tieto skilly rovnako.
Poďme na to.
Analytické myslenie
Čo je to analytické myslenie? Poďme si ho precvičiť. Vieš aké číslo by malo pokračovať?
6, 18, 15, 45, 42, ?
Číselné rady a podobné hádanky precvičujú analytické myslenie. A áno, si dobrý/á, je to stodvadsaťšesť. Ak ti tieto hádanky nikdy nerobili problémy, tak môžeš byť rád/a, lebo máš asi talent. Avšak každý jeden skill sa dá trénovať.
Ako postupujeme pri takejto hádanke? Sledujeme doterajšie „dáta“ a analyzujeme ich. Hľadáme vzory a prepojenia, rozmýšľame nad rôznymi alternatívami, hľadáme riešenie.
Nie je prekvapením, že toto je jeden z najdôležitejších skillov programátorovho repertoáru. V programovaní tento typ myslenia používame veľmi často, možno aj každý deň. Niektorý programátor viac, iný menej. Záleží aj od toho, čo programuješ.
Túto zručnosť trénujeme implicitne pri riešení nie len problémov v programovaní, ale aj napríklad pri plánovaní, riešení sudoku, či skladaní nábytku pomocou Ikea manuálu.
Čím máš lepší tento skill, o to si lepší programátor.
Čítanie a porozumenie kódu
Programátori väčšinou pracujú v tímoch a musia si navzájom čítať kód.. A to platí aj pre programátorov na vlastnej nohe, pretože keď čítajú po sebe kód, ktorý napísali pred mesiacom, tak to je často ako keby ho napísal niekto iný.
Samozrejme, čím je kód čitateľnejší, tým lepšie. Tu pomôže clean code.
Tento bod je avšak o čitateľovi kódu. Čítať kód je jednoduché, porozumenie je už o niečom inom. Prečo je to niekedy také ťažké? Pretože na to treba viacej menších skillov:
- Debugovať
- Dobre poznať jazyk, v ktorom je napísaný daný kód
- Vedieť sa vcítiť do/poznať autora
- Dočasne refaktorovať kód, až kým uvidíš úmysel autora
Super na tom je aj to, že čím lepšie vieš kód čítať, tým lepšie ho budeš vedieť aj písať. Naopak to však úplne neplatí.
Schopnosť učiť sa nové veci
Každý z nás sa vie učiť nové veci, inak by sme nevedeli ani chodiť alebo rozprávať. Ale ide o to, ako rýchlo sa dokážeme naučiť novú vec X, aby sme s ňou dokázali spraviť Y a popritom aj dodržali kvalitu Z.
Programátor sa učí nové veci neustále, veď už len každý deň vychádza nový javascriptový framework. Naučiť sa nové veci ale neznamená prečítať si dokumentáciu a urobiť hello world aplikáciu. Znamená to pochopiť, aké problémy rieši daná knižnica a hlavne ako ich rieši. Syntax je tá posledná vec a zároveň najjednoduchšia na naučenie.
Ak si myslíš, že sa učíš nové veci pomaly, nezúfaj. Čím viac vecí vieš, tým rýchlejšie sa naučíš nové, pretože pravdepodobne so sebou súvisia, alebo sa podobajú. Čím si starší/a ako programátor, tým sa aj rýchlejšie dokážeš naučiť novú technológiu, pretože ju budeš vedieť porovnať s veľa inými, ktoré už poznáš, a tým pádom rýchlejšie spoznáš rozdiely a pochopíš vychytávky.
Ovládanie programátorského jazyka do hĺbky
Vycibrený a skúsený programátor by mal ovládať aspoň jeden programátorský jazyk do hĺbky. Poznať jeho úskalia, antipatterny. Vedieť prečo používať radšej X ako Y. Ak neovládaš ešte žiadny jazyk na 100% tak nevadí, vôbec to neznamená, že si zlý/á programátor/ka. Možno si len zatiaľ nemal/a čas sa to všetko naučiť.
Všeobecné technické znalosti
Medzi tieto znalosti patria napríklad databázy, Git, viacvláknové programovanie, rôzne programovacie paradigmy, kryptografia, operačné systémy či siete.
Toto sú pravdepodobne znalosti, ktoré ti budú chýbať, ak nepôjdeš na vysokú školu informatiky. Jednoznačne záleží na tom, čomu sa venuješ a podľa toho možno vyberať znalosti, ktoré potrebuješ vedieť. Napríklad ak pracuješ na backende tak pravdepodobne ťa bude viac zaujímať viacvláknové programovanie alebo databázy.
Skvelé na týchto znalostiach je to, že sa dajú vždy doučiť, avšak trvá to dlho. Ak ich budeš ovládať veľa, možno ťa kolegovia začnú prezývať „guru“.
Dizajn / Architektúra systému
Rád/a navrhuješ databázové tabuľky? Kreslíš UML diagramy, či rozmýšľaš, ako rozložiť časti kódu tak, aby to dávalo najväčší zmysel? Ak sa ti tieto veci páčia, tak asi budeš dobrý/á v tomto skille.
Niektorí programátori najradšej bušia do klávesnice. Plnia krásne vydefinované úlohy jednu za druhou. Iní radšej vymýšľajú ako to celé prerobiť, alebo v tom lepšom prípade rozmýšľajú, ako zefektívniť existujúce prvky.
Pokročilejší programátori sa vo firmách dostávajú do pozície projektového architekta, pretože ich nadriadení v nich videli potenciál a záujem o tvorbu lepšieho riešenia. Dizajnovať resp. navrhovať softvér je náročné a vyžaduje to veľa skúseností, technických znalostí a kreativity.
Tento skill sa dostal do nášho zoznamu, pretože je veľmi cenný a prínosný. Mať v tíme super programátora je skvelé. Ak sa ten programátor zapája do návrhov riešenia problémov a má nápady, ako zlepšiť existujúce systémy, tak začína byť nenahraditeľným.
Frameworky
Node.js, Vue.js, Spring, Angular, Django, Rails, React a tak ďalej. Asi si už o nich počul/a. Tieto mainstream frameworky sú tu na jednu vec. Zjednodušujú nám prácu.
Každý programovací jazyk má svoj framework, resp. minimálne jeden. Kebyže si chceš nájsť prácu ako Java Developer, tak pravdepodobne budeš robiť so Spring frameworkom. Ak chceš robiť frontend, tak si asi budeš vyberať medzi Angularom, Reactom a Vue.js.
Nemyslíme si, že každý dobrý programátor musí poznať nejaký framework do hĺbky. To nie je až také ťažké. Skill sme zaradili do zoznamu hlavne z praktického dôvodu. Keďže frameworky sa používajú v každej práci, tak ak si v jednom expert , radikálne ti to zvýši tvoje šance na získanie práce s príjemným ohodnotením.
Soft skills
Toto veľa z nás nerado počuje. To ako komunikujeme s kolegami, čo z nás vyžaruje a ako sa prezentujeme, je dôležité. Väčšina z nás chodí niekedy do práce a musí byť v styku s kolegami, či klientami.
Už len to, či prejdeš pracovným pohovorom silno závisí od toho, ako si sa vedel prezentovať, vyjadrovať, a či si im bol jednoducho sympatický. Môžeš byť úžasný/á programátor/ka a mať všetky skilly v tomto zozname, ale keď im nesadneš ako človek, tak ťa proste nezoberú. Programovanie je tímová práca a v tíme treba komunikovať, či sa nám to páči alebo nie. Preto soft skills netreba brať na ľahkú váhu.
Nikto nemá rád nafúkaných vševedov, ktorých musíš prosiť, aby ti niečo vysvetlili. A keď ti to už vysvetlia, takaj tak tomu nechápeš, pretože sa do teba nedokážu vcítiť.
Algoritmy / Algoritmické myslenie
Algoritmické myslenie je spôsob myslenia, v ktorom pomocou jednotlivých, za sebou idúcich krokov vyriešime úlohu. Algoritmus predstavuje už tie jednotlivé kroky. Typickým príkladom algoritmu je recept na varenie:
- Dáme variť vodu
- Do pohára vložíme čaj
- Keď bude mať voda 100 stupňov, tak čaj zalejeme
…
Pri algoritmickom myslení musíme premýšľať ako počítač. Nezabudnúť ani na ten najmenší krok. Všetko zoradiť pekne za sebou.
V tomto bode sú dôležité aj algoritmy a nemyslíme tým žiadne recepty.
Vieš ako funguje binárne vyhľadávanie? Vieš akú má časovú zložitosť? Čo tak merge, insertion alebo bubble sort? Vyhľadávanie do hĺbky a do šírky? Poznáš Dijkstrov algoritmus?
S algoritmami priamo súvisia dátové štruktúry. Listy a mapy ovláda každý, ale použil/a si už zreťazené zoznamy? Zásobníky, rady (queue)? Grafy a stromy?
V robote nebudeš potrebovať každý deň použiť nejaký algoritmus, či fancy dátovú štruktúru. Možno ani každý týždeň. Týmto skillom sa ale môžeš odlíšiť od ostatných. Keď príde na krájanie chleba a bude treba vymyslieť niečo efektívnejšie s čo najmenšou časovou zložitosťou, vtedy sa ukáže, kto je macher a naozaj rozumie počítačom.
Schopnosť vidieť big picture
V práci dostávame úlohy s niekoľkými bodmi, ktoré je potrebné naprogramovať. Na záver samozrejme napísať testy, a potom to dať na review. Lenže čo ak niektoré body nedávajú zmysel? Čo ak sa touto novou fičúrou zavedie bug, na ktorý reporter (ten kto navrhol úlohu) nemyslel? Čo ak je to vlastne kontraproduktívne, keď o ďalšie 2 šprinty chystáme funkcionalitu, ktorá zatieni túto?
Je celkom pohodlné nemyslieť na toto všetko, veď na to mal myslieť analytik s architektom a možno aj tím líder. Prístup „mne je jedno, nakódim čo mi dáte“ môže byť dostačujúci, na konci to neschytáš ty, ale mohol si ušetriť firme čas a peniaze.
Proaktívny programátor, ktorý vidí celý obraz a všimne si nedostatky a nejasnosti je programátor, ktorého si firma mimoriadne cení a určite bude na to myslieť pri pravidelnom zhodnotení.
Tento skill je jeden z najťažšie dosiahnuteľných, pretože sa o ňom nedá naštudovať žiadna kniha, či prejsť stovky tutoriálov. Skúsenosti určite pomáhajú, ale hlavne je potrebné zmeniť spôsob myslenia.
Záver
Koľko skillov si si narátal/a? Musel/a si použiť obe ruky? Ak áno, tak je to paráda. Ak nie, tak aspoň vieš, na čom môžeš zapracovať. Byť programátorom nie je ťažké. Byť výborným programátorom, to už je iná káva.
Tieto skilly sme originálne predstavili v našom podcaste.
Myslíš si, že sme prehiadli nejaký mega dôležitý skill? Alebo súhlasíš s každým jedným skillom? Neváhaj nás opraviť, či vyjadriť súhlas v komente. Alebo nám kľudne aj napíš a môžme o tom pokecať.