Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions content/Abstract.cz.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Anotace

Všechny programy jsou data. Některá data jsou interpretována jako hodnoty, jiná
jako typy těchto hodnot a další jako instrukce pro zpracování prvních dvou.
Jakákoli paradigmata a programovací techniky jsou jen způsobem, jak vytvořit
metadata, která dávají pravidla a posloupnost toku zpracování jiných dat.
Multiparadigmatické programování bere to nejlepší ze všech paradigmat a
sestavuje z něj syntaktické konstrukce, které umožňují popsat předmětnou oblast
jasněji a pohodlněji. Vysokoúrovňové DSL (doménové jazyky) promítáme do
nízkoúrovňových strojových instrukcí prostřednictvím mnoha vrstev abstrakcí. Zde
je důležité reprezentovat úkol co nejúčinnějším způsobem pro zpracování na
úrovni stroje, nikoli fanaticky následovat jedno paradigma. Nejúčinnější je ten,
který s menším počtem vrstev a závislostí, nejlépe čitelný, udržovatelný a
upravitelný pro člověka, který zajišťuje spolehlivost kódu a testovatelnost,
rozšiřitelnost, opětovnou použitelnost, jasnost a flexibilitu konstrukcí metadat
na každé úrovni. Věříme, že takový přístup nám umožní získat jak rychlé první
výsledky ve vývoji, tak i neztrácet výkon při velkém toku změn ve fázích, kdy
projekt již dosáhl vysoké zralosti a složitosti. Pokusíme se zvážit techniky a
principy programování z různých paradigmat prizmatem metaprogramování a změnit
tím, ne-li samotné softwarové inženýrství, ale alespoň jeho chápání novými
generacemi inženýrů.
6 changes: 6 additions & 0 deletions content/Book.cz.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module.exports = {
title: 'Metaprogramování',
subtitle: 'Multiparadigmatický přístup v\nsoftwarovém inženýrství',
copyright: '© Timur Shemsedinov, Společenství Metarhia',
location: 'Kyjev, 2015 — 2022',
};
1 change: 1 addition & 0 deletions content/Book.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ module.exports = {
languages: {
en: require('./Book.en.js'),
ru: require('./Book.ru.js'),
cz: require('./Book.cz.js'),
},
title: {
bold: true,
Expand Down
112 changes: 112 additions & 0 deletions content/Index.cz.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
# Obsah

1. Ú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
2. 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
3. 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 sad
3.8. Odhad výpočetní složitosti
4. 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
5. 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
6. 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
7. 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ů
8. 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
9. 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
6.7. Cibulová (onion) nebo vícevrstvá architektura
10. 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)
11. 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
12. 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
13. 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
23 changes: 23 additions & 0 deletions content/Introduction.cz.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Úvod

Neustálé přehodnocování své činnosti, i té nejjednodušší, by mělo provázet
inženýra celý život. Zvyk zapisovat si své myšlenky slovy a zdokonalovat své
formulace v tom hodně pomáhá. Tento text se objevil jako moje fragmentární
poznámky, psané v různých letech, které jsem shromažďoval a mnohokrát kriticky
korigoval. Já jsem často nesouhlasil sám se sebou, když jsem si znovu četl pasáž
poté, co chvíli ležela. Proto jsem na textu pracoval tak dlouho, dokud jsem sám
nesouhlasil s tím, co bylo napsáno po dlouhé době držení materiálu. Bylo mým
úkolem psát co nejstručněji a velké fragmenty jsem opakovaně přepisoval, když
jsem zjistil, že by se daly vyjádřit stručněji. Struktura textu a obsah se
začaly objevovat po prvním roce výuky, ale v desátém ročníku jsem se rozhodl
šířit materiály nejen ve formě otevřených videopřednášek, jak jsem to dělal už
asi pět let, ale i ve formě textu. To umožnilo všem ze společenství Metarhia
podílet se na tvorbě knihy, díky čtenářům rychle objevovat překlepy a
nepřesnosti, a také pro mnohé je formát knihy prostě pohodlnější. Aktuální verzi
naleznete na https://github.com/HowProgrammingWorks/Book, bude neustále
aktualizována. Žádosti o opravy a doplnění směřujte v angličtině na
[issues](https://github.com/HowProgrammingWorks/Book/issues), nové nápady
zasílejte v libovolném jazyce na
[discussions](https://github.com/HowProgrammingWorks/Book/discussions), vaše
vlastní doplňky a opravy by měly být provedeny formou pull-request do repositáře
knihy.
8 changes: 8 additions & 0 deletions content/Links.cz.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
## Odkazy

- Autor: https://github.com/tshemsedinov
- Telegram: https://t.me/HowProgrammingWorks
- Cvičení:
https://github.com/HowProgrammingWorks/Index/blob/master/Exercises.ru.md
- Glosář:
https://github.com/HowProgrammingWorks/Dictionary/blob/master/Fundamentals.ru.md
Loading