\documentclass{beamer}
\usetheme{metropolis}
\usepackage{lmodern}
\usepackage[czech]{babel}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textpos}
\usepackage{tikz,calc}
\usepackage{graphicx}
\usepackage{wrapfig}
\usepackage{color}
\usepackage{mathtools}
\usepackage{hyperref}
\usepackage{epstopdf}
\usepackage{amsmath}
\usepackage{minted}
\hypersetup{
	colorlinks,
	citecolor=black,
	filecolor=black,
	linkcolor=black,
	urlcolor=black
}
\usepackage{pdflscape}

\title{Softwarový projekt z 0 na 95\% a zpět}
\author{Karel Kočí}
\date{17.10.2017}

\begin{document}

\frame{\titlepage}

\begin{frame}{Život projektu  z pohledu vývojáře}
	\begin{itemize}
		\item Zadání
		\item Návrh
		\item Proof of concept
		\item Prvotní implementace
		\item Nasazení
		\item Bugy, refactoring a přidávání/odebírání feature
		\item Next generation
	\end{itemize}
\end{frame}

\begin{frame}
	\center
	\includegraphics[width=5.5cm]{what-your-code-looks-like.png}
\end{frame}

\begin{frame}{Zadání}
	Zodpovídá management ale nečekejte, že vědí co dělají!
	\begin{block}{Co by mělo určitě obsahovat}
		\begin{itemize}
			\item Časový horizont projektu
			\item Software/Hardware omezení
			\item Stěžejní funkcionality
			\item Rozdělení na krátkodobé a dlouhodobé cíle
		\end{itemize}
	\end{block}
	\begin{block}{A co naopak určitě ne}
		\begin{itemize}
			\item Výběr technologií
			\item Popis UX
			\item Přání a myšlenky
		\end{itemize}
	\end{block}
\end{frame}

\begin{frame}{Design}
	Vychází ze zadání a dává ho dohromady vedoucí vývojář.
	\begin{block}{Co by měl určitě obsahovat}
		\begin{itemize}
			\item Přesná technická specifikace jednotlivých funkcionalit
			\item Rozporcování na modulární minimalistické části
			\item Rozplánování dočasných a stálých částí
			\item Rešerše rozhraní ke zbytku systému a všech nutných funkcionalit
			\item Vymezení interakce s uživatelem
			\item Vymezení technologií
		\end{itemize}
	\end{block}
	Design -> uživatelská a vývojářská dokumentace
\end{frame}

\begin{frame}{Předtím než napíšete řádku}
	\begin{block}{Výběr jazyka}
		\begin{itemize}
			\item Co je vhodné
			\item Co se v dané oblasti používá
			\item Co umíte
		\end{itemize}
	\end{block}
	\begin{block}{Výběr knihoven}
		\begin{itemize}
			\item Nepiště si věci sami
			\item Nestavějte kolem jedné knihovny
		\end{itemize}
	\end{block}
\end{frame}

\begin{frame}{Proof of concept}
	\begin{itemize}
		\item Funkční ale nepřívětivé (CLI, žádný frontend)
		\item Implementace pouze stěžejních funkcionalit
		\item Pokud možno předneste zadavateli
		\item Neobtěžujte se testy
		\item Benchmarky
	\end{itemize}
\end{frame}

\begin{frame}{Skládáme základy}
	\begin{itemize}
		\item Build systém
		\item Unit testy
		\item Integrační testy (platforma)
		\item CI testy na jiné než vývojářské platformě
		\item Version control (git)
	\end{itemize}
\end{frame}

\begin{frame}{Kvalita kódu}
	\begin{block}{Python}
		\begin{itemize}
			\item flake8 a pylint
			\item unittest
			\item coverage
		\end{itemize}
	\end{block}
	\begin{block}{C/C++}
		\begin{itemize}
			\item cppcheck
			\item clang
			\item gcc -Wall (-Werror)
			\item gcov
			\item valgrind
		\end{itemize}
	\end{block}
	A komentáře!
\end{frame}

\begin{frame}{Komentáře 1}
	\Huge
	Nikdy ``Here be dragons''!
\end{frame}

\begin{frame}[fragile]{Komentáře 2}
	\begin{minted}[frame=lines]{Python}
	def size(self):
		"""Returns size"""
		return self.__size__

	def increament(self):
		"""Increments size"""
		self.__size__ += 1
	\end{minted}
\end{frame}

\begin{frame}{Změny v projektu}
	\begin{block}{Přidáváme funkcionality}
		\begin{itemize}
			\item Součástí toho je refactoring
			\item Přidáváme pouze smysluplné funkcionality
		\end{itemize}
	\end{block}
	\begin{block}{Odebíráme funkcionality}
		\begin{itemize}
			\item Označíme za obsolete (v kódu, dokumentaci a nejlépe při použití také do logu)
			\item Po dostatečné době odstraní znovu spolu s refactoringem
			\item Zpětná kompatibilita? Přechod?
		\end{itemize}
	\end{block}
\end{frame}

\begin{frame}
	\center
	\includegraphics[width=11cm]{SoftwareEngineersLife.png}
\end{frame}

\begin{frame}{Předáváme projekt}
	\begin{itemize}
		\item Dodržujte kvalitu kódu a pokrytí dokumentací
		\item Přímé vysvětlená myšlenky projektu a budoucí plány
		\item Přiznejte co se nepovedlo
	\end{itemize}
\end{frame}

\begin{frame}{Next generation}
	\begin{itemize}
		\item Analýza toho co se povedlo a co ne
		\item Rozdíly v designu či dokonce zadání
		\item Vracíte se na začátek
		\item Poučte se z chyb
	\end{itemize}
\end{frame}

\section{Moje zpackání}

\section{Děkuji za pozornost}

\end{document}
