Zpět na blog
Vzdělávání

Studijní plán pro budoucího Java programátora

Skillmea
19.06.2020
8 minut čtení
Studijní plán pro budoucího Java programátora
Rozhodl ses, že se staneš Java programátorem. Dobrá volba. V následujících řádcích si přečti, kde začít, co budeš potřebovat a jak dosáhnout své vysněné mety. V tomto článku se nebudeme věnovat definici programování ani tomu, který programovací jazyk si zvolit. Budeme předpokládat, že ses z jistých důvodů rozhodl právě pro Javu. Těmi důvody může být například:
  • popularita Javy v programátorském světě
  • poptávka po Java programátorech na trhu práce
  • chceš naprogramovat Javovskou webovou nebo desktopovou aplikaci
    slyšel jsi, že Java je vhodná pro začátečníky v programování

Popularita jazyka Java

Podle indexu PYPL je Java druhým nejpopulárnějším jazykem na světě. Žebříček PYPL je sestavován podle toho, jak často jsou tutoriály daného programovacího jazyka vyhledávány na Googlu. I podle jiného indexu, TIOBE je Java druhá v žebříčku popularity, takže vybral sis správně.

Poptávka po Java programátorech

Poptávku po Java programátorech zjistíš z pracovních portálů, například. na Profesia.cz, robime.it nebo dalších. V době psaní tohoto článku bylo na Profesi více než 120 nabídek při zadání pozice "Java programátor" (z celkových 480 programátorských pozic). Když si tedy vybíráš programovací jazyk, je důležité, aby i firmy v něm dělaly své projekty, abys měl z dlouhodobého hlediska dostatek příležitostí. Java tuto podmínku bez problémů splňuje.

Co chceš programovat?

V Javě lze programovat desktopové i serverové aplikace, vytvářet dynamické webové stránky, lze je používat pro přístup k datům, umožňuje realizovat složité distribuované výpočty a mnoho dalšího. Jevu využiješ i při programování Android aplikací, takže její využití je téměř neomezené.

Jazyk vhodný pro začátečníky?

Java je tady s námi už pěkně dlouho, takže existuje mnoho zdrojů ke studiu, ať už ve formě online kurzů, knih nebo jiných možností. Java programátorů je také dostatek, takže pravděpodobně nebudeš mít problém sehnat někoho na mentoring, rozhodnete-li se jít touto cestou. Java odvozuje svou syntaxi z jazyka C a mnoho dalších jazyků také odvozuje svou syntaxi z jazyka C. Takže když se naučíš Javu, ovládnout jazyky jako C#, C++ nebo JavaScript bude jednodušší. Java je objektově orientovaný jazyk, tyto základní koncepty tedy umíš přenést i do jiných jazyků. V Javě existuje spousta různých knihoven - grafika, sockety, a mnoho dalšího. Naučit se Javu je relativně jednoduché, umíš ji využívat ve světě desktopových nebo webových Java aplikací, ale také ve světě mobilních Android aplikací. Jevovský kód jednou zkompiluješ a běží všude (díky JVM!).
Java má i své nevýhody, jako například. to, že píšeš velmi mnoho kódu. Příklad, když chceš něco vypsat, v Javě to zapíšeš:
System.out.println(“Hello”);

V Pythonu by stačilo napsat jen print(“Hello”).

Peniaze

Kolik vydělávají Java programátoři? Podle portálu platy.sk je to v rozmezí 1350 až 2765 Eur. Záleží na tvých znalostí, let praxe, projektů za sebou, regionu a dalších proměnných.

Studijní Java plán

Java základy

Nejprve se nauč úplné základy jazyka Java. Potřebuješ vědět, co je to třída, co je to metoda, co je proměnná, jak se píší příkazy, co je terminál, výpis, podmínka, cyklus, jak pracuje Java s pamětí a jiné základní znalosti. S těmito základy umíš psát jednoduché příkazy a trénovat. Doporučujeme ti vyzkoušet náš online kurz Java pro začátečníky, který máš k dispozici zdarma.

Java pokročilý

Po zvládnutí základů přistoupíš k pokročilým částem jazyka jako jsou výjimky, OOP (objektově orientované programování), práce s Java třídami, rozhraní, rekurze, funkcionální programování pomocí Lambda výrazů, stream API, anotace, reflexe, kolekce, generické programování a podobně. Je toho dost, pro úspěšné zvládnutí zákoutí Javy si namixuj tento koktejl našich kurzů:
  1. Java a OOP pro začátečníky
  2. Java pro pokročilé

SQL

Velké množství aplikací pracuje se databázemi. Abys i ty v aplikacích uměl správně používat databázi, musíš se naučit základy jazyka SQL. Pomocí SQL příkazů umíme z databáze číst data, zapisovat data, měnit data, nebo je mazat. Když budeš studovat jak pracovat v aplikacích s databázemi, setkáš se s pojmem CRUD. To není nic jiného než create, read, update a delete. Tedy základní operace. Yablko udělal online kurz na SQL databázy MySQL a SQLite, jsou v něm vysvětlovány i základy samotného SQL-ka, tak si to nastuduj.

Git

Při práci na projektech musíš mít přehled o změnách ve tvém nebo kolegovém kódu. V průběhu času budeš mít určitě spoustu verzí svého programu. Jako programátor budeš pracovat v týmu. Každý bude pracovat na své části programu a poté si tyto své verze sloučíte dohromady.

Nejen pro tyto úkoly budeš používat Git. Git je nejrozšířenější verzionovací nástroj a určitě stojí za to naučit se jej používat. Každý programátor musí umět pracovat s Gitem, nauč se to i ty pomocí tohto online kurzu.

Java junior programátor

Na závěr tvého vzdělávání v Javě nesmíš vynechat témata jako Maven, Servlety a ORM - JPA (Hibernate). Když se ti do hlavy dostanou i tyto pojmy, je z tebe junior programátor. Online kurz pro aspirující Java junior programátory najdeš zde.

Bonus: Spring framework + Spring Boot

Aby se ti se vším pracovalo snadněji a chceš přeskočit pár kroků v přípravě aplikace, chceš mít po ruce spoustu pomocných technologií, tak určitě sáhneš po Spring frameworku. Spring je nejpoužívanější javovský vývojářský framework současnosti. Pokud si otevřeš pracovní nabídky zaměřené na Javu, tak tam téměř určitě najdeš požadavek, abys ovládal Spring.

Spring usnadňuje enterprise java vývoj, což jej činí první volbou u projektů libovolné velikosti. Vývoj Springu začal, když bylo velmi komplikované začít vyvíjet enterprise aplikace v enterprise edici jevy. Tvůrci Springu toto využili a vytvořili nástroj, který je vysoce používaný a usnadňuje spoustu věcí.

Tento blog měl za cíl představit ti jazyk Java a ukázat, co všechno potřebuješ jako příští Java programátor vědět. Kromě Javy je to SQL, Git a ideální také Spring framework. Stát se Java programátorem se ti může jevit jako nedosažitelná meta, opak je ale pravdou. Java od začátku navrhovaná tak, aby tvá křivka učení byla pokud možno co nejstrmější.
Skillmea
🥇 Sme jednotka v online vzdelávaní na Slovensku.
Na našom webe nájdeš viac ako 300 rôznych videokurzov z oblastí ako programovanie, tvorba hier, testovanie softwaru, grafika, UX dizajn, online marketing, MS Office a pod. 
Vyber si kurz, ktorý ťa posunie vpred ⏩

Mohlo by tě zajímat

Eratostenovo síto
Vzdělávání
30.05.2020
Skillmea

Eratostenovo síto

V předchozím blogujsme se zabývali prvočísly. Ukázali jsme si ukázku programu, který rozeznal, zda zadané číslo je prvočíslem nebo ne. Dnes bych vám chtěl na konkrétním příkladu ukázat, jak řeší podtitulek tohoto blogu a tedy zjistit prvočísla na definovaném intervalu přirozených čísel, přičemž horní hranici intervalu bude zadávat uživatel. Spodní hranicí intervalu bude 0, která samozřejmě není prvočíslem a to z toho důvodu, že prvočíslo je dělitelné číslem 1 a sebou samým. Z toho vyplývá, že 0, i když je dělitelná číslem 1, není dělitelná 0, protože výraz 0/0 není definován. Přestože by si někdo myslel, že výsledek by mohl být roven číslu 1, není tomu tak. Nula prostě nemůže dělit žádný výraz. Pojďme teď trochu dál. Už v minulém blogu jsem vyvodil závěr, že ani 1 není prvočíslo a to proto, že je dělitelné 1 a sebou samým, což je opět číslo 1. A 1 a 1, nejsou dva různé faktory. Podmínka, která vylučuje, že 0 a 1 nejsou prvočísla, je samozřejmě v mém programu ošetřena. Co ale ostatní čísla, která se nacházejí na intervalu, jehož horní hranici zadal uživatel. Na tuto otázku nám přímo dá odpověď jednoduchý algoritmus, který nese název Eratostenovo síto. Eratostenes z Kyrény byl mimo jiné řeckým matematikem, který působil v dávné Alexandrii přibližně 280 let. před Kristem. Kromě toho, že vypočítal obvod země, definoval také algoritmus, který jsem pro vás implementoval ve vyšším programovacím jazyce C++. Předtím, než si detailně rozebereme program napsaný v jazyce C++, si algoritmus ukážeme na následujících přirozených číslech: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19. Máme tedy posloupnost, která je na začátku definována číslem 0 včetně a na konci číslem 20, které se nachází již mimo intervalu posloupnosti. A to je právě ta horní hranice, která byla výše zmíněna. Umístíme tuto posloupnost do jednořádkové tabulky, která v mém programu bude reprezentována vektorem celých čísel (vektor typu int). Jako poznámku chci dodat, že budeme tedy používat třídu knihovny STL, kterou je vektor. Vektor je entita, z níž se lépe manipuluje než s polem. Právě proto je tento článek určen těm čtenářům, kterým je alespoň poněkud známá problematika vektorů. Těm, kteří nejsou obeznámeni s problematikou vektorů, doporučuji nejprve prostudovat typ size_t, třídu vector a členskou metodu třídy vector push_back(). Potom se s elánem mohou tito čtenáři pustit do tohoto blogu. Ale zpět k našemu definovanému problému. Mějme tedy zmiňovanou posloupnost:[Image] V této tabulce vyznačme modrou barvou skutečnost, že 0 a 1 nejsou prvočísla:[Image]K indexům, na kterých se nacházejí čísla 0 a 1 se už tedy nebudeme vracet. Pojďme se podívat na číslo 2. O tomto čísle víme, že je nejmenší prvočíslo na tomto intervalu, což je prvotní podmínkou k tomu, abychom vyřešili podtitulek tohoto blogu. Ostatní prvky (čísla) posloupnosti budeme testovat Eratostenovým sítem – to znamená, že budeme nyní odstraňovat násobky čísla 2. Jelikož číslo 3 není násobkem čísla 2, projde Eratostenovým sítem. Zaznačme tedy do tabulky násobky čísla 2 červenou barvou.[Image]Vidíme, že v jednom kroku odstranil algoritmus (Eratostenovo síto) čísla 4, 6, 8, 10, 12, 14, 16 a 18. Zároveň se již nebudeme žádným způsobem vracet k indexu čísla 2. S předchozí tabulky je také očividné, že číslo 3 je prvočíslem. Pojďme nyní odstranit z tabulky jeho násobky a zaznačme tuto skutečnost zelenou barvou.[Image] V dalším kroku nám algoritmus odstranil číslo 6, 9, 12, 15, 18, které prvočísly nejsou. Ano, zelenou barvou jsme označili i některá čísla, která byla v předchozím kroku odstraněna násobkem čísla 2. To však nemění nic na skutečnosti, že tento krok nám odstranil z posloupnosti další čísla, kterými jsou čísla: 9 a 15. Po provedení zmiňovaného kroku vidíme , že číslo 5 zůstalo vyznačeno žlutou barvou. Číslo 5 je tedy prvočíslo, protože prošlo Eratostenovým sítem. Když bychom v následujícím kroku odstranili násobky čísla 5. zjistíme, že již byla čísla 10 a 15 odstraněna násobkem jiného čísla. Kdy tedy algoritmus skončí? Bude to tehdy, dokud se skutečně nedostaneme k číslu 19. Číslo 19 už nemá za úkol odstraňovat žádný násobek, protože se za ním v naší tabulce nic nenachází. Dosažení jeho indexu určitou interační proměnnou je podmínkou pro skončení algoritmu, ačkoli se již ve stavu prvočísel nebo odstraněných čísel nic nemění. Vyberme nyní všechna čísla označená žlutou barvou z naší tabulky:[Image] Zůstanou nám čísla, která jsou zajisté prvočísly. A tak jsme se dostali k výsledku našeho algoritmu, kterými jsou čísla 2, 3, 5, 7, 11, 13, 17 a 19. Pro kontrolu si můžete porovnat tato čísla s prvočísly uvedenými v jiných zdrojích, ale určitě dostanete tentýž výsledek. Pojďme nyní do detailu rozebrat následující zdrojový kód napsaný v jazyce C++, který je implementací verbálního vysvětlení algoritmu uvedeného výše. Jazyk C++ nám nabízí další možnosti, jak zefektivnit výpočet. Jsou to například. skoky v programu, které můžeme provést pomocí klíčových slov break a continue. Ale k tomu později. Pojďme pěkně popořadě od prvního řádku. Na řádku 1 máme direktivou preprocesoru přidaný hlavičkový soubor iostream.h. To znamená, že do tohoto řádku se vloží obsah souboru iostream.h. Podobně máme na řádku 2 a 3 vloženy stejnou direktivou hlavičkové soubory vector.h a string.h. Na řádku 4 je deklarováno, že budeme v celém zdrojovém kódu, který tvoří jeden soubor používat jmenný prostor std a tudíž jej nemusíme explicitně ve funkci main volat, když budeme z něj potřebovat nějakou třídu nebo objekt. Příkladem mohou být objekt cin nebo cout. Na řádku 6 definujeme funkci main a následně na řádku 7 začíná její tělo. Na řádku 8 deklarujeme proměnnou integrálního typu a to konkrétně char s identifikátorem proměnné c_end. Tato proměnná reprezentuje jeden znak, který rozhodne o tom, zda se vnější smyčka po provedení vlastního algoritmu Eratostenova síta ukončí nebo ne. Právě proto je na řádku 89 vyzván uživatel, aby stiskl klávesu a nebo n. Pokud potlačí n, program pokračuje dalším cyklem while smyčky. Pokud potlačí jinou klávesu program skončí. Na řádku 9 je definována nová instance třídy string s identifikátorem sz, která je inicializována na prázdnou hodnotu. Za touto inicializací je na řádku 10 uvedena deklarace proměnné iSZ na typ int bez další inicializace. Na řádku 11 deklarujeme proměnnou typu bool, která bude v programu uchovávat informaci, zda uživatel na výzvu programu odpověděl zadáním validní hodnoty (tedy hodnoty integer), která se bude uchovávat v proměnné iSZ. Pokud uživatel zadá platnou vstupní informaci z okna konzolové aplikace, proměnná is_size_t se nastaví na true, v opačném případě (pokud tedy uživatel nezadá platnou hodnotu z rozsahu integer) proměnná is_size_t se nastaví na hodnotu false. Proměnná is_size_t je na řádku prvotně inicializována na hodnotu false. To reprezentuje stav, že proměnná iSZ nebyla ještě inicializována a to je ve skutečnosti pravda. Na řádku 13 je uvedeno klíčové slovo do. To znamená, že začíná tělo smyčky do while, ve které je jako podmínka uvedena komparace obsahu proměnné c_end se znakem n (viz. řádek 95). Když program přejde dál, dostane se na řádek 14, které otevírá tělo zmíněné smyčky do while, za kterou na řádku 15 začíná smyčka while, což znamená smyčka s podmínkou na začátku každého cyklu. Právě zde se program ptá (srovnává), zda je v proměnné uložena hodnota false. Pokud ano, program pokračuje kladnou větví a vyzve na řádku 17, aby uživatel zadal horní hranici Eratostenova síta. Tato hodnota nebude brána v úvahu při testování čísla na prvočíslo. Na řádku 18 se vstup zadaný uživatelem načte do proměnné (objektu) sz, která je novou instancí třídy string. Načtení proběhne pomocí metody getline(), která má dva parametry a to objekt cin a objekt sz. Na řádku 20 následuje blog kódu try a catch, které slouží k rozpoznání validity hodnoty zadané uživatelem do objektu sz. Ve větvi try se program pokouší konvertovat hodnotu v objektu sz na hodnotu celého čísla, které reprezentuje délku intervalu, na kterém hledáme Eratostenovým sítem všechna prvočísla. Pro tuto konverzi se použije funkce stoi, což ve zkratce znamená string to integer (v českém jazyce string na integer). Po konverzi se na řádku 24 ještě testuje, zda uživatel nezadal na vstupu číslo 0. Pokud ano program nastaví proměnnou is_size_t na hodnotu false a skočí pomocí příkazu continue na opětovně vyhodnocené podmínky dalšího cyklu smyčky while. Jelikož v proměnné is_size_t je opět false program pokračuje ve smyčce while, kdy na řádku 17 je uživatel znovu vyzván k zadání horní hranice intervalu Eratostenova síta. Takto může být program zacyklen, dokud uživatel nezadá platnou hodnotu na vstupu konzolové aplikace. Pojďme se podívat nyní na to, když uživatel nezadá hodnotu z rozsahu integrálního typu (např. neplatnou hodnotu „hsfu“). Již asi tušíte, že se nejedná o hodnotu integrálního typu, ale o nesmyslné znaky, které sice může uživatel zadat, protože tyto hodnoty lze přiřadit typu string, ale konverze této hodnoty na hodnotu typu integer se nezdaří. Právě proto je v našem programu umístěn na řádku 34 blok catch, kteří tuto výjimku zachytí. A co se vlastně stane dál? No totéž, co v případě zadání 0, to znamená, že se nastaví hodnota false do proměnné is_size_t a program skočí pomocí příkazu continue na začátek smyčky while, kde sa znovu v podmínce vyhodnotí, zda má pokračovat výzvou uživatele k zadání validní hodnoty horní hranice Eratostenova síta, a jelikož je negace hodnoty v proměnné is_size_t true, program i tak učiní. A takto bude program dokola vyzývat uživatele k zadání platné hodnoty. V případě, že uživatel zadá platnou hodnotu, program skočí do větve try, kde pak skočí do záporné větve příkazu if (klauzule else na řádku 29), kde se již hodnota is_size_t nastaví na true. Tím pádem program v tomto cyklu vyskočí ze smyčky while, protože již nesplňuje podmínku pro další provedení cyklu. Když uživatel zadal platnou horní hranici Eratostenova síta, může se tato informace použít k alokaci vektoru o délce iSZ (alokace vektoru s identifikátorem vNumberVektor), což je implementováno na řádku 41. Na řádku 42 je alokován vektor o délce 0 (vektor s identifikátorem) . Do tohoto vektoru budeme ukládat prvočísla, která projdou Eratostenovým sítem. Délku 0 má vektor proto, že je možné do něj přidávat prvočíslo po prvočísle, až když část algoritmu učiní rozhodnutí, zda číslo, které se vybírá z vektoru vNumberVektor je prvočíslem nebo ne. Na řádku 44 začíná for smyčka, která je ve svých jednotlivých cyklech řízena iterační proměnnou i, která se v každém cyklu inkrementuje, dokud nedosáhne hodnoty iSZ. Tato for smyčka ve svém těle naplňuje vektor vNumberVektor čísly od 0 po 19 (protože horní hranice, kterou jsme vymezili v ukázce je 20). Vlastní algoritmus Eratostenova síta začíná na řádku 49, kde je iterační proměnná na začátku cyklu inicializována na hodnotu 2. Proč je tomu tak? Protože na prvních dvou indexech vektoru (index 0 a 1) jsou uložena čísla 0 a 1 a ta nepatří do množiny prvočísel. Toto je základní idioma, kterou je třeba si uvědomit. Kdybychom totiž dělili nulou, program by vyhlásil chybu. Kdybychom dělili jedničkou, nedostali bychom nic jiného než původní číslo. Právě proto se testují pouze čísla od hodnoty 3. Proč od 3, když iterujeme od 2? Jedná se o prvotní podmínku, kterou jsem zmiňoval. Pokud tedy číslo na indexu 2 se bude rovnat 2, přidáme toto číslo do vektoru vPrimeVektor, protože o něm víme, že je nejmenší prvočíslo. Ostatní čísla už budeme testovat, to znamená, že pokud bude index větší nebo roven 3, program testuje konkrétní číslo tak, že dělí toto číslo čísly uloženými ve vektoru vPrimeVektor (což jsou prvočísla) se zbytkem. To znamená, že bere v úvahu zbytek po dělení čísla prvočíslem. Pokud je tento zbytek po dělení různý od nuly, našli jsme další prvočíslo a to uložíme za vnitřním cyklem řízeným iterační proměnnou j (k tomu nám poslouží proměnná typu bool, do které při nalezení prvočísla uložíme hodnotu true, která indikuje tento stav), do vektoru vPrimeVektor, který reprezentuje hledaná prvočísla. Uložíme jej na poslední index pomocí metody push_back, což nám zároveň zaručuje uspořádání hledaných prvočísel od nejmenšího po největší. Pokud by byl zbytek po dělení roven nule, testované číslo není prvočíslem a to znamená, že nastavíme proměnnou flag na false, skočíme pomocí klíčového slova break na konec for smyčky (iterační proměnná j). Do vektoru vPrimeVektor se v tomto případě nic neuloží, protože v proměnné flag je uložena hodnota false. vnější smyčka for se ukončí, když jsou otestována všechna čísla uložená ve vektoru vNumberVektor. Posledním testovaným číslem je tedy číslo 19. Po otestování všech čísel následuje zápis prvočísel do okna konzolové aplikace (viz. řádek 78 až 83), k čemuž využijeme objekt cout a smyčku for. K zápisu samozřejmě patří také přechod kurzoru na nový řádek na řádku 85. Potom se do okna konzolové aplikace zapíše výzva, kterou se program uživatele ptá, zda chce program ukončit nebo ne. Pokud uživatel stiskne klávesu n, program pokračuje a uživatel je vyzván k opětovnému zadání horní hranice Eratostenova síta s tím, že do proměnné is_size_t se opět uloží hodnota false. Pokud by uživatel potlačil jinou klávesu (což znamená ukončení programu), program skočí za vnější smyčku while na řádek 97, funkce main vrátí operačnímu systému 0 a celý program končí. Připomínám, že na řádku 98 je pravá programová závorka, která uzavírá tělo funkce main. Výpis programu main.cpp 1: #include <iostream> 2: #include <vector> 3: #include <string> 4: using namespace std; 5: 6: int main() 7: { 8: char c_end; 9: string sz = ""; 10: int iSZ; 11: bool is_size_t = false; 12: 13: do 14: { 15: while (!is_size_t) 16: { 17: cout << "Nacitaj hornu hranicu Eratostenovho sita: "; 18: getline(cin, sz); 19: 20: try 21: { 22: iSZ = stoi(sz); 23: 24: if (iSZ == 0) 25: { 26: is_size_t = false; 27: continue; 28: } 29: else 30: { 31: is_size_t = true; 32: } 33: } 34: catch (const std::exception&) 35: { 36: is_size_t = false; 37: continue; 38: } 39: } 40: 41: vector<int> vNumberVector(iSZ); 42: vector<int> vPrimeVector(0); 43: 44: for (int i = 0; i < (int)vNumberVector.size(); i++) 45: { 46: vNumberVector.at(i) = i; 47: } 48: 49: for (int i = 2; i < (int)vNumberVector.size(); i++) 50: { 51: if (i == 2) 52: { 53: vPrimeVector.push_back(vNumberVector.at(i)); 54: } 55: else 56: { 57: bool flag = false; 58: for (int j = 0; j < (int)vPrimeVector.size(); j++) 59: { 60: if (vNumberVector.at(i) % vPrimeVector.at(j) != 0) 61: { 62: flag = true; 63: } 64: else 65: { 66: flag = false; 67: break; 68: } 69: } 70: 71: if (flag) 72: { 73: vPrimeVector.push_back(vNumberVector.at(i)); 74: } 75: } 76: } 77: 78: cout << "Vypis prvocisel:" << endl; 79: cout << "----------------" << endl; 80: for (int i = 0; i < (int)vPrimeVector.size(); i++) 81: { 82: cout << vPrimeVector.at(i) << " "; 83: } 84: 85: cout << endl; 86: 87: cout << "Chces skoncit [a/n]: "; 88: 89: cin >> c_end; 90: cout << endl << endl; 91: 92: cin.ignore(); 93: is_size_t = false; 94: 95: } while (c_end == 'n'); 96: 97: return 0; 98: }Okno konzolové aplikace u horní hranice Eratostenova síta 20[Image]Na obrázku lze vidět, že výsledná prvočísla se ztotožňují s prvočísly, které jsme vypočítali analytickým způsobem (viz. poslední tabulka v textu). Doufám, že vás příklad a program s Eratostenovým sítem zaujal, stačí už jen, abyste si to implementovali na svém počítači. Tento blog napsal lektor C++ kurzů Marek ŠURKA. Pokud máš nějaké dotazy, napiš je do komentářů.
Jak se tvoří JavaScript
Vzdělávání
02.05.2020
Lubo Herkoo

Jak se tvoří JavaScript

Letos nám frajeři z TC-39 (nevíš-li co TC-39 je, čti dále) naservírují novou verzi ECMAScript specifikace - novinky, které můžeme jako vývojáři používat při programování v JavaScriptu. BigInt, optional chaining, Promise.allSettled, String.matchAll, globalThis a další. O tom, jaké problémy řeší tyto nové funkcionality, si povíme v dalším blogu. Tento text je věnován specifikaci ECMAScript a mimo jiné se dočteš: • proč potřebujeme specifikaci na to, jak implementovat JavaScript Engine v prohlížeči • proč se specifikace nevolá JavaScript, ale ECMAScript a co je to vlastně ta ECMA • jak dlouho trvá, než se nápad nové funkcionality jazyka JavaScript stane jeho součástí ECMAScript?V roce 1995 vyhrál oscar Tom Hanks s filmem Forrest Gump, v rádiích fičel Gansta's Paradise od Coolia a web BBC vypadal takto:[Image] 80% uživatelů internetu surfovalo v prohlížeči Netscape Navigator a Microsoft teprve končil vývoj Internet Exploreru. Pokud ho vůbec někdy dokončili. Ne všichni byli spokojeni s tím, jak web tehdy fungoval: statický obsah, sdílení dokumentů a žádný pohyb. Softwarový inženýr z Netscape - Mark Andreessen - chtěl vytvořit jazyk, který by s lehkostí používali nejen vývojáři, ale také designéři a do webů přinesli špetku interaktivity. Buttony a tak. Brendan Eich (jméno je třeba si zapamatovat - je to frajer) je člověk, který tento programovací jazyk začal tvořit. Prvním pokusem byla implementace jazyka SCHEME do prohlížeče Netscape. Mimochodem - jevisté v SUN Microsystems přemýšleli nad způsobem, jak spouštět Java kód v prohlížeči, čímž také přinesli interaktivitu do webových stránek. Tato implementace však nebyla jednoduchá na používání, a proto zůstala volbou korporátních mastičů. Mocha (takto se jmenovala první verze dnešního JavaScriptu) byla vytvořena jako alternativa pro designéry a vývojáře. Mocha » LiveScript » JavaScript vs JScriptVytvoření první verze Mocha trvalo jen 10 dní. Později byl tento jazyk přejmenován na LiveScript a poté na finální JavaScript. Fun fact: slovo „Java“ se tam nedostalo náhodou – byl to však jen marketingový způsob, jak se svést na popularitě jazyka Java. Internet Explorer chtěl také držet krok s dobou, a proto začali iv MS pracovat na implementaci čehosi, což bylo velmi podobné JavaScriptu. Finální jazyk se jmenoval JScript. Implementace však byla natolik odlišná od JavaScriptu, že tyto implementace nebyly navzájem kompatibilní! Výsledkem byla skutečnost, že nebylo možné vytvořit jeden web, který by fungoval v obou prohlížečích. Tak vznikly tehdy slavné nálepky do footerů: „Best viewed in Internet Explorer“ a „Best viewed in Netscape Navigator“.[Image]Tvořit weby v té době nebyla žádná legrace, vývojáři volali po standardu, který sjednotí implementace JavaScriptu a JScriptu. Proto byl vytvořen standard ECMAScript, který zastřešila organizace ECMA International. Ta fungovala už dávno předtím a jejím úkolem bylo právě vytvářet standardy pro informační a komunikační systémy. Od listopadu 1996 existuje tedy standard ECMAScript, který popisuje, jak má být implementován JavaScript Engine. Fun fact: standard nemůže nést ikonický název JavaScript, neboť na toto slovo až do dnešního dne vlastní copyright firma Oracle. ECMA-262 a TC-39 - whaaat?ECMA International zastřešuje mnoho standardů, ten, který se týká implementace JavaScriptu obdržel číslo 262. ECMA-262 je tedy název standardu, který popisuje implementaci JavaScriptu. Není to žádné příjemné čtení, aha. Komise (rozuměj: živé bytosti, lidé), která rozhoduje o tom, jaké nové funkce bude nová verze JavaScriptu obsahovat, dostala zase název TC-39. Členem této komise není leckdo. Jsou to frajeři – vybraní lidé, kteří zastupují velké firmy působící na online trhu (Facebook, PayPal, Google, Amazon, Mozilla...)[Image] Nová funkcionalita v JS - schvalovací procesČlenové TC-39 organizují meetingy (většinou online) každé dva měsíce. Cílem těchto meetingů je dopodrobna rozkecat a zanalyzovat, které funkce bude obsahovat nová verze ECMAScript, nebo jaké opravy budou v této verzi provedeny. Zajímavé je, že tato komise funguje na principu shody – téměř všichni členové komise musí souhlasit s návrhem, aby se jím byť jen začali zabývat. Zcela zajímavé je například sledovat, jak se dostala do JavaScriptu podpora pro BigInt – brutálně velká čísla. Protože v JavaScriptu jsme dosud mohli používat jen strašně velká čísla. Stage 0Každý návrh začíná na takzvané nulté úrovni – Stage 0. Některý z členů TC-39 vytvoří dokument, který popisuje danou funkcionalitu a jaký problém řeší. Na meetingu členů TC-39 tento problém přednese a členové rozhodli, že např. BigInt je super věc a posunul ho do dalšího Stage-u. Stage 1Stage 1 je parádní úspěch a zároveň to znamená, že někdy v budoucnu bude pravděpodobně dána funkcionalita součástí JavaScriptu. Všem (nebo téměř všem) členům TC-39 se tento nápad líbí a souhlasí s ním. Může to však trvat roky. BigInt funkcionalita musí být ještě podrobněji popsána, musí obsahovat příklady, jak se bude používat a analýzu, zda to nepřinese i nějaké problémy. Stage 2Takzvaný Draft. V této fázi je víceméně jisté, že funkcionalita bude součástí JavaScriptu a proto musí být ještě podrobněji popsána. Toto je také stage, kdy se přemýšlí nad vhodnou syntaxí a různými detaily používání nové funkcionality. V případě BigInt funkcionality např. členové rozhodli, že bude vhodné, pokud BigInt číslo bude obsahovat na konci znak n - aby prohlížeč (engine) věděl, že pracuje s brutálně velkým číslem, a ne jen strašně velkým číslem. const bigIntCislo = 12345n; const obycajneCislo = 12345; Stage 3Funkcionalita je téměř hotová a potřebuje feedback od vývojářů a vnějšího světa. Všichni testují BigInt ve svých programech. Tvůrci internetových prohlížečů se předbíhají, kdo z nich bude podporovat BigInt jako první – protože implementovat BigInt už má smysl. Stage 4Vše je otestováno a BigInt je součástí specifikace ECMAScript. Hotovo. ZáverCelý proces např. v případě BigInt trval 2 roky. Umím si představit, že schvalování některých ještě komplexnějších funkcionalit může trvat ještě déle. Frajerům z TC-39 ale můžeme děkovat za to, že do JavaScriptu se dostávají opravdu jen věci, které dávají smysl.
Amazon a Skillmea přinášejí bezplatné webináře a online kurzy pro děti
Vzdělávání
21.04.2020
Skillmea

Amazon a Skillmea přinášejí bezplatné webináře a online kurzy pro děti

Dokud jsou školy zavřené, prožívají nelehký čas rodiče, učitelé i děti. Ale díky jednoduchým nástrojům se domácí vzdělávání může stát zajímavým a kreativním zážitkem. Tuto myšlenku si osvojili také ve společnosti Amazon a rozhodli se nabízet bezplatné online webináře pro děti. Amazon navázal partnerství se sdružením Learn2Code, které pro širokou veřejnost poskytuje kurzy tvorby webstránek, programování webových a mobilních aplikací a další témata. Jejich cílem je zpřístupnit mladé generaci digitální vzdělávání, učí je rozumět marketingu, pracovat s grafikou a videem. V rámci partnerství společnost Amazon zastřešuje sérii webinářů Code Jungle Česko pod taktovkou zkušených odborníků z praxe z Learn2Code. Všechny webináře, které se budou konat dvakrát do týdne, vždy v pondělí a čtvrtek budou pro všechny účastníky díky spolupráci s Amazonem zcela zdarma až do konce června 2020. Webináře jsou určeny pro děti přibližně od 10 let. Během webinářů se seznámí s programováním v jazyce Scratch a vytvoří si několik atraktivních her. První se bude konat ve čtvrtek 23. 4. 2020, od 15:00. Každý z webinářů bude trvat 75 minut a lze je absolvovat i jednotlivě. Záznam všech webinářů bude dostupný na Learn2Code YouTube kanálu. „Prostřednictvím těchto bezplatných online webinářů, chceme oslovit děti, které zůstávají doma, a podělit se s nimi o znalosti a dovednosti budoucnosti kreativním a poutavým způsobem,“ řekla Blanka Fijołek, CEE PR & komunitní manažerka společnosti Amazon. Druhou částí této spolupráce je poskytnutí všech online kurzů pro děti od Learn2Code účastníkům od teď až do konce června 2020 bezplatně. Jedná se o 15 online kurzů, které sestávají z 30 vyučovacích hodin a účastníci dostávají i domácí úkoly k procvičení probírané látky. Kurzy slouží také jako podklad pro učitele informatiky. „Jsme velmi rádi, že díky spolupráci s Amazonem můžeme poskytnout všechny probíhající online kurzy pro děti až do konce června zdarma“, řekl Marián Kristel marketing & operations z Learn2Code a dodal: „žijeme v mimořádné situaci a takto chceme pomoci rodičům a také naučit zábavným způsobem děti něco nového a užitečného“. Kompletní seznam kurzů a přihlašování najdete zde. O webinářích Code Jungle Česko:Webináře budou probíhat 2x týdně online, přes nástroj na webináře ZOOM. Zaměřeny jsou na programování her v prostředí Scratch. Rozsah vyučovací jednotky je 60 minut plus 15 minut prostor vyhrazený pro otázky. Během webinářů se budou programovat velké hry. Flappy Bird, Pacman, Super Mario a další. Věk účastníků se doporučuje minimálně 10 let. Potřebný je vlastní laptop nebo počítač. Do konce června 2020 zorganizujeme téměř 20 webinářů. Jednotlivé webináře budou zveřejněny na YouTube a budou dostupné pro všechny zdarma. Kompletní seznam webinářů a veškeré informace naleznete zde. Jak se můžete zúčastnit webinářů?UPDATE: Webináře Code Jungle byly ukončeny.

Nezmeškej info o nových kurzech a speciálních nabídkách