<reponame>graeme-a-stewart/cpluspluscourse<filename>talk/C++Course.tex
\documentclass[compress]{beamer}
\usetheme{Warsaw}
\useoutertheme{split}

%\includeonly{python/python}

\input{setup}

\newboolean{onlybasics}
\setboolean{onlybasics}{false}

\begin{document}

\showboxdepth=\maxdimen
\showboxbreadth=\maxdimen

\begin{frame}
  \titlepage
\end{frame}

\begin{frame}
  \frametitle{Foreword}
  \begin{block}{What this course is not}
    \begin{itemize}
    \item It is not for absolute beginners
    \item It is not for experts
    \item It is not complete at all (would need 3 weeks...)
      \begin{itemize}
      \item although is it already too long for the time we have
      \item \inserttotalframenumber{} slides, \insertpresentationendpage{} pages, 10s of exercises...
      \end{itemize}
    \end{itemize}
  \end{block}
  \begin{block}{How I see it}
    \begin{description}
    \item[Adaptative] pick what you want
    \item[Interactive] tell me what to skip/insist on
    \item[Practical] let's spend time on real code
    \end{description}
  \end{block}
  \begin{block}{Where to find latest version ?}
    \begin{itemize}
    \item pdf format at {\small \url{http://cern.ch/sponce/C++Course}}
    \item full sources at {\scriptsize \url{https://github.com/hsf-training/cpluspluscourse}}
    \end{itemize}
  \end{block}
\end{frame}


\begin{frame}
  \frametitle{More courses}
  \begin{block}{The HSF Software Training Center}
    A set of course modules on more software engineering aspects prepared from within the HEP community
    \begin{itemize}
      \item Unix shell
      \item Python
      \item Version control (git, gitlab, github)
      \item ...
    \end{itemize}
    {\small \url{https://hepsoftwarefoundation.org/training/curriculum.html}}
  \end{block}

\end{frame}

\begin{frame}
  \frametitle{Outline}
  \begin{multicols}{2}
    \tableofcontents[sectionstyle=show,subsectionstyle=hide]
  \end{multicols}
\end{frame}

\begin{frame}
  \frametitle{Detailed outline}
  %\vspace{-0.5cm}
  \begin{scriptsize}
    \begin{multicols}{3}
      \tableofcontents[sectionstyle=show,subsectionstyle=show]
    \end{multicols}
  \end{scriptsize}
\end{frame}

\include{introduction/introduction}
\include{basicconcepts/basicconcepts}

% basic version has subset of tools at this stage
\ifthenelse{\boolean{onlybasics}}{
  \section[Tool]{Useful tools}
  \input{tools/editors}
  \input{tools/vcs}
  \input{tools/formatting}
  \input{tools/compiling}
  \input{tools/debugging}
}{}

% basic version only keeps a subset of these 2 chapters
\ifthenelse{\boolean{onlybasics}}{
  \section[OO]{Object orientation (OO)}
  \input{objectorientation/objectsclasses}
  \input{objectorientation/inheritance}
  \input{objectorientation/constructors}
  \input{objectorientation/static}
  \input{objectorientation/allocations}
  \input{objectorientation/advancedoo}
  \input{objectorientation/operators}
  \input{objectorientation/functors}

  \section[More]{Core modern \cpp}
  \input{morelanguage/constness}
  \input{morelanguage/exceptions}
  \input{morelanguage/templates}
  \input{morelanguage/stl}
  \input{morelanguage/lambda}
  \input{morelanguage/raii}
} {
  \include{objectorientation/objectorientation}
  \include{morelanguage/morelanguage}
}

% do not include these chapters in basic version
\ifthenelse{\boolean{onlybasics}}{}{
  \include{expert/expert}
  \include{tools/tools}
  \include{concurrency/concurrency}
  \include{python/python}
}

\begin{frame}
  \frametitle{This is the end}
  \begin{center}
    \Huge Questions ?\\
    \vspace{.5cm}
    \tiny \href{https://github.com/hsf-training/cpluspluscourse}{https://github.com/hsf-training/cpluspluscourse}\\
    \tiny \href{http://cern.ch/sponce/C++Course}{http://cern.ch/sponce/C++Course}
  \end{center}
\end{frame}

\end{document}
