Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Um Programmieren zu können, ist natürlich die exakte Kenntnis des formalen Systems, also <strong>der</strong> Programmiersprache<br />
notwendig. Manchen von Ihnen sind z.B. Syntaxdiagramme aus <strong>der</strong> Schule bekannt. Von <strong>der</strong><br />
syntaktischen Strukturbeschreibung werden wir ausgehen und die Wirkung (Semantik) <strong>der</strong> einzelnen Komponenten<br />
<strong>der</strong> Programmiersprache ebenso exakt beschreiben. Dafür werden wir eine funktionale Sprache verwenden.<br />
Da wir hier eine Sprache durch eine an<strong>der</strong>e erklären, haben wir einen Ebenenwechsel. Die Sprache,<br />
die eine an<strong>der</strong>e Sprache (bei uns Eiffel) beschreibt, wird daher Metasprache genannt. (Vorwarnung: Die beiden<br />
Sprachen verwenden zum Teil das gleiche Vokabular, sind aber durch die Art des Drucks stets unterscheidbar.)<br />
Obwohl die Sprache Eiffel auch viele Konzepte beinhaltet, die bereits in Pascal, Basic und noch einfacheren<br />
Sprachen vorhanden sind, gibt es nur wenige Gründe, die Entwicklung <strong>der</strong> exakten Beschreibung einer<br />
Programmiersprache im Rahmen einer Vorlesung <strong>der</strong> historischen Entwicklung <strong>der</strong> Programmiersprachen<br />
anzugleichen. Wir beginnen daher (erstmalig in diesem Semester) mit Klassen und Objekten und dem modularen<br />
Aufbau von Systemen auf <strong>der</strong> Basis bereits existieren<strong>der</strong> Module. Wir ergänzen dies dann durch<br />
konventionellere Konzepte wie Prozeduren und algorithmische Strukturen und gehen schließlich ein wenig<br />
auf die Auswertung von Formeln und Ausdrücken sowie an<strong>der</strong>e Details <strong>der</strong> Sprache ein, die für den eigentlichen<br />
Entwurf von geringer Bedeutung und eigentlich nur für das konkrete Ausprogrammieren von Details<br />
wichtig sind (, was in <strong>der</strong> Vorlesung im Hintergrund stehen soll). Die Strukturierung von Klassen über das<br />
Vererbungskonzept bildet dann den krönenden Abschluß dieser Vorlesung<br />
Exakte Kenntnis einer Programmiersprache ist notwendig, aber in keiner Weise hinreichend für die Programmentwicklung.<br />
Notwendig ist die Fähigkeit des Programmierens. Lei<strong>der</strong> gibt es kein allgemeines Verfahren, wie<br />
man programmiert. Daher kann das Programmieren auch nicht vermittelt werden. Die Programmierfähigkeit<br />
muß erworben werden! Analog zum Lernen einer Fremdsprache reicht Zuhören nicht aus. Sie müssen sprechen<br />
und an<strong>der</strong>e müssen zuhören, um Fehler zu korrigieren. Sprachunterricht bietet Vokabel, Grammatik, Redewendungen<br />
und erfor<strong>der</strong>t Training, Training, Training. Analog ist beim Erwerb <strong>der</strong> Programmierfähigkeit<br />
das Programmieren (Sprechen) unbedingt notwendig, aber wie<strong>der</strong>um nicht hinreichend! Damit Ihre Fähigkeit<br />
verbessert wird, müssen Sie Ihre Programme einer konstruktiven Kritik aussetzen: Code Review.<br />
Es wird immer wie<strong>der</strong> gefor<strong>der</strong>t, es soll doch gezeigt werden, wie man programmiert. Das ist aus theoretischen<br />
Gründen grundsätzlich unmöglich! Der Wunsch nach einem festen Verfahren, das immer wie<strong>der</strong> angewendet<br />
werden kann, ist aber auch eine unsinnige For<strong>der</strong>ung. Angenommen es gäbe ein Verfahren, wie Programme<br />
aus einer Problemstellung heraus entwickelt werden können, dann wäre dieses Programmsyntheseverfahren<br />
schon längst ein Programm und Programmieren somit wegrationalisiert (Ein Traum <strong>der</strong> KI!). Zum Erlernen<br />
<strong>der</strong> Programmierfähigkeit können wir also nur an Beispielen üben - kritisieren, üben - kritisieren, üben -<br />
kritisieren usw. Je<strong>der</strong> Schritt in disem Zyklus erweitert Ihr individuelles Regelsystem!<br />
Um Frustrationen auszuschließen: Sind Sie bei <strong>der</strong> Entwicklung eines Programms über den Aufwand verzweifelt,<br />
so können Sie sich trösten: Durch die neuen Erfahrungen wird die nächste Entwicklung sicher leichter!<br />
Grob formuliert: Ihr Aufwand für eine Neuentwicklung ähnlichen Schwierigkeitsgrades ist etwa reziprok zu <strong>der</strong><br />
Anzahl Ihrer bisher erfolgreich abgeschlossenen Entwicklungen. Wenn Sie sich die Kurve y=k/x ins Gedächtnis<br />
rufen, dann sind nur die Werte x