Programmierwerkzeuge-02-Uebersicht

TeX document icon Programmierwerkzeuge-02-Uebersicht.tex — TeX document, 14 KB (15262 bytes)

File contents

\documentclass[12pt, twoside]{scrartcl}
%Anfang OERMacros.tex
% Zum Erstellen mit pdfLaTeX wird diese Datei und der CC BY Button by.png im selben Verzeichnis benötigt. 
% by.png ist unter https://mirrors.creativecommons.org/presskit/buttons/88x31/png/by.png zu finden. 

% Für den Lizenzhinweis zur Nutzung dieser OER kann das Macro \OERLizenzHinweis verendet werden. 

\usepackage[utf8]{inputenc}
\def\Autor {Reinhard Brocks}
\def\HomeAutor {https://www.htwsaar.de/ingwi/fakultaet/personen/profile/Reinhard\%20Brocks}
\def\OERLizenzHinweis 
{
	\includegraphics{by} % by.png ist unter https://mirrors.creativecommons.org/presskit/buttons/88x31/png/by.png zu finden. 
	\begin{minipage}[b]{11cm}\footnotesize
		\href{\HomeAutor/oer/pwz/programmierwerkzeuge-02-uebersicht/at_download/file}{Programmierwerkzeuge - \mysubtitle} 
		von 
		\href{\HomeAutor}{\Autor} 
		ist lizenziert unter einer 
		\href{http://creativecommons.org/licenses/by/4.0/}{Creative Commons Namensnennung 4.0 International Lizenz}.
	\end{minipage}
}


\def\HinweisLatex {Für die Nutzung und die Bearbeitung steht das Dokument \href{\HomeAutor/oer/pwz/latex}{hier} 
	auch im \LaTeX-Format zur Verfügung.}

\def\MailAutor {reinhard.brocks@htwsaar.de}

\def\MiniKontakt 
{
	Fragen und Verbesserungsvorschläge bitte an Prof.~Dr.~\Autor, 
	Hochschule für Technik und Wirtschaft des Saarlandes. \\
	E-Mail: \href{mailto:\MailAutor}{\MailAutor}\\[2ex]
}

\def\Kontakt
{
	\MiniKontakt
	Einen Überblick über die Unterrichtseinheiten zu \glqq Programmierwerkzeuge\grqq{} 
	findet man \href{\HomeAutor/oer/pwz/programmierwerkzeuge-00-unterrichtskonzept/at_download/file}{hier}.\\[1ex]
}

\def\Disclaimer 
{
	\begin{footnotesize}
		\textbf{Disclaimer}: Der Autor übernimmt keine Haftung für eventuelle 
		Datenschutz- und sonstige Rechtsverletzungen in anderen Webangeboten, 
		auf die er einen Link gesetzt hat. Für die Inhalte der von ihm 
		verlinkten Fremdangebote sind die jeweiligen Herausgeber verantwortlich. 
		Vor dem Einrichten von Links sind die Webseiten der anderen Anbieter 
		mit großer Sorgfalt und nach bestem Wissen und Gewissen geprüft worden. 
		Es kann jedoch keine Gewähr für die Vollständigkeit und Richtigkeit von 
		Informationen auf verlinkten Seiten übernommen werden. 
		Falls auf Seiten verweisen wird, deren Inhalt Anlass zur 
		Beanstandung gibt, bittet der Autor um eine Mitteilung 
		(\textit{\href{mailto:\MailAutor}{\MailAutor}}).
	\end{footnotesize}
}
%Ende OERMacros.tex%
%Anfang PackagesMacros.tex
\usepackage{a4,german}
\usepackage{hyperref}
\usepackage{hyperxmp}
\usepackage{color}
\usepackage{graphics}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\usetikzlibrary{shapes.misc}
\usetikzlibrary{decorations}

\parindent 0pt
\definecolor{Definitionsfarbe}{RGB}{0,100,0}
\newcommand{\TextBegriff}[1]{\textcolor{Definitionsfarbe}{\textbf{#1}}}

%Makros für die Graphiken mit Symbolen wie Datei, Verzeichnis, Tool
\newcommand{\dir}[6]{ %x - Koord, y - Koord, Breite, Hoehe, Text, NodeName
	\draw  (#1, #2) rectangle (#1 + #3,#2 + #4);
	\draw  (#1, #2 + #4) rectangle (#1 + 1,#2 + #4 + 0.5);
	\node (#6) at (#1 + 0.5 * #3, #2 + 0.5 * #4) {#5};
}
\newcommand{\file}[4]{ %x - Koord, y -Koord, NodeName, Text
	\tikzset{every node/.style={chamfered rectangle, draw}}
	\node(#3)[align=center,chamfered rectangle corners=north east] at (#1,#2) {#4};
}
\newcommand{\fileC}[4]{ %x - Koord, y -Koord, NodeName, Text
	\tikzset{every node/.style={chamfered rectangle, draw}}
	\node(#3)[align=center,fill=green!75,chamfered rectangle corners=north east] at (#1,#2) {#4};
}
\newcommand{\fileG}[4]{ %x - Koord, y -Koord, NodeName, Text
	\tikzset{every node/.style={chamfered rectangle, draw}}
	\node(#3)[align=center,fill=yellow!75,chamfered rectangle corners=north east] at (#1,#2) {#4};
}
\newcommand{\fileU}[4]{ %x - Koord, y -Koord, NodeName, Text
	\tikzset{every node/.style={chamfered rectangle, draw}}
	\node(#3)[align=center,fill=red!25,chamfered rectangle corners=north east] at (#1,#2) {#4};
}
\newcommand{\tool}[4]{ %x - Koord, y -Koord, NodeName, Text
	\node(#3) [align=center, fill=blue!50, ellipse, draw] at (#1,#2) {#4};
}
%Ende PackagesMacros.tex%

\def\mysubtitle {Unterrichtseinheit 2: Übersicht}
\def\mykeywords {Programmierwerkzeuge}
\hypersetup
{
	pdftitle={Programmierwerkzeuge},
	pdfsubject={\mysubtitle},
	pdfauthor={Reinhard Brocks},
	pdfkeywords={\mykeywords},
	pdfcopyright={CC BY 4.0},
	pdflicenseurl={http://creativecommon.org/licenses/by/4.0/}
}

\title{\textbf{Programmierwerkzeuge}}
\subtitle{\mysubtitle \\[2ex]{\small Lehr- und Lernmaterialien}}
\author{}
\date{}

\begin{document}
\maketitle
\thispagestyle{empty}
\vfill

\begin{tabular}{|p{3cm}|p{10,5cm}|} \hline 
	Zielgruppe	&	Lernende, die schon eine Programmiersprache gelernt und erste 
					Erfahrungen in der Programmierung, am besten in Java, gesammelt haben.\\ \hline 
	Lernziele	&	Die Lernenden sollen für die Unterrichtsreihe motiviert werden. 
					Sie sollen einen Überblick über die Vielfalt der Werkzeuge bekommen 
					und diese einer Kategorie von Tools und den Arbeitsschritten eines 
					Programmierers zuordnen können. Sie verstehen die 
					Stellenanzeigen für Informatiker besser. \\ \hline 
	Stichwörter	&	\mykeywords\\ \hline 
\end{tabular} \\[2ex]

\Kontakt

Versionsgeschichte\\[1ex]
\begin{tabular}{|l|l|l|}\hline 
	Datum 	& Änderung \\ \hline 
	26. Oktober 2019 & Erste Version \\ \hline 
\end{tabular}\\[1ex]

\OERLizenzHinweis\HinweisLatex
\newpage

\section*{Übersicht Programmierwerkzeuge}
\subsubsection*{Aufgabe Tools in Stellenanzeigen, 90 Minuten}
Suchen Sie sich Stellenanzeigen, die Sie interessant finden. 
Welche Programmierwerkzeuge werden erwähnt? Geben Sie auf einer 
Skala von 1 bis 5 an, wie wichtig (1-völlig unwichtig, \dots, 5-sehr wichtig) 
und wie interessant (1-völlig uninteressant, \dots, 5-sehr interessant) 
Sie jedes Werkzeug finden. Können Sie Kategorien von Werkzeugen erkennen? 
\subsection*{Arbeitsergebnisse}
Eine einfache Definition von \textbf{\textcolor{Definitionsfarbe}{Programmierwerkzeuge}} 
ist z.\,B.: Das sind Programme, die ein Entwickler bei der täglichen Arbeit zum Programmieren 
benutzt. Programme, wie Editoren, die der Entwickler interagierend nutzt, sind eher Tätigkeiten, 
die kreativ sind. Tools, wie der Compiler, die nur vom Entwickler aufgerufen werden, sind nicht kreative Arbeiten. 

Die Entwicklungsumgebung eines Programmierers beinhaltet: 
\begin{itemize}
	\item Eine Software, die man in der Entwicklungsumgebung und auch 
			in der Laufzeitumgebung installiert, damit das Programm lauffähig 
			ist (Java virtual machine, Node.js, Datenbanken, Webserver). 
	\item Eine Software, die man installiert, um zu programmieren. Das können 
			Bibliotheken sein, die bei der Entwicklung eingebunden werden müssen 
			und deren Funktionalität man nutzt. Das können auch Frameworks sein, 
			deren Funktionen erst angepasst und dann genutzt werden (inversion of control). 
\end{itemize}
Die Programmiersprache legt die Werkzeuge und Software der Entwicklungsumgebung fest. 

Folgende Kategorien von Tool kann man festhalten: 
\begin{itemize}
	\item Quellcodeeditoren
	\item Kommandozeile, command-line interface
	\item ssh / remote command-line login
	\item Compiler
	\item Dokumentationswerkzeuge
	\item Deployment tools
	\item Debugger
	\item Profiler, dynamische Analyse
	\item Testtools
	\item Tools zur statischen Quellcodeanalyse
	\item Quellcodeverwaltung
	\item Paketverwaltung, package manager
	\item Container, Virtualisierung
	\item build automation tools
	\item Integrierte Entwicklungsumgebungen / IDE
	\item Continous Integration / Continous Delivery Infrastrukturen
	\item Issue-Tracking Systeme, Bugtracker
\end{itemize}
Sicherlich arbeitet ein Programmierer auch mit Office-Anwendungen oder Tools zum 
Projektmanagement. Das sind eher Tools für Aufgaben, die ein Softwareentwickler 
zusätzlich zur reinen Programmierung hat. Issue-Tracking Systeme oder Bugtracker 
sind Werkzeuge, die an der Schnittstelle anzusiedeln sind. Es gibt auch Software, 
die je nachdem, was man damit macht, zu den Programmierwerkzeugen zählen oder nicht. 
Benutzt man eine Virtualisierungssoftware zum Ausführen eine virtuellen Maschine, 
ist das etwas anderes als wenn man dieselbe Software benutzt, um eine virtuelle Maschine 
zu erstellen. Auch eine Datenbank zählt dazu. Benutzt der Programmierer die 
Administrationsschnittstelle der Datenbank, so ist das eher ein Programmierwerkzeug. 

Im Kontext der Entwicklungsumgebung spricht man auch von \TextBegriff{Developer Experience}. 
Damit meint man, inwieweit die Werkzeuge der Entwicklungsumgebung auf die Bedürfnisse des 
Entwicklers zugeschnitten sind. Hier ist die Wahl des Werkzeugs aber auch dessen Konfiguration wichtig. 

\newpage
\subsection*{Hinweise für den Dozenten}
Die Suche sollte von den Lernenden zu Hause gemacht werden. 

Zur Besprechung der Aufgabe kann jeder Lernende die gefunden Werkzeuge auf eine 
Karteikarte schreiben und in einem Diagramm (siehe Abbildung~\ref{fig:Beurteilung}) 
mit einer Achse \glqq Interesse\grqq{} und einer Achse \glqq Wichtigkeit\grqq{} platzieren. 
\begin{figure}[htbp]
	\centering
	\begin{tikzpicture}
		\draw [thick, <->] (0,2) -- (0,0) -- (3,0);
		\draw [thick, <->] (-3,0) -- (0,0) -- (0,-2);
		\node [right] at (0,1.5) {sehr wichtig};
		\node [right] at (0,-1.5) {völlig unwichtig};
		\node [above] at (2.5,0) {sehr interessant};
		\node [above] at (-2.5,0) {völlig uninteressant};
	\end{tikzpicture}
	\caption{Einschätzung von konkreten Programmierwerkzeugen aus Stellenanzeigen nach Wichtigkeit und Interesse}\label{fig:Beurteilung}
\end{figure}

Bei der Diskussion hat man die Möglichkeit, über die Tätigkeit eines Programmierers zu 
diskutieren und die Tools in Kategorien einzuteilen. 

Den Lernenden war bei der Suche der Begriff \glqq{}Programmierwerkzeug\grqq{} nicht klar. 
Das kann man daran erkennen, dass neben Programmierwerkzeugen auch Methodologien, Bibliotheken, 
Frameworks und Programmiersprachen aufgelistet werden. 

Ebenso ist es normal, dass den Lernenden häufig der Sinn und der Zweck der Tools unbekannt sind. 
\newpage
\subsection*{Aufgabe: Überblick Programmierwerkzeuge - 60 Minuten}
Ergänzen Sie die Graphik mit konkreten Java-Werkzeugen und mit konkreten Dateitypen. 
\begin{figure}[htbp]
	\centering
	\def\colorlink{cyan!50}
	\begin{tikzpicture}[rotate=90, transform shape, scale=0.75]
		%strukturierende Rechtecke
		\draw[dashed, blue] (-12.5,-6) rectangle (-11.5,3);
		\node[right,align=center, rotate=90, blue] at (-12,-5.5) {continous integration / continous delivery \\CI\textbackslash CD infrastructure}; 
		\draw[dashed, blue] (-12.5,-10) rectangle (-11.5,-6.5);
		\node[right,align=center, rotate=90, blue] at (-12,-10) {package manager\\container}; 
		\draw[dashed, blue] (-7,-1) rectangle (6.5,3);
		\node[below right, blue] at (-7,3) {kreativer Teil der Programmierung}; 
		\draw[dashed, blue] (-10.5,-1.5) rectangle (6.5,-10);
		\node[below right, blue] at (-10,-1.5) {build automation tools}; 
		\draw[dashed, blue] (-11,3.7) rectangle (7,-10.5);
		\node[below right, blue] at (-11,3.7) {integrated development environment};
		\draw[dashed, blue] (7.5,-10.5) rectangle (8.5,-1.5);
		\node[right,align=center, rotate=90, blue] at (8,-6) {shell}; 
		%Redesign connectors
		\node (redesign0)[align=center,fill=\colorlink,ellipse,draw] at (-5.5,1.5) {Re-\\design};
		\node (redesign1)[align=center,fill=\colorlink,ellipse,draw] at (-9,-5) {Re-\\design};
		\node (redesign2)[align=center,fill=\colorlink,ellipse,draw] at (-4,-9) {Re-\\design};
		%Tools
		\tool{-2}{1.5}{editor}{Quellcodeeditor}
		\tool{3.5}{1+1}{bug}{Issue-Tracking\\Systeme, Bugtracker}
		\tool{4}{-2.5}{doc}{Dokumentations-\\werkzeug}
		\tool{-2}{-4.5}{compiler}{Compiler}
		\tool{0.5}{-6.5}{deploy}{deployment\\tool}
		\tool{0}{-2.5}{generator}{code\\generator}
		\tool{-7}{-9}{run}{running}
		\tool{2}{-9}{bugfix}{Debugger, Profiler,\\ dynamische Analyse, Testing}
		\tool{-6}{-3.5}{analyse}{Tool statische\\Quellcode-\\ analyse}
		\tool{-9}{0}{SCM}{Quellcode-\\verwaltung}
		%Files
		\fileC{-2}{0}{code}{Quellcode}
		\fileC{2.5}{0}{req}{Anforderungen,\\Todo-Listen}
		\fileG{-3}{-7}{binary}{Binaries}
		\fileG{1}{-4.5}{generated}{generierter\\Quellcode}
		\fileG{4.5}{-5}{gendoc}{generierte\\Quellcode-\\dokumentation}
		\fileG{4.5}{-7}{packed}{Installations-\\paket}
		\fileU{-6}{-6.5}{lib}{Framework\\Library\\run time env.}
		%Links
		\draw[->,thick] (node cs:name=editor) -- (node cs:name=code);
		\draw[->,thick] (node cs:name=bug) -- (node cs:name=req);
		\draw[->,thick] (node cs:name=code) -- (node cs:name=analyse);
		\draw[->,thick] (node cs:name=code) -- (node cs:name=compiler);
		\draw[->,thick] (node cs:name=code) -- (node cs:name=doc);
		\draw[->,thick] (node cs:name=compiler) -- (node cs:name=binary);
		\draw[->,thick] (node cs:name=binary) -- (node cs:name=run);
		\draw[->,thick] (node cs:name=binary) -- (node cs:name=bugfix);
		\draw[->,thick] (node cs:name=binary) -- (node cs:name=deploy);
		\draw[->,thick] (node cs:name=deploy) -- (node cs:name=packed);
		\draw[->,thick] (node cs:name=lib) -- (node cs:name=run);
		\draw[->,thick] (node cs:name=lib) -- (node cs:name=compiler);
		\draw[->,thick] (node cs:name=doc) -- (node cs:name=gendoc);
		\draw[->,thick] (node cs:name=gendoc) -- (node cs:name=deploy);
		\draw[->,thick] (node cs:name=generator) -- (node cs:name=generated);
		\draw[->,thick] (node cs:name=code) -- (node cs:name=generator);
		\draw[->,thick] (node cs:name=generated) -- (node cs:name=compiler);
		\draw[->,thick] (node cs:name=redesign0) -- (node cs:name=code);
		\draw[->,thick, dashed] (node cs:name=run) -- (node cs:name=redesign2);
		\draw[->,thick, dashed] (node cs:name=bugfix) -- (node cs:name=redesign2);
		\draw[->,thick, dashed] (node cs:name=analyse) -- (node cs:name=redesign1);
		\draw[->,thick, dashed] (node cs:name=req) -- (node cs:name=code);
		\draw[<->,thick, dashed] (node cs:name=SCM) -- (node cs:name=code);
		\draw[->,thick, dashed] (node cs:name=SCM) -- (-11.5,0);
	\end{tikzpicture}
	\caption{\"Ubersicht \"uber Programmierwerkzeuge}\label{fig:UebersichtProgrammierwerkzeuge}
\end{figure}

\newpage
\subsection*{Hinweise für den Dozenten}
Diese Aufgabe sollte in der auf der Aufgabe zu \glqq{}Tools in Stellenanzeigen\grqq{}  folgenden 
Unterrichtsstunde gemacht werden. Die Wiederholung ist sinnvoll. Am besten kopiert man die Graphik 
auf DIN-A4-Format und lässt die Lernenden in Gruppenarbeit die Werkzeuge hinzuschreiben. 

In Abbildung~\ref{fig:UebersichtProgrammierwerkzeuge} werden Programmierwerkzeuge mit 
dem Symbol \tikz[baseline]{\tool{0}{0.1}{x}{tool}}
dargestellt. Die Artefakte werden wie folgt dargestellt: 
\begin{enumerate}
	\item handgeschriebene Dateien: 
	\tikz[baseline]{\fileC{0}{0.1}{x}{filename}}
	\item generierte Dateien: \tikz[baseline]{\fileG{0}{0.1}{x}{filename}} 
	\item benutzte, installierte Dateien: \tikz[baseline]{\fileU{0}{0.1}{x}{filename}} 
\end{enumerate}
In der Graphik gibt es einen Bereich, der dem kreativen Anteil der Programmierung 
zuzuordnen ist. Dort sind aber auch Tätigkeiten, die automatisiert sind, wie z.\,B. 
das Umbenennen von Variablen oder das Generieren von Klassen im Quellcodeeditor. 

\end{document}