diff --git a/03-typing/03-typing.tex b/03-typing/03-typing.tex
new file mode 100644
index 0000000000000000000000000000000000000000..2f3dad4640054a74582d28f99d2776848f423fd5
--- /dev/null
+++ b/03-typing/03-typing.tex
@@ -0,0 +1,154 @@
+\documentclass{beamer}
+\usepackage[utf8]{inputenc}
+\usepackage[czech]{babel}
+\usepackage{palatino}
+\usepackage{verbatim}
+\usetheme{Warsaw}
+\title{Programování 2: Typové anotace}
+\author[Martin Mareš]{Martin Mareš\\\texttt{mj@ucw.cz}}
+\institute{Katedra Aplikované Matematiky\\MFF UK Praha}
+\date{2020}
+\setbeamersize{text margin left=5mm}
+\setbeamersize{text margin right=5mm}
+\begin{document}
+\setbeamertemplate{navigation symbols}{}
+\setbeamertemplate{footline}{}
+\setbeamerfont{title page}{family=\rmfamily}
+\shorthandoff{"}
+
+\begin{frame}
+\titlepage
+\end{frame}
+
+\input ../slidemac.tex
+
+% ----------------------------------------------------------------------
+
+\begin{frame}{Proč a nač?}
+
+Jak se programovací jazyky chovají k~typům dat:
+
+\begin{itemize}
+\item {\bf statické} typování -- typ mají proměnné a funkce
+\item {\bf dynamické} typování -- typ mají hodnoty
+\end{itemize}
+
+~
+
+Obojí má své výhody i nevýhody.
+
+~
+
+K~čemu třeba jsou užitečné statické typy:
+
+\begin{itemize}
+\item Lepší dokumentace\\(např.: funguje {\bf math.exp} na komplexní čísla?)
+\item Kontrola konzistence typů před spuštěním programu
+\item Napovídání v~editorech
+\end{itemize}
+
+~
+
+Dnešní Python umí kombinovat statické a dynamické typy~\dots
+
+\end{frame}
+
+% ----------------------------------------------------------------------
+
+\begin{frame}{Typové anotace}
+
+{\tt\color{blue}
+def f(x: int, y: str) -> int:\\
+~~~~return x + len(y)
+}
+
+\smallskip
+
+Čteme: {\bf f} je funkce, parametr {\bf x} je typu {\bf int}, {\bf y} typu {\bf str},\\
+vrací výsledek typu {\bf int}.
+
+~
+
+{\tt\color{blue}
+a: int = 42
+}
+
+\smallskip
+
+Proměnné {\bf a} jsme deklarovali typ {\bf int}.
+
+~
+
+Python sám typy nekontroluje (to dělají samostatné type checkery),
+ale pamatuje si je:
+
+\smallskip
+
+\py{%
+f.\_\_annotations\_\_
+}{%
+\{'x': int, 'y': str, 'return': int\}
+}
+
+\py{%
+help(f)
+}{%
+Help on function f in module \_\_main\_\_:\\
+f(x: int, y: str) -> int
+}
+
+\end{frame}
+
+% ----------------------------------------------------------------------
+
+\begin{frame}{Složitější typy}
+
+{\tt\color{blue}
+from typing import List\\
+def g(seznam: List[str]) -> None:
+}
+
+\smallskip
+
+Parametrizovaný typ pro seznamy.
+
+~
+
+{\tt\color{blue}
+from typing import Optional\\
+def center(s: str, šíře: Optional[int]=80) -> str:
+}
+
+\smallskip
+
+Buď {\bf int} nebo {\bf None} (též chybí-li parametr při volání).
+
+~
+
+{\tt\color{blue}
+Class Třída:\\
+~~~~def metoda(self, něco: int):
+}
+
+\smallskip
+
+{\bf self} automaticky dostane typ {\bf Třída}.
+
+~
+
+
+{\tt\color{blue}
+from typing import Sequence, TypeVar\\
+T = TypeVar("T")\\
+def choose(s: Sequence[T]) -> T:
+}
+
+\smallskip
+
+Funguje pro jakoukoliv homogenní posloupnost (seznam/tuple/\dots).
+
+\end{frame}
+
+% ----------------------------------------------------------------------
+
+\end{document}
diff --git a/03-typing/Makefile b/03-typing/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..282b93663b50fa0bf855c41dcdf7c1f4e79fa291
--- /dev/null
+++ b/03-typing/Makefile
@@ -0,0 +1,3 @@
+SLIDES=03-typing.pdf
+
+include ../Makerules
diff --git a/03-matplotlib/notes b/04-matplotlib/notes
similarity index 100%
rename from 03-matplotlib/notes
rename to 04-matplotlib/notes