forked from deinprogramm/schreibe-dein-programm
-
Notifications
You must be signed in to change notification settings - Fork 0
/
i1vorw.tex
122 lines (99 loc) · 5.41 KB
/
i1vorw.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
% Diese Datei ist Teil des Buchs "Schreibe Dein Programm!"
% Das Buch ist lizensiert unter der Creative-Commons-Lizenz
% "Namensnennung - Weitergabe unter gleichen Bedingungen 4.0 International (CC BY-SA 4.0)"
% https://creativecommons.org/licenses/by-sa/4.0/deed.de
\chapter*{Vorwort}
\thispagestyle{empty}
\markboth{Vorwort}{Vorwort}
Schriftsteller fürchten die leere Seite. Maler fürchten die weiße
Leinwand. Für Architekten ist es die grüne Wiese. Für Programmierer
ist es der Cursor, der fordernd im leeren Fenster des Editors
blinkt\dots Wie geht man eine Programmieraufgabe an, wenn zu Beginn
keine einzige Zeile Code existiert, wenn keine Funktion oder
Datenstruktur Orientierung bietet, und wenn zwar \emph{alles} möglich
aber gerade deshalb schwer greifbar erscheint?
Mike Sperber und Herbert Klaeren haben in \textit{Schreibe Dein
Programm!} hierzu gute Nachrichten. Programme lassen sich nämlich sehr
systematisch konstruieren und---teilweise nahezu auto\-ma\-tisch---aus der
gegebenen Problemstellung ableiten. Über das gesamte Buch verstreut
finden sich \textit{Konstruktionsanleitungen}, deren Programmskelette
konkrete Hinweise auf die Struktur der Lösung des Problems geben. Steht
das Skelett erst einmal, lassen sich dessen Lücken oft unmittelbar
vervollständigen, teils durch die Nutzung weiterer derartiger
Konstruktionen, teils weil sich die Komplettierung direkt aus dem
Problem ergibt. Programmierung mittels dieser Konstruktionsanleitungen
kommt dem disziplinierten ingenieursmäßigen Bauen näher als alles
andere.
Aus meinen Vorlesungen \textit{Informatik~I} an der Universität Tübingen
kommen die Studierenden nicht heraus, ohne sich ordentlich "<die Finger
schmutzig gemacht zu haben">. In der Vorlesung selbst, den
wöchentlichen Übungsblättern und zusätzlichen betreuten
Programmierstunden wird Code geschrieben, was das Zeug hält. Dabei
konnte ich bereits Hunderte von Studierenden---typischerweise echte
Anfänger, die noch keine Programmiersprache kennen---beobachten, wie
mittels Konstruktionsanleitungen die Herausforderung des leeren Editors
angenommen und gemeistert wurde. Die resultierenden Programme sind
(zumeist \texttt{;-)}) korrekt, kompakt und, vor allem, lesbar und
nachvollziehbar. Wir können so in der \textit{Informatik~I} erstaunlich
anspruchsvolle Aufgaben angehen und sind am Ende des zweiten
Drittels der Vorlesung in der Lage, die Studierenden \textit{PacMan},
\textit{Tetris} oder \textit{Asteroids} nachbauen zu lassen.
\textit{Schreibe Dein Programm!} ist gleichzeitig eine Einführung in die
funktionale Programmierung mit Scheme. Scheme selbst tritt mit seiner
einfachen Syntax in den Hintergrund\footnote{Wo wir üblicherweise einen
Zoo von Notationen $x+1$, $\sin(x)$, $x^2$, $\vert x\vert$, $\sqrt{x}$,
$x!$, \dots nutzen, begnügt sich Scheme uniform mit der
Notation~\texttt{(f~x)}.} und gibt den Blick frei auf die essentiellen
Ideen des Denkens und Programmierens mit (mathematischen) Funktionen.
Genau wie Mike Sperber und Herbert Klaeren bin ich überzeugt, dass
dieses elegante Programmierparadigma "<gekommen ist, um zu bleiben"> und
auf lange Sicht Programmierstil und -sprachen weitreichend beeinflussen
wird. Zusammen mit den Konstruktionsanleitungen gibt dieses Buch
Programmieranfängern daher gleich zwei Superkräfte mit auf den Weg. Das
nenne ich einen \emph{Deal}!
\begin{flushright}
Torsten Grust
Tübingen, Juli~2019
\end{flushright}
\section*{Danksagungen}
Wir, die Autoren, haben bei der Erstellung dieses Buchs immens von der
Hilfe anderer profitiert.
Martin Gasbichler half bei der Entwicklung der DMdA-Erweiterungen.
Peter Thiemann, Martin Gasbichler, Andreas Schilling, Torsten Grust und Michael Hanus hielten
Vorlesungen auf Basis dieses Buchs und lieferten wertvolle Rückmeldungen.
Besonderer Dank gebührt den Tutorinnen und Tutoren und Studierenden unserer Vorlesung
\textit{Informatik I}, die eine
Fülle hilfreicher Kritik und exzellenter Verbesserungsvorschläge
lieferten.
Seitdem die Entwicklung des Buches offen auf Github stattfindet, haben
außerdem viele Leserinnen und Leser Verbesserungsvorschläge und
Pull-Requests gemacht, darunter Nicolas Neuß, Joachim Breitner,
Raphael Borun Das Gupta, Tobias Huttner, Nicolai Mainiero, Johannes
Maier, Sibylle Hasse, Manuela Reinisch, Noah Haasis, mi-skam,
Aramís, Beat Hagenlocher, Erika Bor und Christina Zeller.
Davor brachten Robert Giegerich, Ulrich Güntzer, Martin Plümicke,
Christoph Schmitz und Volker Klaeren, Eric Knauel, Marcus Crestani,
Sabine Sperber, Jan-Georg Smaus und Mayte Fleischer viele Korrekturen
und Verbesserungen ein, insbesondere zum Vorgängerbuch \textit{Vom
Problem zum Programm}.
Wir sind außerdem dankbar für die Arbeit unserer Kolleginnen und Kollegen, die
Pionierarbeit in der Entwicklung von Konzepten für die
Programmierausbildung geliefert haben. Eine besondere
Stellung nehmen Matthias Felleisen, Robert Bruce Findler, Matthew
Flatt und Shriram Krishnamurthi und ihr Buch~\textit{How to Design
Programs} \cite{FelleisenFindlerFlattKrishnamurthi2001} ein, das
entscheidende didaktische Impulse für dieses Buch gegegen hat.
Felleisens Arbeit im Rahmen des PLT-Projekts hat uns stark beeinflußt;
das PLT-\drscheme{}-System ist eine entscheidende Grundlage für die
Arbeit mit diesem Buch.
\begin{flushright}
Herbert Klaeren
Michael Sperber
Tübingen, Dezember 2021
\end{flushright}
\newpage
\thispagestyle{empty}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "i1"
%%% End: