namespace cpp

C++ lernen, kennen, anwenden

Benutzer-Werkzeuge

Webseiten-Werkzeuge


autor:hinundher

Hin und Her: Vom Lehrer zum Physiker und wieder zurück (via SRZ)

Dr. René Richter

Durch das Schülerrechenzentrum (SRZ) fand ich zu meiner jetzigen Tätigkeit. Dabei war ich nie Schüler am SRZ. Wie geht das? Dass nicht lineare Zusammenhänge zu völlig anderem Verhalten führen, ist neben Quanten- und Relativitätstheorie die dritte herausragende naturwissenschaftliche Erkenntnis des vergangenen Jahrhunderts. Die Vorgänge dieser Welt sind nicht geradlinig. Lebensläufe sind es auch nicht.

Als 6jähriger habe ich auf die gelegentliche Frage "Was willst du einmal werden?" ohne Zögern geantwortet: Lokführer. Vor 35 Jahren fuhren noch Dampflokomotiven, Baureihe 55 u.a., die heute nur noch bei besonderen Gelegenheiten zu sehen sind. Diesel- und E-Loks kamen erst später auf. Im Winter 1969/70 war die Bahnlinie an meinem Wohnort bis drei Meter hoch verweht. Eine Eisenbahnschneefräse grub einen Beinahe-Tunnel, geschoben von zwei dampfenden schwarzen Ungetümen. Das gab einen Eindruck, was Natur und was Technik vermag. Später verschob sich mein Wunsch. Ich wollte Ingenieur werden, also selber etwas erfinden. Oder auch Lehrer, da ich meinen Klassenkameraden öfter mal was erklären musste. In dieser Absicht habe ich dann auch studiert. Doch schon die Diplomarbeit brachte mich auf eine andere Fährte. Statt als Lehrer zur Schule zu gehen, studierte ich fortan die Theoretische Physik, die mathematischen Grundlagen der Technik und Naturbeschreibung.

Bis zur Promotion schrieb ich seltsam anmutende Formeln wie $\sigma = C:\varepsilon$ [1] oder $\nabla \times \varepsilon \times \nabla= 0$ [2] und deren Folgerungen auf, um das Verhalten von Festkörpern bei Verformungen zu beschreiben. Kurioserweise beschreiben solche linearen Formeln das Materialverhalten, außer eben an den interessanten Stellen. Nur da, wo Sprünge auftreten, entstehen Kräfte und Risse. Um deren Entstehungsmechanismen ging es mir. Dort, wo der Formelkalkül nicht mehr weiterkam, musste mit Zahlen gerechnet werden. Mit vielen Zahlen und langen Rechenketten. Ich kam ohne maschinelles Rechnen nicht aus. Programmierkenntnisse aus dem Informatikteil des Mathematiklehrerstudiums und der Diplomarbeit fanden ihre Anwendung. In einem halben Jahr verbrauchte ich 1500 kWh Energie, die häusliche Stromrechnung verdoppelte sich. Drei Netzteillüfter waren dem Dauerbetrieb nicht gewachsen. In der Rückschau ist es deprimierend: Mit heutigen Computern würden dieselben Rechnungen nur zwei Tage dauern, das Entwickeln der Programme aber immer noch so lange.

Beim Schreiben der Programme habe ich mich mehrfach geärgert. Die Formeln verloren die mir vertraute Gestalt, als sie in die Programmiersprache übertragen wurden:

berechne(sigma, C, epsilon, sigma_extern)

Das Innere dieser Rechnung war nur mit Mühe in Mathematik zurück übersetzbar. Gerne hätte ich geschrieben:

sigma = C * epsilon + sigma_extern

Ich wusste zwar, dass es Programmiersprachen gibt, die das erlaubten. Sie standen mir aber zu diesem Zeitpunkt nicht zur Verfügung. Ich musste mein Projekt mit den einmal gewählten Mitteln zum (erfolgreichen) Ende führen. Eine neue Sprache zu lernen, die über mehrere Jahre gewachsene Programmbibliothek umzuschreiben und zu überprüfen, fehlte mir die Zeit. Ich beschloss aber, dies bei Gelegenheit nachzuholen.

Man lernt vor allem dann, wenn man gezwungen ist, das Gelernte anzuwenden. Und wenn man in der Lage ist, anderen etwas zu erklären, hat man es begriffen. Die Gelegenheit bot sich, als das SRZ 1994 sein Sonderkurs-Angebot verbreitern wollte und jemanden suchte, der in den Sprachen C oder C++ bewandert ist. Meine Frau hatte in ihrem Zusatzstudium Informatik davon erfahren. Bewandert war ich zwar nicht, aber ich hatte den festen Vorsatz, mich damit zu befassen und im Wartezustand zwischen Promotion und fester Arbeit auch genügend Zeit dazu. Ich nahm die Bücher wieder auf, die ich zehn Jahre vorher verwirrt an jener Stelle zugeklappt habe, wo der Unterschied von i++ und ++i erwähnt wurde.

Mit einem Jahresplan und nur wenig Vorsprung startete der erste Sonderkurs. Jede Woche war bei mir mindestens ein Tag für die Vorbereitung reserviert. Eine Niederschrift entstand, ab dem zweiten Durchgang ein Handbuch. Die Grundlagen einer Programmiersprache sind recht schnell erlernbar, ihre Ecken und Kanten lernt man allerdings erst im Gebrauch kennen, ihre Grundhaltung macht man sich nur langsam zu eigen. Vieles darüber lernte ich aus Büchern; manchmal las ich auch die falschen, wie ich später feststellte. Vor allem beim objektorientierten Modellieren ist längere Erfahrung notwendig, um die richtigen Entscheidungen zu treffen, gute und schlechte Ansätze voneinander unterscheiden zu können. Eine Sprache beherrschen lernt man nicht in 21 Tagen, das ist ein langwieriger Prozess. Zur Orientierung nutze ich eine logarithmische Skale (zur Basis e = 2,718…):

Stufe Zeit Fähigkeiten
0 1. Tag Entschluss, Sprache zu lernen
1 3 Tage ein Buch besorgt
2 1 Woche Hallo Welt
3 3 Wochen erstes eigenes Programm
4 2 Monate einfache Algorithmen
5 6 Monate erstes eigenes Projekt
6 1 Jahr fortgeschrittener Anfänger
7 3 Jahre Berufsanfänger
8 8 Jahre erfahrener Berufsprogrammierer
9 20 Jahre Guru
10 60 Jahre Sprachimplementierer

Am Anfang geht es relativ schnell, zwischendurch hat man auch manchmal das Gefühl, jetzt kommt nichts Neues mehr, bis dann wieder mal eine "Erleuchtung" folgt. Die kommt aber nicht vom Warten, sondern nur in der steten Auseinandersetzung. In der Skale habe ich eine Vollzeitbeschäftigung vorausgesetzt; mit 1–2 Tagen pro Woche würde ich mich jetzt also etwa auf Stufe 7 einordnen. Mit funktionaler, prozeduraler, modularer, objektbasierter, objektorientierter und generischer Programmierweise kann eine ganze Fülle von Denkansätzen verfolgt werden. In ihrer Kombinierbarkeit entfaltet sich die Ausdruckskraft der Sprache. Jeder Stil beeinflusst die Denkweise auf eine bestimmte Art. Negativ formuliert: "A language that does not change the way you think is not worth knowing."

Es dauert einige Zeit, bis man eine bestimmte Denkweise akzeptiert. An einigen Stellen schreckt man auch zurück, hält ein Konzept für abscheulich. Es ist nicht (nur) der Gewöhnungseffekt, dass man später selbstverständlich nutzt, was einem anfangs fremd vorkam, z.B. den Unterschied von i++ und ++i. Prägungen durch andere Sprachen wirken meist hinderlich, Kenntnisse in anderen Sprachen befördern die Suche von Parallelen, das Ziehen von Vergleichen. Dies und die syntaktische Ähnlichkeit mit anderen Sprachen bewog wohl mit die Entscheidung, nach sieben Jahren als Sonderkurs C++ gleichberechtigt neben Pascal in den Informatik-Grundkurs zu integrieren.

Für mich brachte 2001 noch eine einschneidende Veränderung. 1996 in der experimentellen Materialforschung angekommen, hatte meine Tätigkeit als Physiker dort einen zeitlich befristeten Charakter. Am Ende jedes Forschungsprojektes stand die Frage, wie geht es weiter, zumeist mit Wartezeiten bis zum nächsten Projekt. Nach fünf Jahren Förderung hätte ich auf Wanderschaft gehen müssen. Ich war aber gerade seßhaft geworden. Am Anfang des Jahres 2000 fand ich in meinem Postfach im SRZ eine Visitenkarte. Gesucht wurde jemand, der sich mit der Sprache C++ auskennt und dies zudem lehrend vermitteln kann. Zuerst probeweise, dann auf Honorarbasis begann ich meine Tätigkeit an einer Berufsschule in privater Trägerschaft. Vor drei Jahren nahm ich dann schweren Herzens Abschied von der Forschung. Kurioserweise schloss sich so der Kreis zu meinem Ausbildungsberuf. Es ist zwar nicht Mathematik und Physik, wie anfangs beabsichtigt. Als Dozent für Angewandte Informatik versuche ich, Berufsschülern die Denkweisen eines Programmierers nahe zu bringen. Bei manchem gelingt das auch. Ein Hobby hat sich zum Beruf gewandelt.

Die Abläufe sind nicht geradlinig. Manches verläuft in Schleifen und Kurven. Es wäre kurzsichtig, immer nur das aufzunehmen, was man demnächst für anwendbar hält. Lerne dann, wenn es etwas zu lernen gibt, nicht erst dann, wenn du es brauchst. Man weiß nie, wozu es noch gut ist.

Anmerkungen

  1. Das Hookesche Federkraftgesetz: Die Federkraft wächst mit der relativen Längenänderung der Feder. In der Schule meist $F = k \Delta l/l$ oder $F = Ds$ geschrieben.
  2. Umgangssprachlich formuliert: Festkörper haben im Normalfall keine Risse und durchdringen einander nicht. Oder: Wo ein Körper ist, kann kein zweiter sein.

Veröffentlicht in: Festschrift 20 Jahre Schülerrechenzentrum Dresden. Technische Universität Dresden (2004).

autor/hinundher.txt · Zuletzt geändert: 2014-07-17 17:47 (Externe Bearbeitung)