- Úvod 1.1. Přístup k výuce programování
1.2. Příklady v jazycích JavaScript, Python a C
1.3. Modelování: abstrakce a opětovné použití
1.4. Algoritmus, program, syntaxe, jazyk
1.5. Dekompozice a separace odpovědnosti
1.6. Přehled specializace softwarového inženýra
1.7. Přehled programovacích paradigmat - Základní pojmy
2.1. Hodnota, identifikátor, proměnná a konstanta, literál, přiřazení
2.2. Datové typy, skalární, referenční a strukturované typy
2.3. Kontexty a lexikální rozsah
2.4. Operátor a výraz, blok kódu, funkce, smyčka, podmínka
2.5. Procedurální paradigma, volání, zásobník a halda
2.6. Funkce vyššího řádu, čistá funkce, vedlejší účinky
2.7. Uzávěry, funkce zpětného volání, zabalení a události
2.8. Výjimky a řešení chyb
2.9. Monomorfní kód v dynamických jazycích - Stav aplikace, datové struktury a kolekce
3.1. Stavové a bezstavové přístupy (stateful and stateless)
3.2. Struktury a záznamy
3.3. Pole, seznam, sada, n-tice
3.4. Slovník, hashovací tabulka a asociativní pole
3.5. Zásobník, fronta, deque
3.6. Stromy a grafy
3.7. Projekce a zobrazení datových
3.8. Odhad výpočetní složitosti - Rozšířené koncepty
4.1. Co je technologický stack
4.2. Vývojové prostředí a ladění
4.3. Iterace: rekurze, iterátory a generátory
4.4. Stavební bloky aplikací: soubory, moduly, komponenty
4.5. Objekt, prototyp a třída
4.6. Částečná aplikace a curryfikace, skládání funkcí
4.7. Řetězení pro metody a funkce (chaining)
4.8. Mixiny (mixins)
4.9. Závislosti a knihovny - Běžná programovací paradigmata
5.1. Imperativní a deklarativní přístup
5.2. Strukturované a nestrukturované programování
5.3. Procedurální programování
5.4. Funkcionální programování
5.5. Objektově orientované programování
5.6. Programování založené na prototypech - Návrhové antivzory
6.1. Společné anti-vzory pro všechna paradigmata
6.2. Procedurální antivzory
6.3. Objektově orientované antivzory
6.4. Funkční antivzory - Vývojový proces
7.1. Životní cyklus softwaru, analýza předmětné oblasti
7.2. Programovací konvence a normy
7.3. Testování: jednotkové testy, systémové a integrační testování
7.4. Kontrola a refaktoring kódu
7.5. Odhad zdrojů, plán rozvoje a harmonogram
7.6. Analýza rizik, slabá místa, nefunkční požadavky
7.7. Koordinace a úprava procesů
7.8. Průběžná integrace a nasazení
7.9. Optimalizace mnoha aspektů - Pokročilé koncepty
8.1. Události, časovače a EventEmitter
8.2. Introspekce a reflexe
8.3. Serializace a deserializace
8.4. Regulární výrazy
8.5. Memoizace
8.6. Návrhové vzory: Factory, Poll
8.7. Typovaná pole
8.8. Projekce
8.9. I/O (vstup-výstup) a soubory - Architektura
9.1. Dekompozice, pojmenování a spojování
9.2. Interakce mezi softwarovými komponentami
9.3. Propojení přes jmenné prostory
9.4. Interakce s voláními a zpětnými voláními
9.5. Interakce s událostmi a zprávami
9.6. Rozhraní, protokoly a smlouvy
9.7. Cibulová (onion) nebo vícevrstvá architektura - Základy paralelních výpočtů
10.1. Asynchronní programování
10.2. Paralelní programování, sdílená paměť a synchronizační primitiva
10.3. Asynchronní primitiva: Thenable, Promise, Future, Deferred
10.4. Koprogramy, gorutiny, async/await
10.5. Adaptéry mezi asynchronními kontrakty
10.6. Asynchronní a paralelní kompatibilita
10.7. Přístup předávání zpráv a model aktorů
10.8. Asynchronní fronty i asynchronní kolekce
10.8. Bezzámkové datové struktury (lock-free) - Pokročilá programovací paradigmata
11.1. Generické programování
11.2. Událostní a reaktivní programování
11.3. Programování automatů: konečné automaty (stavové stroje)
11.4. Jazykově orientované programování a DSL
11.5. Programování toku dat
11.6. Metaprogramování
11.7. Dynamická interpretace metamodelu - Databáze a perzistentní úložiště
12.1. Historie databáze a navigační databáze
12.2. Klíč-hodnota a další abstraktní datové struktury
12.3. Relační datový model a ER-diagramy
12.4. Bezschémové, objektově orientované a dokumentově orientované databáze
12.5. Hierarchické a grafové databáze
12.6. Sloupcové databáze a databáze v paměti
12.7. Distribuované databáze - Distribuované systémy
13.1. Meziprocesová komunikace
13.2. Bezkonfliktní replikované datové typy (CRDT)
13.3. Konzistence, dostupnost a distribuce
13.4. Strategie řešení konfliktů
13.5. Konsensuální protokoly
13.6. CQRS, EventSourcing