Direkt zum Hauptbereich

Wie lerne ich eine Programmiersprache an einem Tag?


(Foto von jbvkoos)

Lassen Sie sich mal an einem Tag für acht oder zehn Stunden, oder wenn es Sie so richtig gepackt hat, für 12 Stunden auf eine neue Programmiersprache ein! Sie werden sehen, dass Sie erstaunlich weit kommen. Weiter als Sie es vielleicht für möglich gehalten haben. Das geht, wenn Sie sich der Sache ein wenig mit System nähern. Hier ein paar Tipps und Vorschläge. Ich beziehe mich im Folgenden beispielhaft auf JavaScript.

Bevor es los geht, ein kleiner Hinweis: Sie werden keine Sprache an einem Tag lernen können, wenn Sie nicht bereits mit mindestens einer modernen Programmiersprache gut vertraut sind. Die erste Hürde muss also schon genommen sein. Ab der ersten Hürde wird es immer leichter ;-)

Vorbereitung: Besorgen Sie sich ein Buch zu der Programmiersprache, die Sie interessiert. Am besten in Papierform -- mit Papier lässt sich sehr schnell und zügig arbeiten. Legen Sie sich für Ihre Streifzüge durch das Buch Stift und Textmarker bereit. Beschaffen Sie sich den Standard zu Ihrer neuen Programmiersprache. Meist finden sie ihn frei zugänglich im Web. Ein Standard ist ein technisches Dokument, das die Programmiersprache genau beschreibt und definiert. Manchmal gibt es keinen formalen Standard, sondern ein Buch oder Dokument, das die Sprache verbindlich definiert. Suchen Sie danach. Und zu guter letzt: Installieren Sie sich die neue Sprache auf Ihrem Rechner, damit Sie sofort damit herumspielen können. Ja, spielen -- die Sache soll Spaß machen!

Um all das kümmern Sie sich am besten ein paar Tage bevor Sie sich mit der Sprache dann für einen Tag beschäftigen wollen. Los geht's!

Syntax anschauen: Beginnen Sie mit einen Blick in die Syntax, also den Regeln, wie gültige Programme aussehen dürfen. Die Syntaxregeln werden Sie vermutlich im Standard finden, meist im Anhang. Viele Bücher zu Programmiersprachen verzichten bedauerlicherweise sogar auf eine klare Angabe der Syntaxregeln; jetzt wissen Sie, warum Sie ihn sich beschaffen sollten. Schauen Sie zum Beispiel in den Annex A des Standards zu JavaScript, ECMA-262, 3rd Edition. Auf wenigen Seiten erfahren Sie interessante Dinge über die Sprache, etwa eine Liste reservierter Schlüsselwörter (keywords). Von "break", "case", "catch", ... bis hin zu "var", "void", "while", "with". Ganze 25 Schlüsselwörter gibt es zu erkunden. Damit gibt es ein erstes klares Arbeitsprogramm: Verstehen, wofür jedes dieser Schlüsselwörter da ist. Verbergen sich hier neue, interessante Konzepte?

In der Syntaxbeschreibung werden Sie bei JavaScript zum Beispiel auch entdecken, dass reguläre Ausdrücke zur Sprache gehören. Wenn Ihnen das nichts sagt: unbedingt lernen! Nicht jetzt, an diesem Tag -- sonst kommen wir nicht durch -- aber reguläre Ausdrücke sind ein mächtiges Werkzeug bei der Suche nach Mustern in Zeichenketten. Muss man können! Hat praktisch jede moderne Sprache mindestens als Bibliothek im Gepäck.

Welche Datentypen gibt es? Jetzt kann Ihr Buch zum Einsatz kommen. Blättern Sie durch das Inhaltsverzeichnis, verschaffen Sie sich einen Überblick über die Themen. Beschränken Sie sich rein auf Kapitel zu Ihrer neuen Sprache. Ignorieren Sie Bibliotheken, Erweiterungen oder Spezialanwendungen. Das ist jetzt alles uninteressant. Fangen Sie an mit den Datentypen: Welche Basistypen gibt es, welche "Sammeltypen" gibt es? JavaScript hat lediglich drei primitive Datentypen: Zahlen, Zeichenketten und Booleans. Dazu kommen noch zwei triviale Typen: null und undefined. Daneben gibt es noch den Datentyp des Objekts als Sammeltyp. Und das war es schon -- JavaScript präsentiert sich erstaunlich einfach. Hätten Sie's gedacht? Zwar redet man auch von Arrays, die jedoch ebenfalls Objekte sind; Funktionen, Zeitwerte, reguläre Ausdrücke und Fehler sind lediglich besondere Arten von Objekten.

Ein wichtiger Punkt ist noch: Wie wird mit Typen umgegangen? Handelt es sich bei Ihrer neuen Programmiersprache um dynamische oder statische Typen? Sie wissen vielleicht, das dynamisch typisierte Sprache, wie Python, Ruby oder JavaScript, zunehmend an Boden gewinnen. Die Art mit solchen Sprachen zu arbeiten ist eine gänzlich andere als mit statisch typisierten Sprachen wie Java oder C#. Noch wichtiger jedoch ist: Wie werden Datenwerte manipuliert? Wie heißt es so schön im Informatik-Slang: by value oder by reference? Wie werden Daten zugewiesen, wie wird beim Aufruf von Methoden, Prozeduren, Funktionen mit ihnen umgegangen? In JavaScript ist die Welt einfach geregelt: Primitive Typen werden "by value" behandelt, Objekte "by reference". Nur Strings passen nicht so ganz in das Schema. Strings sind immutable, nicht veränderbar, weshalb es keine Rolle spielt, wie sie behandelt werden.

Welche Anweisungen gibt es? Viele Anweisungen werden Ihnen bekannt vorkommen, wie z.B. "if", "switch", "while", "break", "return" etc. Suchen Sie nach Abweichungen, nach Anweisungen und/oder deren Verwendung, die Sie so aus Ihnen bekannten Sprachen nicht kennen. Den meisten ist die "for"-Schleife aus JavaScript bekannt, nicht jedem jedoch das "for/in".

Wie wird mit Variablen umgegangen? Müssen Variablen deklariert werden? Muss der Typ einer Variablen mit angegeben werden? Wie ist der Scope einer Variablen? Wenn Sie noch nie etwas vom lexikalischen Scope gehört haben -- jetzt müssen Sie sich damit auseinander setzen, denn die meisten Programmiersprachen arbeiten mit lexical scope, so auch JavaScript. Allerdings kennt JavaScript keinen Block-Scope, wie er sich zum Beispiel durch ein Schleifenkonstrukt wie "for" ergibt.

Fundamental ist das Konzept der Variablen, wenn Sie sich als Kenner einer imperativen (anweisungsorientierten) Sprache plötzlich mit einer funktionalen Sprache, wie z.B. Haskell oder Scheme/Lisp, beschäftigen. Plötzlich halten Variablen ihre Werte nicht über die Lebensdauer eines Funktionsaufrufs hinaus. Dauerhafte Wertzustände werden nicht mehr durch Objekte gekapselt; überhaupt arbeitet man in der funktionalen Welt niemals mit impliziten Zuständen. Scheme und Lisp erlauben zwar Ausnahmen, aber Sprachen wie Haskell sind da sehr konsequent und bringen einen mit vollkommen neuen Dingen in Berührung wie zum Beispiel der Zustandsmonade.

Welche Operatoren gibt es? Plus "+", Minus "-", Objekt-Schöpfung "new" etc., all das sind Operatoren. Ohne Operatoren läuft nicht viel. Hier verstecken sich die eigentlichen Arbeitsknechte. Meist sind für Operatoren Vorrangsregeln definiert (wie "Punkt- vor Strich-Rechnung"), die man grob kennen sollte. Ganz wichtig ist es zu klären, was in Ihrer neuen Sprache Gleichheit (equality) von Identität (identity) unterscheidet -- hier spielen "by value" und "by reference" wieder eine wichtige Rolle. Ein anderer wichtiger Operator ist die Zuweisung.

Welche speziellen Konzepte gibt es, die wesentlich für die Sprache sind? Für diese Frage ist es sehr schwer, eine Richtschnurr vorzugeben. Sie müssen zum Kern der Sprache vordringen. Was ist hier anders? Welche Konzepte, welche Konstrukte gibt es, die wesentlich den Charakter und die Denke der Programmiersprache prägen? In JavaScript sind es Funktionen (JavaScript hat ein sehr funktionales Herz) und Objekte/Arrays. JavaScript ist nicht, wie Sie es vermutlich von den meisten OO-Sprachen her kennen, klassen-basiert, sondern prototyp-basiert -- und kennt auch eine Form der Vererbung. Wenn das neu für Sie ist, dann ist hier ein Einstieg gefunden in die Welt von JavaScript. In den Objekten und Funktionen liegt der andere Ansatz verborgen, der JavaScript auszeichnet. Sie beherrschen JavaScript nicht, wenn Sie an dieser Stelle auf einen Abstieg in die Tiefen von JavaScript verzichten. Wenn Sie sich danach noch mit Modulen und Namensräumen beschäftigen, dann haben Sie JavaScript erobert.

Spielen Sie herum -- aber bleiben Sie fokussiert! Tippen Sie kleine Programmschnipsel in einen Editor oder eine IDE, machen Sie Ihre ersten Gehversuche mit der neuen Sprache. Dann prägen sich mache Dinge schneller ein oder man kann sein Verständnis für das eine oder andere Feature austesten. Aber lassen Sie sich nicht ziellos treiben. Ihr Ziel ist, an diesem einen Tag eine neue Sprache so gut und systematisch zu erfassen, wie möglich. Wenn Ihnen etwas Interessantes über den Weg läuft, notieren Sie es sich für später.

Wie geht es nach so einem Tag weiter? Das hängt ganz davon ab, warum Sie sich mit der neuen Sprache auseinander gesetzt haben. Wenn Sie sich weiter mit der Sprache beschäftigen wollen, nutzen Sie die Sprache für Ihr nächstes kleines Projekt oder Vorhaben. Learning by doing ist noch immer der erfolgreichste Weg.

Natürlich bedarf es einiger Wochen bis Monate, bis Sie sich in eine neue Sprache wirklich eingefunden haben; bis sie anfangen, in der Sprache zu denken und fließend in ihr zu sprechen. Mir sind schon des öfteren Talente über den Weg gelaufen, die in acht bis zwölf Wochen von Neulingen zu echten Experten in einer Sprache heranwuchsen. Das gelingt aber nur zusammen mit einem Projekt, das einem täglich die Auseinandersetzung mit der neuen Sprache abfordert.

---

Verraten Sie es mir: Hat Ihnen dieser Beitrag und seine Thematik gefallen? Haben Sie noch weitere Tipps für das Erlernen einer Programmiersprache?

Beliebte Posts aus diesem Blog

Lidl und der Kassen-Bug

Es gibt Fehler, im Informatiker-Jargon "Bugs", die etwas anrühriges haben. Ich bat den Menschen an der Kasse bei Lidl um einen Moment Geduld und meine Kinder um Ruhe, um nicht den wunderbaren Moment zu verpassen, bei dem es passierte. Der Lidl-Mensch fluchte kurz auf -- und ich war entzückt! "Einen Moment, davon muss ich ein Foto machen!" Und dann machte ich noch eines. Ich bin heute extra für diesen Fehler zu Lidl gepilgert -- ich wollte es mit eigenen Augen sehen. Gestern hat mir ein Student (vielen Dank Herr Breyer) von diesem Fehler in einer EMail berichtet. Ein richtig schöner Fehler, ein Klassiker geradezu. Ein Fehler, den man selten zu Gesicht bekommt, so einer mit Museumswert. Dafür wäre ich sogar noch weiter gereist als bis zum nächsten Lidl. Der Fehler tritt auf, wenn Sie an der Kasse Waren im Wert von 0 Euro (Null Euro) bezahlen. Dann streikt das System. Die kurze Einkaufsliste dazu: Geben Sie zwei Pfandflaschen zurück und Lidl steht mit 50 Cent bei Ihne

Syntax und Semantik

Was ist Syntax, was ist Semantik? Diese zwei Begriffe beschäftigen mich immer wieder, siehe zum Beispiel auch " Uniform Syntax " (23. Feb. 2007). Beide Begriffe spielen eine entscheidende Rolle bei jeder Art von maschinell-verarbeitbarer Sprache. Vom Dritten im Bunde, der Pragmatik, will ich an dieser Stelle ganz absehen. Die Syntax bezieht sich auf die Form und die Struktur von Zeichen in einer Sprache, ohne auf die Bedeutung der verwendeten Zeichen in den Formen und Strukturen einzugehen. Syntaktisch korrekte Ausdrücke werden auch als "wohlgeformt" ( well-formed ) bezeichnet. Die Semantik befasst sich mit der Bedeutung syntaktisch korrekter Zeichenfolgen einer Sprache. Im Zusammenhang mit Programmiersprachen bedeutet Semantik die Beschreibung des Verhaltens, das mit einer Interpretation (Auslegung) eines syntaktisch korrekten Ausdrucks verbunden ist. [Die obigen Begriffserläuterungen sind angelehnt an das Buch von Kenneth Slonneger und Barry L. Kurtz: Formal Syn

Mit Prof. Handke im Gespräch: Vom Workbook zum Inverted Classroom

Aus dem Netz in Handkes Büro Es gibt diese schönen Momente, da führen soziale Medien zu sozialen Begegnungen im echten Leben. Ich twittere im Nachgang zur #BiDiWe16, ein Dialog mit Jürgen Handke ergibt sich, er schickt mir seine Telefonnummer, ich rufe sofort durch, wir verabreden uns. Drei Tage nach der #BiDiWe16 sitze ich bei Handke im Büro, das gleichzeitig sein beachtlich ausgestattetes Aufnahmestudio beherbergt. Es ist Freitagmorgen, 9. September 2016. Jürgen Handke ist mir kein Fremder. Ich habe zwei seiner ICM-Konferenzen besucht, auf der #BiDiWe16 in Berlin hielt er die Keynote. Er hat für seine Lehre Preise erhalten, zuletzt 2015 den Ars Legendi-Preis für exzellente Hochschullehre. Zugegeben, ich hadere mit dem Konzept des Inverted Classroom -- auch Flipped Classroom genannt. Meine Erfahrungen mit der Programmierausbildung von Informatik-Studierenden des 1. und 2. Semesters lassen mich zweifeln. Videos habe ich auch schon produziert, aber vor allem das selbstgesteuerte