Tipy a triky
10.02.2019
Lubo Herkoo
Jak se nepředávkovat návody
Tak. Rozhodl ses naučit programovat (na learn2code jsi správně!). Je jedno, jestli chceš být Web Developer (FrontEnd, BackEnd), chceš se vzdělávat v konkrétním jazyce (PHP, JavaScript, Java, C#), nebo ses ještě nerozhodl, a chceš se jen naučit programovat.
I když kniha má své kouzlo, můžeš ji číst i elektronicky, s videem to však jde nejrychleji. Tvoji rodiče si při pohledu na Tebe možná myslí, že mrháš časem, Ty však víš, že investuješ do sebe. Správně!
Nad kurzy můžeš strávit dlouhé hodiny. Některé z nich mají i více modulů. Každý má však i svůj konec. Záměr autora kurzu přece nebyl získat sledovanost pro jeho videa, ale chtěl tě něco naučit.
Možná ses už ocitl v tom začarovaném kruhu, kdy po ukončení jednoho kurzu hledáš hned další, který tě posune na vyšší úroveň. A pak další a další.. Na vyšší úroveň však už tutoriály a přepisování kódu z obrazovky nestačí. Ani jednoduché zadání lektorů z video kurzů nejsou dostačující. Na vyšší úroveň je třeba praxe, je třeba tvořit, pracovat na projektech, vytvářet portfolio.[Pokud se chceš opravdu posunout v programování vpřed, pusti se do zajímavého projektu.]
Portfolio programátoraV zajímavém CV nemusí být mnoho projektů. Ten, kdo ho bude číst ví, jestli Tvé portfolio obsahuje zajímavé projekty, kde ses setkal s nějakými výzvami. Při absolvování kurzů si možná vytvořil jednoduchou aplikaci pro správu poznámek v Markdown formátu. Nebo sociální síť, Twitter podle tvé chuti.
Všechno jsou to však projekty, které každý zná a ví, že najdeš kopec zdrojů jako takovou aplikaci napsat a tvorba takového projektu byla jen jakýmsi light fitness pro tvou hlavu.
Nejdůležitější na tom však je, že ty projekty nejsou tvé. Tvůj projekt přece začíná prázdnou složkou, možná vytvořením index.html souboru, pokračuje nekonečným Google hledáním řešení tvých front-end nebo back-end problémů, implementacemi tvých vylepšení, tvých řešení, testů a refactoringu tvého kódu. V repozitáři vidět, jak dlouho jsi na projektu pracoval a jak se projekt vyvíjel.
Při práci na projektech nestojíš na jednom místě, ale tvoříš, učíš se a rosteš.[Při práci na projektech nestojíš na jednom místě, ale tvoříš, učíš se a rosteš.]
Na čem tedy začít makat?Každý programátor si dobré nápady na aplikace chrání. Návštěva programátorského fóra s otázkou typu
“Nemáte náhodou nápad na nějaký zajímavý projekt?”
bude spíše cílem posměchu než zdrojem nápadů pro tvé projekty. Nezoufej, mám pro Tebe několik rad, jak svůj mozek nenechat oddychovat příliš dlouho.
Projekty jsem nevymyslel sám, většinou jsou to projekty inspirované stávajícími aplikacemi nebo všeobecně známá zadání. Přidal jsem k nim však také odkazy na dokumentaci, aby si netrávil čas hledáním kde a jak začít.
Některé projekty možná nekorespondují s tvojí ideovou představou a mohou být méně zajímavé, když se však rozhodneš na něm pracovat získáš hned několik výhod:
• Nestojíš na jednom místě, ale tvoříš, učíš se, rosteš,
• setkáváš se s problémy (věř mi, bude jich čím dál tím méně), na které hledáš řešení,
• objevuješ nové způsoby řešení problémů, tvoje stará řešení už nestačí, nebo jsou neefektivní.
Level 1 - jednoduché projektyLunch picker
• Taková appka již existuje, ale udělej vlastní verzi. Podstata je, že vždy když se neumíš rozhodnout, kam s kámoši půjdeš na pivo, nech to na výpočetní sílu.
• Zadanie môže mať dve úrovne: První úroveň je, že databázi míst na „zábavu“ si vytvoříš sám a appka náhodně vybere některou z nich. Druhá úroveň by byla, pokud použiješ některé stávající API (Google Reviews), které tě umí lokalizovat a databázi získáš odtamtud.
Collection tracker
• Publikuj svou sbírku "čehokoli" ve formě katalogu. Promysli strukturu každé položky, zkus je kategorizovat, implementovat vyhledávání. Jednoduchý projektík o něčem, co tě skutečně baví.
• Zadání může mít dvě úrovně: První ve formě jednoduché MVC aplikáce s Bootstrapom, napsaná v Laraveli nebo RubyOnRails. Větší skiller si může troufnout navrhnout API a design implementovat v některé JS library - VueJS, React.
Spoiler blocker pro články
• Znáš to – píšeš recenzi některého oblíbeného filmu nebo knihy a nechceš čtenáře tvého textu nepříjemně překvapit vyzrazením děje, nebo klíčové informace. Podobně jako fungují "Zobrazit více" odkazy, můžeš takovou informaci ukrýt i pod "Spoiler alert" odkaz. Spoiler v textu můžeš oddělit pomocí data atributu pro tvůj <p> element: <p data-spoiler="true">Spoiler text...</p>.
• Zadání může mít dvě úrovně: První ve formě jednoduchého inline javascriptu, který spustíš někde na konci svého textu pomocí <script> tagu. Druhá úroveň ve formě malé knihovny s využitím Module Pattern, kterou může použít ve svém Wordpressu kdokoli.
Tax forecaster
• I když politici se nás snaží přesvědčit, že si zasloužíme jistoty, jedinou jistotou v životě jsou daně. Navrhni nějakou jednoduchou appku, která bude sbírat částky tvých freelance faktur na základě vzorce, který zjistíš online (a naučíš se přitom i proč platíš tolik na daních).
• Zadání může mít dvě úrovně: První úroveň je samotný jednoduchý výpočet – zadáš číslo a dostaneš hodnotu, kterou zaplatíš státu. Druhou úrovní může být databáze s historií tvých FA a implementace grafů, kde můžeš s pomocí knihovny D3.js vylíčit pěkné reporty, kolik jsi vydělal a jak se tvůj výdělek vyvíjel. Pokud tě vystrašila dokumentace D3.js, můžeš se zkusit pohrabat v knihovnách, které používání D3js zjednodušují.
FlashCard generator
• Pokud jsi ve stádiu učení (co bys měl být neustále) a snažíš se zapamatovat si některé důležité informace, koncepty nebo cokoli, osvědčená technika pamatování si věcí jsou FlashCards. Navrhni appku, která si z databáze nebo JSON objektu vybere pole dvojic, kde prvním prvkem dvojice bude nějaký stručný popis a druhým prvkem bude informace, kterou si máš zapamatovat. Zde je inspirace.
• Zadání může mít dvě úrovně: První je implementace, jakou použili v ThoughtBot – tedy informace, kterou se snažíš naučit se jen objeví pod heslem. Druhou úrovní může být využití CSS pro zajímavou animaci, aby to vizuálně vypadalo jako opravdové „otočení karty“.
Level 2 - středně náročné projektyBring your umbrella
• Pokud nestíháš ráno sledovat počasí, automatizuj to. Napiš appku (nejvíce se asi hodí mobilní appka, ale užitečná může být i webová aplikace), která tě lokalizuje as využitím API ti připomene, aby sis nezapomněl vzít sebou deštník - v okolí tvé lokality bude totiž pršet. Webová appka ti může poslat e-mail oznámení.
• Zadání může mít dvě úrovně: První může být aplikace bez grafického rozhraní. Druhou může být plnohodnotná weather appka přizpůsobená tvým potřebám a grafickým nárokům.
Music suggestion app
• Spotify má také své API. To můžeš použít k vytvoření seznamu skladeb, který budeš tvořit na základě poslouchaných skladeb, jejich žánru a jiných dostupných dat. Takhle získáš data o skladbě, kterou uživatel právě poslouchá. Tu je dokumentace, jak pracovat s playlistem.
Expense tracker
• Ve formě mobilní appky nebo webové aplikace můžeš vytvořit také svůj tracker příjmů a výdajů. Jejich kategorizace a kreslení grafů by mělo být samozřejmostí. Pokud se ti podaří vyřešit problém manuálního zadávání bločků, dej mi vědět – do takové aplikace rád zainvestuji. V Datamolino už vědí jak na to.
• Největší challenge u tohoto projektu je asi UI/UX – aplikace by se mohla učit mé zvyky a inteligentně mi podsouvat data (kategorizaci, tagy) podle historie mých nákupů při vytváření jednotlivých položek. Na základě těchto tagů a kategorií mi oznámit, kde bych mohl příště ušetřit.
Downtime tracker
• Pokud máš oblíbený web, nebo plánuješ několik svých projektů, můžeš testovat, jestli náhodou tvé aplikace nemají nějaký problém. Jednoduchým scriptem přistoupíš na URL své aplikace a pokud skript nevrátí HTTP Response 200, tak tě tracker notifikuje emailem, že se něco děje.
• Zadání může mít dvě úrovně: První úrovní může být notifikace emailem. Druhou úrovní může být notifikace pomocí SMS brány (Twilio), nebo web hook do tvého Slacku - pokud používáš slack.
Level 3 - náročnější projektySlack bot
• Znáš-li Slack a inspiruje tě automatizace, programování botů je nyní in. Některé vývojářské týmy denně absolvují "standup" - odpoví na jednoduché otázky týkající se aktuálního projektu/zadání (na čem pracují, v jakém jsou stádiu, zda se na něčem zdrželi a podobně). S pomocí Slack API můžeš vytvořit jednoduchého bota, který kontaktuje vývojáře z tvého týmu a zeptá se jich pár otázek. Jejich odpovědi můžeš sesbírat a vyhodnotit v jedné zprávě, kterou odešleš do #dev kanálu.
Microlearning app
• Denně bys měl věnovat nějaký čas svému vzdělávání – abys jako programátor rostl. Pokud se učíš například React nebo VueJS - můžeš zkusit použít (nebo napsat vlastní) web scrapper a získat tak jednotlivé sekce dokumentace. Denně ti tvoje microlearning aplikace může poslat jednu sekci/stránku z této dokumentace e-mailem ke studiu.
Web scraper
• Najdi svůj oblíbený e-shop a zkus vytvořit vlastní databázi jeho produktů, kategorií spolu s obrázky. Web scraping je zajímavým a ne jednoduchým tématem pro programátory, protože ke každému webu, který chceme scrapovat musíme přistupovat individuálně.
Hint: Před tím, než se pustíš do scrapování některé domény, zkontroluj v nazev-domeny.cz/robots.txt, zda náhodou doména nemá blokovaných některých botů.
Quiz Maker
• Pokud se nudíš, můžeš přispět ik efektivitě našeho školství. Když jsem učil já, učitelé používali Hot Potatoes jako jejich testovací platformu. Nebo vytištěné testy s kolonkami. Vstupem do tvé quiz platformy může být JSON, který bude obsahovat vhodně zvolenou strukturu testovacích otázek, možných odpovědí a označení správné odpovědi.
• Zadání může mít tři úrovně: První může být vygenerování testu z holého .json souboru. Druhou může být vytvoření administračního rozhraní, kde si testující dotazy a možné odpovědi vykliká ve formuláři. Třetí úrovní může být implementace různého typu testovací otázky (jedna správná odpověď, více správných odpovědí, dopsání správné odpovědi, seřazení do správného pořadí, vytvoření správných párů, ...)
Browser extension
• Nastuduj jak pracují browser pluginy a zvýš svou produktivitu blogováním distraktorů. Inspirací ti může být BlockSite – výborný extension pro blokování stránek.
Blokování stránek však nemusí být jediný tip na doplněk do prohlížeče. Doplňky jsou fajn pro zvýšení produktivity, tedy různé poznámkové doplňky, časovače (pomodoro), pořízení snímku z aktuální stránky a leccos možné.
Programátorské výzvy - algoritmické úkolyPokud nehledáš nápad na projekt, ale raději by ses zdokonalil v řešení algoritmických úkolů, mám tu něco i pro Tebe:
1. Advent of code
• Adventní kalendář programátora (každý rok obsahuje nová zadání). Obsahuje 25 zadání orientovaných na procvičování algoritmického myšlení. Ideální pro ranní probuzení mozku, některé úkoly však mohou zabrat více času. Součástí je i leaderboard, tam se já raději ale nedívám.
• Zadání můžeš řešit v kterémkoli jazyce
2. Project Euler
• Podobně jako Advent of Code, i toto je sbírka zadání, která jsou však už jen archivem. To ovšem neznamená, že neobsahuje dostatek zadání - je jich tam téměř 650. Při každém zadání je uveden i počet lidí, kteří zadání vyřešili.
• Zadání můžeš řešit v kterémkoli jazyce
3. Daily Coding Problem
• Toto je mailinglist, který ti každý den pošle jeden programátorský problém, který můžeš rozlousknout. Problémy z této banky pocházejí z pracovních pohovorů ve firmách, jako jsou Google, AirBnB, Facebook, Apple a různé jiné. Jejich obtížnost je proto někdy dosti vysoká. Pokud se ale připravuješ na pracovní pohovor, tyto úkoly ti mohou pomoci.
• Nevýhodou je, že k řešením se dostaneš až když si je předplatíš.
Abychom to shrnuli. Hodnota každého programátora se ukrývá v jeho portfoliu. Jsou to právě tvé vlastní projekty, které tě budou reprezentovat na pohovoru, které tě odliší od konkurence. V článku jsme ti poskytli tipy na zajímavé projekty, které obohatí tvé CV, ale především posunou tě dál, postaví před nové výzvy a překážky. A to jako dobrý programátor určitě potřebuješ.