Allround Talente im Grundstudium

Leonie (sblog)
sblog
Published in
5 min readJun 29, 2017

Der Programmierkurs für PhysikerInnen und MathematikerInnen

Physik hört sich für viele ziemlich einseitig an. Die meisten glauben, es ist quasi wie ein Maschinenbau- oder Ingenieur-Studium — nur anders. Dementsprechend mitleidig wird des Öfteren nach der Frauenquote gefragt, die sich tapfer bei geschätzten 35% (+- 5%) hält. Zum Glück ist das Physikstudium kein Maschinenbau- oder Ingenieur-Studium, sondern vor allem ein Grundlagenstudium der Mathematik und der wissenschaftlichen Methoden in Bezug auf physikalische Probleme mit vielen Ausflügen in andere Fachrichtungen wie zum Beispiel die Informatik. Mein Interesse für das Programmieren in der Schule hat mich in der Entscheidung Physik zu studieren, bestärkt und sich im Nachhinein als sehr hilfreich herausgestellt, denn gleich in den ersten Semesterferien kam der erste Programmierkurs, über den ich euch dieses Mal berichten möchte.

Im C-Kurs lernt man die Programmiersprache C (für die, die sich jetzt schon gut auskennen c11). Eigentlich ist Python die gebräuchlichere Programmiersprache, die auch gut zur Auswertung von Versuchen genutzt werden kann. Weil das Studium aber ein Grundstudium ist und keine Hochschulausbildung, lernen wir stattdessen die Sprache, auf die andere Programmiersprachen aufgebaut sind, um zu verstehen, wie Computer ticken. Also gut, dann eben C! Sich zu überlegen, wozu man konkret die Dinge brauch, die man im Physikstudium so lernt, ist sowieso fast immer eine schlechte Idee …

Die Eckdaten: Der C-Kurs wurde von einem Informatik Professor gehalten und bestand im Grunde „nur“ aus einer dreistündigen Vorlesung um 12 Uhr. Diese Uhrzeit war bis jetzt die beste für meinen Biorhythmus und für schöne gemeinsame Abende davor. Leider ging das im Semester nicht so weiter, sodass ich mittlerweile wieder entweder übermüdet oder zu spät bin. Gerne auch beides. Aber zurück zu den Semesterferien: der Haken an der ganzen Sache bestand mal wieder aus zu lösenden Aufgaben, genug um drei Wochen lang jeden Tag zu Knobeln. Man musste 80% der Aufgaben zumindest im Prinzip bearbeitet haben, um zur Klausur zugelassen zu werden. Die erste Intuition, man könne ja mit copy paste viel leichter alles abschreiben, wurde sofort hinfällig — angesichts der Komplexität der Programmiersprache wäre man dann einfach hoffnungslos durch die Prüfung gerasselt. Also zurück zur Routine aus dem Semester, nur diesmal programmieren statt rechnen. Es gab Computerräume in der Informatik und Physik, in denen man morgens und nach der Vorlesung die Aufgaben bearbeiten konnte und TutorInnen bei Problemen fragen konnte. Außerdem wurde es ein sehr umfangreiches Skript zur Vorlesung bereitgestellt. So richtig romantisch fanden wir die sogenannten CIP-POOLs allerdings nicht und deshalb haben wir stattdessen in einem anderen Raum gearbeitet, in dem keine TutorInnen waren, wir aber dafür weitgehend unsere Ruhe hatten.

Richtig romantisches Programmieren! Wahrscheinlich wird gerade die eine Laufvariable gesucht, die bis i+1 statt nur i laufen sollte und deshalb das ganze Programm crasht.

Ein großes Problem am C-Kurs ist tatsächlich das Datum. Ich hatte ziemliches Glück, überhaupt Zeit dafür zu haben, denn die Nachschreibeklausuren liegen ebenfalls immer gegen Ende der Ferien. Wer Mathe nicht beim ersten Mal mitgeschrieben hatte oder durchgefallen war, ging in der zweiten Woche des C-Kurses lieber zum Repititorium (der Wiederholungsveranstaltung für die Prüfung). Weil der C-Kurs zwar je nach Vorkenntnissen und Motivation mehr oder weniger anspruchsvoll, aber für ausnahmslos jeden ziemlich zeitaufwendig ist, ist beides gleichzeitig schwer zu realisieren. Nach dem C-Kurs durfte ich weiter auf die Exphy Prüfung lernen, die ich nach hinten verschoben hatte, weil sie auf den Tag nach der Mathe Prüfung angesetzt war. Objektiv betrachtet waren meine Semesterferien also nicht nur ziemlich mau sondern vor allem nicht wirklich existent … Ich hatte trotzdem Spaß, es war schön, mit allen zusammen in Göttingen zu sein und im Vergleich zum Semester war das eine entspannte Zeit, sogar die MathematikerInnen belegen den Kurs. Für jemanden, der an solchen Ferien Spaß hat, kann Physik gar nicht so schlecht sein.

Und nun zu einem kurzen Überriss des Inhalts eines solchen Programmierkurses. Wenn man mehr mit dem Computer kommunizieren will als über die Programme, so benutzt man das Terminal, in dem man mit kryptischen Kommandos verschiedene Programme aufrufen und mit Dateien verknüpfen kann, beispielsweise um sich Daten in einen Graphen auftragen zu lassen und mit einer theoretischen Kurve zu vergleichen. Mit C schreibt man einen Quellcode in einer Textdatei, der bestimmte Eingaben (einzelne Zahlen oder Buchstaben oder ganze Texte) aus dem Terminal einlesen, verarbeiten und ausgeben kann. In der Textdatei kann man sich dann zur Genüge austoben und den Computer alle möglichen Dinge rechnen, herumsortieren, vergleichen und ausgeben lassen, die einem einfallen und die man mit C umsetzen kann. Das war’s eigentlich auch schon.

Klingt einfach oder? Na dann geb’ ich mal ein Beispiel: aus einem eingegebenen Text wie „hallo!“ soll die Anzahl jedes Zeichens ausgegeben werden. Klingt immer noch ziemlich einfach. Soweit ich noch fit bin, liste ich euch mal die ersten Schwierigkeiten auf, mit denen man zu kämpfen hat:

- Der Text ist beliebig und daher auch beliebig lange. Wie kriegt man das Programm dazu, so viele den gesamten Text durchzugehen, ohne zu wissen, wie lang er sein wird?

- Zeichen werden nicht als Zeichen sondern als Zahlen gespeichert, man muss sich also so viele Variablen wie existierende Zeichen als Platzhalter definieren und jeweils überschreiben, wenn das Zeichen benutzt wird.

- Das naheliegende sind also vermutlich zwei oder drei Schleifen, in denen man die Zeichen des Textes durchgeht und auf der entsprechenden Variablen mitzählt. Jetzt kommen die Kleinigkeiten, Laufindizes, Umwandlung von Text zu Zahl, Speichern der Variablen, Doppelbenennungen und Überschreiben der wichtigen Variablen, wo endet der Text? etc. pp.

Das war noch eine ziemlich leichte Aufgabe, für die man allerdings schon viel wissen musste. Am Ende bestanden die schwierigeren Aufgaben zum Beispiel darin prüfen zu lassen, ob eine 9x9-Matrix ein Sudoku ist oder nicht. „Der Einfachheit halber“ haben Freunde von mir erst einmal ausgeklügelt, wie die Matrix von einem Dokument einlesen lassen kann, damit nicht immer 81 Zahlen im Terminal eingegeben werden müssen. Ob das am Ende wirklich Zeit gespart hat, wage ich zu bezweifeln. Ich habe den Quellcode dann kopiert, um zu testen, ob mein Sudokutest klappt — bei aller Liebe …

Das ist ein Beispiel für einen Quellcode, der die eine Zeichenkette der Länge 20 einliest (Kommando scanf), die Zeichen umdreht (invert) und schließlich ausgibt (printf).
Hier sind die in der oben benutzten Anweisung aufgerufenen Funktionen definiert, invert und strlen. Die orange markierten Wörter stehen für unterschiedliche Speichertypen.

Im Nachhinein fand ich das Programmieren sehr entspannt im Vergleich zu gefühlt unlösbaren Matheaufgaben, wäre es nicht in den Semesterferien gewesen — das ist der offensichtliche Nachteil des Kurses. Ach ja und es gibt mal wieder eine Note auf die Prüfung, aber man sollte sich wirklich angewöhnen, Module nicht gut sondern überhaupt bestehen zu wollen. Das ist allein schon Herausforderung genug!

Liebe Grüße

Eure Leonie

--

--

Leonie (sblog)
sblog
Writer for

Hallo, mein Name ist Leonie. Ich schreibe über das Physikstudium an der Uni Göttingen.