Ruprecht-Karls-Universität Heidelberg
Bilder vom Neuenheimer Feld, Heidelberg und der Universität Heidelberg
Siegel der Uni Heidelberg

Programmierausbildung

Die Grundkenntnisse des Programmierens werden am LCL traditionell anhand von "Mainstream"-Programmiersprachen (im Gegensatz zu "KI-Sprachen" wie Prolog oder auch Lisp) vermittelt. Dadurch soll erreicht werden:

  • Verständnis für reale Rechnerarchtitekturen, insbesondere für ihre bei der Verarbeitung natürlicher Sprache relevanten Beschränkungen,
  • Erwerb von Kenntnissen nach den in der allgemeinen Softwareentwicklung herrschenden Anforderungen, die in KI-Sprachen häufig nicht oder nur indirekt vermittelt werden können,
  • Fähigkeit zur Integration in Teams, die durch "Mainstream"-Programmierer geprägt sind,
  • Kompetenz zur Lösung von "Real World"-Problemen.

Ablauf

Programmieren I -- Einstieg

Im Sommersemester wird jeweils der vierstündige Kurs "Programmieren I -- Einstieg" mit einem zweistündigen Tutorium angeboten. Der Kurs ist orientierungsprüfungsrelevant, muss also so bald wie möglich belegt werden.

Behandelt werden die Grundstrukturen der Programmierung, beginnend bei Variablen und Kontrollstrukturen bis zu Klassen und Vererbung, derzeit anhand der objektorientierten Skriptsprache Python, die, abgesehen von ihrer guten Eignung zur Sprachverarbeitung, auch sehr einfache und durchschaubare Mechanismen zur Modularisierung (Zerlegung eines Gesamtproblems in in sich geschlossene Teilprobleme) und Faktorisierung (Zerlegung eines Teilproblems in einzelne Funktionen) bietet.

Studierende sollten nach Abschluss des Kurses in der Lage sein, kleine Probleme eigenständig in wart- und lesbare Programme umzusetzen. Insbesondere sollten in fachspezifischen Veranstaltungen gestellte Aufgaben, die mit Computerhilfe bearbeitet werden sollen, gelöst werden können.

Programmieren II -- Vertiefung

Im folgenden Wintersemester sollte der vierstündige Kurs "Programmieren II -- Vertiefung" belegt werden, der ebenfalls von einem zweistündigen Tutorium begleitet wird.

Dieser Kurs behandelt eine deutlich rechnernähere Sprache, gegenwärtig C als "portablen Assembler". Dadurch sollen die -- vorausgesetzten -- Kenntnisse aus dem ersten Programmierkurs im Hinblick auf ein vertieftes Verständnis für die Kompromisse, die bei der Softwareentwicklung notwendig sind, erweitert werden. Ziel ist auch, die Entwicklung inhomogene Softwaresysteme darzustellen, deren einzelne Komponenten mit den jeweils geeignetsten Werkzeugen erstellt werden.

Begeleitend werden Ausblicke zu anderen Sprachen (etwa Java, C++, Lisp, Bourne-Shell, TeX, M4) oder Methodologien (etwa Design Patterns) geliefert, um ein Koordinatensystem bereitzustellen, in dem sich Studierende nach Notwendigkeit schnell weitere Sprachen aneignen und nach Aufgabenstellung entscheiden können, wie ein gegebenes Problem optimal gelöst werden kann. Die Veranstaltung wird abgerundet durch Hinweise auf Werkzeuge zur Software-Entwicklung, beispielsweise Debugger, Versionskontrollsysteme und natürlich make-ähnliche tools.

Dieser Kurs sollte in der Regel vor der Zwischenprüfung absolviert werden, da er Voraussetzungen für die erfolgreiche Teilnahme an Hauptseminaren vermittelt.

Programmieren III -- Software Engineering

Hauptfachstudierende sollten danach die zweistündige Veranstaltung "Programmieren III -- Software Engineering" belegen. Ziel dieses Kurses ist die Vermittlung von Kenntnissen in systematischer Problemanalyse und Entwicklungsplanung. Dies wird in der Regel eher im Stil eines Seminars und durch gemeinsame Arbeit an einem größeren Projekt geschehen.

Programmierprüfung

Den Abschluss der Grundausbildung im Programmieren bildet die Programmierprüfung. Zum Bestehen dieser Prüfung, die Zugangsvoraussetzung zum Studienprojekt sowie zu Hauptseminaren ist, muss innerhalb eines Tages in Präsenzarbeit eine abgeschlossene und lauffähige Lösung für ein typischerweise computerlinguistisches Problem erstellt werden.

Vernetzung mit anderen curricularen Elementen

Spätestens nach dem Programmieren II-Kurs setzt die Informatik-Ausbildung ein, die durch Import von Veranstaltungen der Fakultät für Mathematik und Informatik realisiert wird. Hierbei werden die Programmierkenntnisse in Richtung der Computer Science erweitert, in der etwa Algorithmen zunächst abstrakt analysiert werden oder auf die speziellen Probleme verteilter Systeme eingegangen wird, ohne konkrete Implementationen im Auge zu haben. Für Hauptfachstudierende sind dies wiederum zwei vierstündige Veranstaltungen mit begleitenden Übungen.

Ebenfalls nach Abschluss des zweiten Programmierkurses können Veranstaltungen belegt werden, die in andere Sprachen einführen. Dabei ist besonders an Prolog oder Lisp zu denken, die zur Lösung vieler Probleme der Natursprachverarbeitung direktere Hilfsmittel bieten als die General Purpose-Sprachen aus der Grundausbildung.

Die Kenntnisse aus der Programmierausbildung sind unerlässlich in weiterführenden Kursen der algorithmischen Linguistik, in denen häufig die Implementation der vorgestellten Methoden verlangt werden. Im Hauptstudium bietet das Studienprojekt Gelegenheit, das Erlernte an einem umfangreichen Projekt, das in der Regel direkt am LCL oder von Dritten verwendbar sein soll, zu erproben.

zum Seitenanfang