Ein guter Start für zukünftige Programmierer
Es begann wohl in 2002. Ich habe darüber nachgedacht, Programmieren zu unterrichten und dass Ruby eine tolle Sprache ist, mit dem Programmieren zu beginnen. Viele waren begeistert von Ruby, weil es so mächtig war, sehr elegant und das Programmieren unheimlich viel Spaß machte. Darüber hinaus fand ich, es wäre ein toller Einstieg in die Programmierung.
Unglücklicherweise gab es damals noch kaum Dokumentation über Ruby auf Anfänger-Niveau. In der Community wurde öfter von einem Tutorial "Ruby für Neulinge" gesprochen, d.h. im Allgemeinen ein Tutorial, wie Programmierung unterrichtet werden sollte. Je mehr ich darüber nachdachte, desto mehr konnte ich darüber mitreden (was mich selbst sehr erstaunte). Und schließlich kam ich zu dem Entschluß, dass ich das Tutorial schreiben sollte, statt immer nur darüber zu reden. Also habe ich es getan!
Und es war nicht sehr gut. Ich hatte viele theoretische Ideen, aber ein tolles Tutorial für Nicht-Programmierer zu schreiben, war in der tat viel schwieriger, als ich es vorher angenommen hatte. (Es erschien mir zwar gut, aber ich wußte ja auch schon, wie man programmiert.)
Mir kam zu Hilfe, dass es leicht war, mich zu kontaktieren und ich viele Rückmeldungen bekam, wo die Leser hängenblieben und Fragen ungeklärt blieben. Wann immer mehrere Leser an derselben Stelle Probleme hatten, habe ich diese neu geschrieben. Es war viel Arbeit, aber langsam wurde es besser.
Nach ein paar Jahren war das Tutorial richtig gut. :-) Sogar so gut, dass ich es für fertig erklärte, und mich selber anderen Themen widmen wollte. Genau zu diesem Zeitpunkt erhielt ich die Möglichkeit, das Tutorial in ein Buch umzuschreiben. Da es ja praktisch fertig war, dachte ich, es wäre kein Problem. Ich müßte nur ein paar Stellen verschönern, mehr Übungen einbauen, vielleicht auch mehr Beispiele, ein paar zusätzliche Kapitel, es von 50 weiteren Testlesern ausprobieren lassen...
Ich brauchte ein weiteres Jahr, aber nun denke ich, es ist wirklich, wirklich gut geworden durch die vielen Hundert tapferen Menschen, die mir beim Schreiben geholfen haben.
Was ihr hier findes, ist das Original-Tutorial, quasi unverändert seit 2004. Für die neuste und beste Version rate ich euch zum Buch.
Anregungen für Dozenten
Es gibt ein paar grundlegende Prinzipien, die ich versucht habe umzusetzen. Ich denke, dass sie den Lernprozess erleichtern; Programmieren lernen ist an und für sich schon schwer genug. Wenn man Programmieren unterrichtet oder den Lernprozess eines Lernenden in den Programmier-Himmel begleitet, so helfen diese Ansätze sicher.
Erstens trenne ich verschiedene Konzepte soweit dies möglich ist, damit der Lernende zu jedem Zeitpunkt nur ein Konzept erarbeiten muss. Dies ist am Anfang schwer, mit Übung aber immer leichter. Manche Sachverhalte müssen vor anderen vermittelt werden, doch ich war erstaunt, wie wenig Hierarchie sich aus den Abhängigkeiten ergab. Schließlich musste ich ich mir eine Reihenfolge der Themen überlegen und ich habe sie so angeordnet, das jedes neue Thema sich aus dem voranstehenden ergab.
Ein weiterer Ansatz war, dass ich immer nur eine Möglichkeit, etwas zu tun, vorgestellt habe. Das ist ein ganz klarer Vorteil in einem Tutorial für reine Programmier-Anfänger. Einerseits weil das Erlernen eines Weges immer leichter ist, als das Erlernen von zwei Wegen, andererseits -und das ist wohl der größere Vorteil- weil ein Programmierer um so kreativer und überlegter vorgehen muss, je weniger Möglichkeiten er kennt. Da eine Hauptaufgabe der Programmierung im Lösen von Problemen besteht, ist es wichtig, dies immer und auf jedem Level zu fördern.
Ich habe versucht, Programmier-Konzepte quasi huckepack mit den Konzepten zu vermitteln, die jeder Mensch intuitiv hat; also die Ideen dahinter so darzustellen, dass die Intuition die Arbeit übernimmt und nicht das Tutorial. Die objektorientierte Programmierung verfolgt diesen Ansatz ohnehin schon. Somit kann ich recht schnell Begriffe wie 'Objekte' und 'Arten von Objekten' verwenden, meist lasse ich sie unterschwellig einfließen. Ich mache bewußt keine Aussagen wie "alles in Ruby ist ein Objekt" oder "Zahlen und Zeichenketten sind Arten von Objekten", weil diese Aussagen einem Programmier-Anfänger nicht sagen. Stattdessen spreche ich über Zeichenketten (nicht "Zeichenketten-Objekte") und irgendwann schwenke ich um zu "Objekten", was einfach nur bedeutet wie "irgendwelche Dinge in unseren Programmen". Die Tatsache, dass all diese Dinge in Ruby Objekte sind, unterstützt sehr das unauffällige Einbringen von Fachbegriffen.
Obwohl ich eigentlich die typische objektorientierte Sprache vermeiden wollte, wollte ich doch sicherstellen, dass der Leser, wenn er einen Begriff lernt, den richtigen lernt. (Ich will nicht, dass er es zweimal lernen muss.) So spreche ich von Zeichenketten, nicht von Text. Auch Methoden müssen irgendwie benannt wernden, also nenne ich sie "Methoden".
In Bezug auf die Übungen, denke ich, dass ich schon ein paar gute integriert habe, aber man kann nie zu viele haben. Ehrlich gesagt, glaube ich dass ich die Hälfte der zeit damit verbracht habe, lustige, interessante Übungen zu entwickeln. Langweilige Aufgaben töten die Freude am Programmieren, während die perfekte Übung im neuen Programmierer ein Jucken erzeugt, an dem er einfach kratzen muss. Kurz gefaßt kann man gar nicht zu viel Zeit in die Suche nach den richtigen Übungen stecken.
Über das Original
Die Seiten des Original-Tutorials (des englischen Originals!) werden mit natürlich mit einem großen Ruby-Programm generiert. :-) Alle Beispiele werden automatisch gestartet und die dargestellt Ausgabe ist die die Ausgabe, die sie erzeugten. Ich denke, das ist die beste, leichteste und sicherlich die coolste Art sicherzustellen, dass der dargestellte Code genau so funktioniert, wie ich es beschrieben habe. Es besteht keine Gefahr, dass ich etwas falsch einkopiert habe oder vergessan habe, etwas zu testen; es ist alles getestet!
Danksagung
Schließlich möchte ich noch allen in der Ruby-Talk Mailing Liste danken für ihre Anregungen und Ermutigungen danken, ebenso allen Test-Lesen für ihre Hilfe, dieses Buch viel besser zu machen als ich es alleine geschafft hätte, meiner geliebten Ehefrau dafür, dass sie mein Haupt-Testleser/Tester/Versuchskaninchen/Muse ist, Matz für diese wundervolle Sprache und den pragmatischen Programmierern, dass sie mir davon erzählt haben - und dass sie mein Buch herausgegeben haben!
Wenn du Fehler oder Rechtschreibfehler entdeckst oder irgendwelche Kommentare oder Vorschläge hast oder etwa gute Übungen, die ich integrieren könnte, dann lass es mich wissen.