\documentclass{beamer}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{pgf}
%\usepackage{pgf,pgfarrows,pgfnodes,pgfautomata,pgfheaps,pgfshade} 
%\usepackage{multimedia}

\usepackage[english]{babel}
\usepackage{movie15}
\usepackage[latin1]{inputenc}
\usepackage{times}
\usepackage{amsmath}
\usepackage{bm} 
\usepackage[T1]{fontenc}
\usepackage[scaled=.90]{helvet}
\usepackage{scalefnt}
\usepackage{tikz}
\usepackage{ textcomp }
\usepackage{soul}
\usepackage{hyperref}
\definecolor{lightblue}{rgb}{.7,.7,1.}
\definecolor{mygreen}{rgb}{0,1.,0}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\mode<presentation>
{
  \usetheme{Singapore}
  \setbeamercovered{opaque}
  \usecolortheme{tuebingen}
  \setbeamertemplate{navigation symbols}{}
  \usefonttheme{default}
  \useoutertheme{infolines}
  % \useoutertheme{miniframes}
}

\AtBeginSection[]
{
  \begin{frame}<beamer>
    \begin{center}
      \Huge \insertsectionhead
    \end{center}
    % \frametitle{\insertsectionhead}
    % \tableofcontents[currentsection,hideothersubsections]
  \end{frame}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5

\setbeamertemplate{blocks}[rounded][shadow=true]

\title[]{Scientific Computing -- Grundlagen der Programmierung }
\author[]{Jan Grewe\\Abteilung f\"ur Neuroethologie\\
  Universit\"at T\"ubingen}

\institute[Wissenschaftliche Datenverarbeitung]{}
 \date{03.10.2014 - 07.11.2014}
 %\logo{\pgfuseimage{../../resources/UT_BM_Rot_RGB.pdf}}

\subject{Einf\"uhrung in wissenschaftliche Datenverarbeitung}
\vspace{1em}
\titlegraphic{
  \includegraphics[width=0.5\linewidth]{../../resources/UT_WBMW_Rot_RGB}
}
%%%%%%%%%% configuration for code
\lstset{
 basicstyle=\ttfamily,
 numbers=left,
 showstringspaces=false,
 language=Matlab,
 commentstyle=\itshape\color{darkgray},
 keywordstyle=\color{blue},
 stringstyle=\color{green},
 backgroundcolor=\color{blue!10},
 breaklines=true,
 breakautoindent=true,
 columns=flexible,
 frame=single,
 captionpos=b,
 xleftmargin=1em,
 xrightmargin=1em,
 aboveskip=10pt
 }
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\mycite}[1]{
\begin{flushright}
\tiny \color{black!80} #1
\end{flushright}
}

\input{../../latex/environments.tex}
\makeatother
 
\begin{document} 

\begin{frame}[plain]
  \frametitle{}
  \vspace{-1cm}
  \titlepage % erzeugt Titelseite
\end{frame}

\begin{frame}[plain]
  \frametitle{Rekapitulation}
  \begin{enumerate}
  \item Variablen\pause
  \item Vektoren\pause
  \item Matrizen\pause
  \item Boolesche Operationen\pause
  \item Logische Indizierung\pause
  \item Kontrollstrukturen
  \end{enumerate}
\end{frame}


\begin{frame}
  \frametitle{Grundlagen der Programmierung}
  \frametitle{Tagesmen\"u}
  \begin{enumerate}
  \item Was ist ein Program?
  \item Skripte und Funktionen
  \item G\"ultigkeitsbereiche
  \item Vom Problem zum Algorithmus
  \item \"Ubungen, \"Ubungen, \"Ubungen. 
  \end{enumerate}
\end{frame}


\begin{frame}[plain]
  \huge{1. Was ist ein Programm?}
\end{frame}

\begin{frame}
  \frametitle{Was ist ein Programm?}
  \framesubtitle{Und wo lebt es?}
  Ein Programm ist ...
  \begin{itemize}
  \item ... eine Sammlung von Anweisungen.
  \end{itemize}\pause
  Es lebt in ...
  \begin{itemize}
  \item ... einer Datei auf dem Rechner.
  \end{itemize}\pause
  Wenn es zum Leben erweckt wird...
  \begin{itemize}
  \item ... wird es Zeile fuer Zeile von oben nach unten ausgef\"urht.
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Was ist ein Programm?}
  \framesubtitle{In Matlab}
  \begin{itemize}
  \item Matlab kennt verschieden Arten von Programmen:
    \begin{enumerate}
    \item Skripte
    \item Funktionen
    \item Objekte (werden wir ignorieren)
    \end{enumerate}\pause
  \item Alle werden in sogenannte m-files gespeichert (z.B. \textit{meinProgramm.m}).
  \item Koennen dann von der Kommandozeile aufgerufen werden.
  \item Programme erhoehen die Wiederverwertbarkeit von Programmcode.
  \item Programme koennen andere Programme aufrufen.
  \end{itemize}
\end{frame}


\begin{frame}[plain]
  \huge{2. Skripte und Funktionen}
\end{frame}


\begin{frame}
  \frametitle{Skripte und Funktionen}
  \framesubtitle{Skripte}
  Achtung clash von variablen provozieren. Skript, das 2 Skripte aufruft.
  Wettbewerb, wer findet den Fehler?
\end{frame}

\begin{frame}
  \frametitle{Skripte und Funktionen}
  \framesubtitle{Funktionen}
  Funktionskopf - Schnittstelle
  Funktionskoerper
  Eingangs und Ausgangsargumente
\end{frame}

\begin{frame}[fragile]
  \frametitle{Skripte und Funktionen}
  \framesubtitle{Programmierstil}
  Programmierstil ist:
  \begin{enumerate}
    \item Die Namensgebung fuer Variablen und Konstanten.
    \item Die Namensgebung von Skripten und Funktionen.  
    \item Die Verwendung von Einr\"uckungen und Leerzeilen um Bl\"ocke im Code hervorzuheben.
    \item Verwendung von Kommentaren und Hilfetexten.
  \end{enumerate}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Skripte und Funktionen}
  \framesubtitle{Programmierstil}
  In verschiednen Sprachen verschiedene Konventionen. In MATLAB ...
  \begin{itemize}
  \item Funktionen, Skripte: Kleinbuchstaben, Abk\"urzungen. (z.B. \verb+xcorr+, \verb+repmat+)
  \item Konvertierungen immer mit format2format (z.B. \verb+num2str+)
  \item Variablen immer klein, h\"aufig Abk\"urzungen.
  \item Kommentare h\"aufig fuer interne Zwecke aber ausf\"uhrliche Dokumentation mit Hilftexten.
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Skripte und Funktionen} \framesubtitle{Programmierstil}
  Es gibt verschiedene ''Religionen''. Ein m\"ogliches Credo k\"onnte
  sein: \\
  \textbf{``Programmcode muss lesbar sein.''}\pause
  \begin{enumerate}
  \item Variablen werden klein geschrieben. Wenn n\"otig entweder im
    \textit{camelCase} oder mit Unterstrichen (z.B. \verb+spikeCount+
    oder \verb+spike\_count+).
  \item Funktionen und Skripte mit ausdrucksstarken Namen (z.B. \verb+loadSpikeData+).
  \item Kommentare sparsam. Eventuell um Abschnitte zu trennen.
  \item Hilfetexte: Ein Problem; sie m\"ussen aktuell sein sonst sind
    sie sch\"adlicher als wenn sie gar nicht da w\"aren.
  \item Einr\"uckung ist Pflicht.
  \item Bl\"ocke im Code werden durch 1 Leerzeichen getrennt.
  \end{enumerate}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Skripte und Funktionen} \framesubtitle{Programmierstil}
  Ihr d\"urft all das missachten aber:\\

  \centering
  \huge{Bleibt konsitent!}\pause
  \vspace{4em}
  \normalsize
  Es gibt dazu ganze B\"ucher. z.B. Robert C. Martin: \textit{Clean
    Code: A Handbook of Agile Software Craftmanship}, Prentice Hall
\end{frame}

\begin{frame}
  \frametitle{}
  \framesubtitle{}

\end{frame}


\end{document}
