MIT-Kurs „Introduction to Computation and Programming“

Geschrieben am 11. März 2015

Gestern habe ich den ersten Kurs der zweiteiligen Einführung des renomierten Massachusetts Institute of Technology (MIT) mit dem Titel Introduction to Computation and Programming Using Python abgeschlossen. In diesem Beitrag möchte ich von meiner Begeisterung für den Kurs selbst, aber auch für die Plattform edX.org berichten - und vielleicht den einen oder anderen motivieren, sich selbst für diesen Kurs einzuschreiben.

So viele Kurse und so wenig Zeit

Online-Kurse, neuerdings häufig MOOCs (Massive Open Online Course) genannt, sprießen insbesondere in den letzten Monaten wie Pilze aus dem Boden. Neben kommerziellen Anbietern haben auch gerade die großen amerikanischen Eliteuniversitäten sich auf die Fahne geschrieben, das „Wissen zu befreien“ und allen Interessierten zur Verfügung zu stellen. Dadurch haben sich viele interessante Angebote entwickelt. Allerdings: so interessant dies auch alles ist, wir haben alle nur 24 Stunden pro Tag zur Verfügung - und auch noch andere Verpflichtungen als Online-Kurse zu absolvieren. Es lohnt sich daher ein genauer Blick auf das Angebot, um beurteilen zu können, welche Kurse sich wirklich lohnen.

Auf meiner Suche bin ich auf den Kurs Introduction to Computation and Programming Using Python gestoßen. In den vergangenen Wochen habe ich intensiv an diesem Kurs gearbeitet und viel gelernt. Um vielleicht anderen, die sich für diesen Kurs interessieren, die Entscheidung einfacher zu machen, möchte ich im Folgenden von meinen Erfahrungen berichten.

Der Kurs und seine Inhalte

Zunächst zu einer Formalie, der Benennung der Kurse. Denn diese ist etwas verwirrend. Die „Introduction to Computation and Programming Using Python“ (begrifflich im weiteren Sinne verstanden, wie gleich zu sehen sein wird) besteht aus folgenden beiden edX-Kursen:

Während der erste Kurs in die Grundlagen der Programmierung und die Programmiersprache Python einführt, handelt es sich beim zweiten Kurs weniger um die Vermittlung neuer Konzepte, sondern vornehmlich um Anwendungen der im ersten Kurs gelernten Inhalte.

Alle Materialien, die für die erfolgreiche Teilnahme erforderlich sind, können kostenlos online bezogen werden. Der Kurs orientiert sich jedoch sehr stark an dem Lehrbuch Introduction to Computation and Programming Using Python von John V. Guttag, dem MIT-Professor, der auch für die edX-Kurse verantwortlich zeichnet. Da ich trotz der tollen Technik immer noch gerne mit einem „echten Buch“ arbeite, habe ich mir dieses dazu bestellt.

Auch wenn der Titel vermuten lässt, dass dieses Buch nur den Inhalt des ersten edX-Kurses abdeckt: Das Buch umfasst die Inhalte beider Kurse! Es ist also zu differenzieren zwischen „Introduction to Computation and Programming Using Python“ im weiteren Sinne (Inhalt des Buchs und umfassender Kurs) und „Introduction to Computation and Programming Using Python“ im engeren Sinne (Online-Kurs 6.00.1x auf edX.org). Letzterer ergibt erst zusammen mit dem Kurs „Introduction to Computational Thinking and Data Science“ (6.00.2x) den gesamten Kurs und damit den Inhalt des Buchs.

Die Online-Kurse - wie das Buch - entsprechen inhaltlich den Kursen, die seit vielen Jahren am MIT gehalten werden. Es handelt sich also nicht um Kurse, die für die breite Masse und das Online-Medium „verwässert“ wurden, wie es teilweise erfolgt, sondern um originales MIT-Material! In den letzten Jahren wurden die Kurse auf der Plattform edX.org allen Interessierten angeboten. Im Gegensatz zu anderen Kursen auf der Plattform wurden die MIT-Kurse sehr schön an das neue Medium angepasst. Es wurden nicht einfach Vorlesungen mitgeschnitten und um einige Frage-Antwort-Spielchen ergänzt, sondern eine für das Medium spezifische und optimierte Gestaltung gefunden.

Wichtig ist es den Dozenten darauf hinzuweisen, dass es sich bei diesem Kurs nicht lediglich um eine weitere Einführung in die Programmiersprache Python handelt; denn davon gibt es viele. Ziel des Kurses ist ausdrücklich die Vermittlung von „Computational Thinking“. Die Programmiersprache Python wird als Beispiel herangezogen. Da ich vornehmlich mit Python arbeite, kommt mir dies sehr gelegen: ich lerne gleichzeitig sowohl die tiefergehenden Konzepte als auch die Umsetzung mit der Programmiersprache Python.

In der Kursbeschreibung auf edX.org wird dies noch einmal besonders hervorgehoben:

„[...] That said, they are not "computation appreciation" courses. They are challenging and rigorous courses in which the students spend a lot of time and effort learning to bend the computer to their will. [...]“

Die weiteren Ziele des Kurses möchte ich mit noch einem Zitat, diesmal aus dem Vorwort des Buchs, umreißen:

The book has two pervasive themes: systematic problem solving and the power of abstraction. When you have finished this book you should have:

  • Learned a language, Python, for expressing computations,
  • Learned a systamatic approach to organizing, writing and dubugging medium-sized programs,
  • Developed an informal understanding of computational complexity,
  • Developed some insight into the process of moving from an ambigous problem statement to a computational formulation of a method for solving the problem,
  • Learned a useful set of algorithmic and problem reduction techniques,
  • Learned how to use randomness and simulations to shed light on problems that don't easily succumb to closed-form solutions, and
  • Learned how to use computational tools, including simple statistical and visualization tools, to model and unserstand data.

Damit ist dieser Kurs meines Erachtens eine runde Sache. Er führt sehr verständlich in die Grundlagen des Programmierens und des „Computational Thinking“ ein. Dabei ist er sehr fordernd und erreicht gerade dadurch einen guten Lernerfolg.

Die Dozenten

Leiter der Kursreihe und Autor des den Kurs begleitenden Lehrbuchs ist John Guttag, Professor für Computer Science und Electrical Engineering am MIT. Den ersten Teil übernimmt jedoch sein Kollege Eric Grimson. Eric Grimson ist derzeit Kanzler des MIT und Professor für Computer Science und Engineering sowie für Medical Engineering.

Prof. Grimson präsentiert die Inhalte sehr verständlich und sympatisch. Ich kann es uneingeschränkt empfehlen, seine Kurse zu besuchen. Was den zweiten Teil bei Prof. Guttag angeht, so werde ich meine Meinung noch nachliefern; denn über den zweiten Kurs habe ich mir noch keine Meinung bilden können; sobald ich diesen absolviert habe, werde ich das nachholen.

Präsentation der Inhalte

Dank der Plattform edX.org konnten die Inhalte multimedial präsentiert werden. Die Vermittlung der Inhalte erfolgt in der Regel per kurzer Video Lecture, teilweise finden sich Textinhalte. Nach der Vermittlung eines Themas werden die Inhalte in Form sog. Finger Excercises abgefragt. Diese Übungen dienen vor allem der Selbstkontrolle. Wenn man keine Lösung findet, kann man sich einen Lösungsvorschlag der Dozenten anzeigen lassen. Die Ergebnisse werden dennoch - allerdings nur mit einer Gewichtung von 10% - in die Endnote eingerechnet. Die Finger Excercises nutzen bereits viele der Möglichkeiten der Plattform. Es gibt Multiple-Choice-Fragen, teilweise muss man auch Berechnungsergebnisse eingeben; bei einem Programmierkurs kommen natürlich vor allem Programmieraufgaben vor: Man schreibt seinen Code in ein Formularfeld, sendet es ab, und die Plattform lässt automatisiert verschiedenste Tests der Dozenten über den Code laufen. Besteht der Code die Tests wird die Frage als korrekt beantwortet erklärt.

Die verschiedenen Möglichkeiten der Plattform edX.org kann man sich sehr schon im Rahmen des Kurses DemoX anschauen.

Prüfungen und Deadlines

Neben den bereits genannten Finger Excercises werden insgesamt sieben sog. Problem Sets zur Bearbeitung gestellt. Diese Problem Sets müssen innerhalb einer vorgegebenen Zeitspanne bearbeitet werden, in der Regel innerhalb von etwa 10 Tagen. Nach der Hälfte der Kurszeit gibt es ein Quiz, das innerhalb von vier Tagen zu bearbeiten ist. Am Ende des Kurses steht ein Final Exam, für das fünf Tage zur Bearbeitung zur Verfügung stehen. Die Endnote setzt sich wie folgt zusammen: Finger Excercies 10%, Problem Sets 40%, Quiz 25% und Final Exam ebenfalls 25%.

Die nur als grober Überblick zur Einstimmung. Genaueres ist natürlich in den Kursunterlagen zu finden.

Erforderliche Vorkenntnisse

Der Kurs richtet sich ausdrücklich auch an Studenten, die noch keine Programmiererfahrung haben. Dafür fand ich die Inhalte sehr sportlich. Ich bin mir nicht sicher, ob ich den Kurs bestanden hätte, wenn ich keine vorherige Programmiererfahrung gehabt hätte. In den einschlägigen Foren finden sich auch Erfahrungsberichte, die es für utopisch halten, diesen Kurs ohne Vorkenntnisse zu absolvieren. Auch die Dozenten weisen darauf hin, dass der Kurs regelmäßig auf der Plattform edX.org wiederholt wird und man seinen ersten Durchgang auch als „Anlauf“ sehen kann, wenn einem der Stoff zu schwierig ist.

Ausweislich der Kursbeschreibung ist „High school algebra and a reasonable aptitude for mathematics“ erforderlich. Ich fand den Anteil an Mathematik vor dem Hintergrund, dass dies kein Kurs ist, um „mal eben etwas Python zu lernen“, sondern auf Universitätsniveau eine Einführung in Computational Thinking zu bekommen, angemessen und durchaus machbar.

Zeitaufwand

Beide edX-Kurse gehen jeweils über 9 Wochen, man ist also gute viereinhalb Monate beschäftigt, wenn man beide Kurse nacheinander absolvieren möchte. Die Dozenten geben an, dass man einen zeitlichen Aufwand von ca. 12 (Kurs 6.00.1x) bzw. 15 Stunden (Kurs 6.00.2x) in der Woche einplanen sollte. Wenn man diese Zahlen zu Grunde legt, hat man sich also nach Absolvierung der Kurse 243 Stunden ausschließlich mit dieser Thematik beschäftigt. Das entspricht ca. 30 vollen Arbeitstagen bei einer Arbeitszeit von 8 Stunden, d.h. ganzen vier Wochen.

Meiner Meinung nach kann man mit etwas Vorkenntnissen auch durchaus schneller voran kommen. Möchte man allerdings nicht nur einen „Schein erschlagen“, sondern sinnvoll etwas lernen, sollte man auch die weiterführenden Materialien durcharbeiten, die im Rahmen des Kurses angegeben werden. Und dies nimmt durchaus einige Zeit in Anspruch. Dann kommt man schnell über die angegebenen 12 bzw. 15 Stunden in der Woche.

Honor Code Certificates und Verified Certificates

Das erfolgreiche Bestehen eines Kurses wird durch ein Zertifikat bestätigt. Kostenslos bekommt man ein sog. Honor Code Certificate ausgestellt. Ich habe mich für diesen Kurs für ein kostenpflichtiges Verified Certificate entschieden. Dabei wird die Identität durch Ausweispapiere und Screenshots mithilfe einer Webcam bestätigt.

Zusammenfassung

Den ersten Teil des Kurses, den ich bereits absolviert habe, kann ich uneingeschränkt empfehlen. Ich bin nun gespannt auf den zweiten Teil. Sehr wichtig war mir die systematische Einführung in die Konzepte der Programmierung. Dies war bereits Inhalt des ersten Kurses. Die Präsentation und Gliederung des Kurses hat mir sehr zugesagt. Die abwechslungsreiche Art der Präsentation durch Video Lectures, die immer wieder durch Prüfungsfragen unterbrochen werden, sorgt dafür, dass man am Ball bleibt und sich nicht nur berieseln lässt. Die recht engen Zeitvorgaben stellen sicher, dass man die Bearbeitung der Fragen regelmäßig erledigt und nicht aufschiebt.