FAQ zu den Programmierkursen (FAQ zu den Programmierkursen), Lektion, Seite 722564
https://www.purl.org/stefan_ram/pub/faq_programmieren (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram

FAQ  zu den Programmierkursen

Inhaltsverzeichnis

– Sind die Skripten von anderen Rechnern aus erreichbar?

– Bleiben die Skripten im Web erhalten?

– Werden die Webseiten zum Kurs weiterhin erreichbar bleiben?

– Kann ich das Skriptum zum Kurs als eine einzige Datei kopieren oder durchsuchen?

– Ich habe einen Teil eines Termins oder einen Termin versäumt, was soll ich tun?

– Wann erhalte ich meine Teilnahmebescheinigung?

– Gibt es irgendwo Lösungen der Übungsaufgaben?

– Ist der Kurs nicht etwas zu trocken ?

– Ich will die im Kurs behandelte Programmiersprache erlernen.

– Warum sehe ich nur Details, aber nicht das große Bild ?

– Ich will keine einzelnen Fachbegriffe und Sprachelemente/Details lernen, sondern gleich große und praktisch nützliche Programme lesen/schreiben.

– Warum werden im Kurs keine großen Programm behandelt?

– Ich bin allgemein unzufrieden mit den Kurs, ohne genau sagen zu können warum.

– Was kann die Programmiersprache für mich tun?

– Was kann diese Programmiersprache alles?

– Warum soll ich überhaupt diese Programmiersprache erlernen?

– Warum sollte ich diese Programmiersprache überhaupt erlernen?

– Und wofür braucht man das?

– Warum ist der Kurs so praxisfremd?

– Wann passen Fragen in den Kurs?

– Warum werden in den Minuten vor Kursbeginn oder nach Kursende keine Fragen beantwortet?

– Darf ich mitgebrachte Geräte (Klapprechner, Tablettrechner, Handrechner u.s.w.) benutzen?

– Darf ich bestimmte Software verwenden?

– Was steht in der Teilnahmebescheinigung?

– Können schon Kinder am Programmierkurs teilnehmen?

– Ist die Teilnahme mit beschränkten Deutschkenntnissen möglich?

– Warum ist der Kurs so langsam?

– Warum ist der Kurs so schnell und schwierig?

– Wie kann ich mir die vielen Details merken?

– Ich kann dem Kurs nicht mehr folgen, was soll ich tun?

– Ich kann dem Kurs nicht mehr folgen, aber ist dies nicht ein Kurs für Teilnehmer ohne Vorkenntnisse?

– Warum wird das Einlesen von Eingaben von der Konsole im Kurs nicht oder erst spät behandelt?

– Warum verwenden die Programme die Textkonsole an Stelle einer GUI ?

– Ist der Kurs nicht etwas zu mathematisch?

Sind die Skripten von anderen Rechnern aus erreichbar?

Die Skripten sind in der Regel von allen Rechnern mit internet -Zugang aus erreichbar. In seltenen Fällen kann es zu einem 403-Fehler kommen, dann hilft es eventuell, über Google auf die Seite zu gehen. In seltenen Fällen gibt es vorübergehende  Störungen.

Bleiben die Skripten im Web erhalten?

Voraussichtlich: ja (auf absehbare Zeit). Jedoch werden die Skripten ständig überarbeitet. Dadurch kann es passieren, daß sich einzelne Inhalte später an einem anderen Ort befinden oder entfernt wurden. Die Lektionsnummern (wie „Lektion 2.4“) können sich häufig ändern, während die Kennzahlen einer Lektion (wie „722248“) stabiler sind.

Wenn man den Stand eines Skripts zu einem bestimmten Zeitpunkt  aufbewahren will, dann sollte man es daher zu diesem Zeitpunkt kopieren.

Werden die Webseiten zum Kurs weiterhin erreichbar bleiben?

Dies ist so geplant.

Allerdings könnte der Kurs im Laufe der Zeit durch Überarbeitungen verändert werden.

Kann ich das Skriptum zum Kurs als eine einzige Datei kopieren oder durchsuchen?

Derzeit ist dies leider nicht möglich, außer indem Sie selber alle Lektionen in eine Datei zusammenkopieren.

Ich habe einen Teil eines Termins oder einen Termin versäumt, was soll ich tun?

Auf der folgenden Seite finden sich einige Hinweise für Teilnehmer, die bei einem Termin gefehlt haben oder voraussichtlich fehlen werden.

>722334 Versäumte Termine

Wann erhalte ich meine Teilnahmebescheinigung?

Als Dozent habe ich mit diesem Teil des Kursablaufs nicht direkt zu tun und kenne die Antwort auf diese Frage daher im allgemeinen nicht. Diese Frage kann Ihnen daher besser der Veranstalter (die Volkshochschule) direkt beantworten.

„Gibt es irgendwo Lösungen der Übungsaufgaben?“

Zu den Übungsaufgaben gibt es keine schriftlichen Lösungen.

In den Kursen wird der Dozent die Lösungen der Übungsaufgaben mündlich mitteilen und manchmal auch noch etwas über die Programmiersprache erklären, das man an Hand einer Lösung einer Übungsaufgabe erkennen kann. Daher sind Lösungen für alle Personen, die einen Kurs persönlich besuchen, zugänglich.

Der Sinn der Übungsaufgaben besteht hauptsächlich darin, eine eigene Beschäftigung mit dem Thema anzuregen. Eine fertige Lösung würde nicht weiter dazu beitragen, daß es zu solch einer Beschäftigung kommt.

Die Fragen und Aufgaben sollen also einen Lern- und Diskussionprozeß im Unterrichtsraum anregen, in dessen Verlauf dann auch Beispiellösungen gezeigt und kommentiert werden. Dabei ist das Ergebnis manchmal auch durchaus offen und kann in jeder einzelnen Lehrveranstaltung bei derselben Frage auch durchaus anders sein, weil es auch davon abhängt, wie die Hörer sich an der Lösung beteiligen. Dieser Prozeß läßt sich nicht einfach durch einen als Text vorgegebenen Antworten ersetzen.

Weil eine oder mehrere Beispiellösungen zu den Übungsaufgaben für Kursbesucher die im Unterrichtsraum anwesend sind ohnehin zugänglich sind, hatte es bisher noch keine Dringlichkeit, die Lösungen auch schriftlich festzuhalten. Es gibt derzeit auch noch dringendere Aufgaben beim Erstellen des Skriptes. Deswegen gibt es derzeit keine schriftlichen Lösungen zu den Übungsaufgaben.

Die Grundaufgaben („Übungsaufgaben“ ohne Stern „*“) sind auch oft so einfach, daß man die richtige Lösung praktisch immer finden kann, wenn man den davorstehenden aufmerksam Text gelesen hat. Bei Schwierigkeiten sollte man daher gegebenenfalls den darüberstehenden Text und gegebenenfalls auch andere vorherige Lektionen erneut lesen. Außerdem finden sich in den meisten Lektionen Beispielprogramme, die schon die richtige Vorgehensweise zeigen (Beispiele kann man ja auch als Übungsaufgaben mit Lösungen ansehen). Die Lösungen von Übungsaufgaben in Grundkursen ähneln diesen Beispielen oft. Oft wird auch danach gefragt, was ein bestimmtes Programm ausgibt, und das kann man bei Bedarf selber ermitteln.

Zusatzaufgaben oder mit einem Stern „*“ gekennzeichnete Grundaufgaben sind oft etwas schwieriger, aber sie sind auch zum Tüfteln gedacht, und ihre Lösung ist zum Verständnis der Grundlagen und der folgenden Lektionen in der Regel nicht wichtig.

Es ist ganz normal, daß nicht jeder Leser immer alle Aufgaben bewältigen kann. Daher ist es auch völlig in Ordnung, wenn nach dem Ende der Durcharbeitung des Kurses noch unbearbeitete oder ungelöste Aufgaben zurückbleiben.

Außerdem gibt es zu Programmieraufgabe in der Regel viele verschiedene  richtige Lösungen, die Veröffentlichung einer einzelnen  davon könnte den falschen  Eindruck erwecken, daß dies die einzig richtige  Lösung wäre.

An Hand der Kriterien der Aufgabenstellung kann man meist selber kontrollieren, ob eine Lösungsidee richtig ist.

Schließlich soll das Nachschlagen einer Lösung auch nicht zu  einfach sein, da die Aufgaben die selbständige Beschäftigung mit dem Thema fördern sollen. Die Verfügbarkeit von Lösungen könnte dazu führen, zu früh aufzugeben und nach der Lösung zu sehen.

Es ist auch möglich, im Usenet  oder in Web-Foren zu der Programmiersprache nach der Lösung zu einer Aufgabe zu fragen.

Falls jemand gerne Aufgaben mit  Lösungen bearbeiten möchte, so gibt es dafür auch bereits Bücher, wie beispielsweise

„Ist der Kurs nicht etwas zu trocken ?“

Der Kurs kann als trocken erscheinen, weil er sich zum einen sehr auf die eigentliche Programmiersprache konzentriert, um die oft nur kurze Dauer vieler Kurse gut auszunutzen. Andererseits können unterhaltsame Anwendungen oft nicht programmiert werden, weil der Kurs noch nicht weit genug gekommen ist und die Zeit in vielen Kursen dafür nicht reicht.

Ein weniger trockener Kurs wäre möglich, wenn es deutlich mehr Zeit für längere Kurs geben würde. Während der Dozent durchaus zu längeren Kursen bereit wäre, scheitern diese leider oft an verschiedenen Ursachen.

„Ich will die im Kurs behandelte Programmiersprache erlernen.“ (2019)

Dann sind Sie hier richtig!

(Wegen des eingeschränkten Zeitrahmens lernen Sie im Grundkurs aber nur die Anfangsgründe der Sprache kennen. Danach müssen Sie entweder in einen Aufbaukurs gehen oder auf andere Weise noch weiterlernen, wenn Sie Java vollständig erlernen wollen.)

„Warum sehe ich nur Details, aber nicht das große Bild?“

Es dauert eine Weile, bis man lernt die einzelnen Details zu einem großen Bild zusammenzufügen. Die Dauer des Kurses ist zu kurz, um ganz dahin zu kommen. Im Kurs lernt man einige Details und man lernt auch, wie man einige Details zu kleineren Programmen zusammenfügt. Um größere Programm schreiben und wirklich das große Bild sehen zu können, muß man sich aber länger mit dem Thema beschäftigen.

„Ich will keine einzelnen Fachbegriffe und Sprachelemente/Details lernen, sondern gleich große und praktisch nützliche Programme lesen/schreiben.“ (2019)

Dieser Kurs beginnt bei den grundlegenden einzelnen Fachbegriffen und Sprachelementen und erklärt diese zunächst isoliert an Hand von kleinen Programmbeispielen. Anschließend zeigt er für jedes Sprachelement, wie es mit den anderen bereits behandelten Sprachelementen zusammenwirken kann. So lernt man im Kurs kleine Programme kennen, die eher die Sprachelemente illustrieren als einen praktischen Nutzen haben. Niemand hindert Sie daran, große und praktisch nützliche Programme zu schreiben außer vielleicht ihr eigener Mangel an Kenntnissen der Grundlagen und der Vorgehensweise beim Programmieren. Und genau das lernen Sie hier. Sie lernen es allerdings auf eine effiziente Weise, bei der bei den Grundlagen angefangen und dann Schritt für Schritt weitergegangen wird. Dies ist der schnellste Weg, um einmal dahinzukommen, größere Programm schreiben zu können.

„Warum werden im Kurs keine großen Programm behandelt?“

Fools ignore complexity. Pragmatists suffer it. Some can avoid it. Geniuses remove it.” — Alan Perlis

Die Anfertigung oder Vorstellung eines großen Programms würde wegen der Größe dieses Programms mehr Zeit kosten als der Kurs umfaßt. Im Kurs werden allerdings Techniken und Empfehlungen vorgestellt, die bei der Anfertigung oder Pflege großer Programm von Nutzen sind.

Im Grunde werden in den Kurses von Anfang an große Programme geschrieben. Alle Programme sind nämlich groß, wenn man auch noch die in dem Programm verwendeten Bibliotheksteile zum Programm zählt. Die Bibliotheksteile verstecken ihre Größe aber so elegant, daß man sie kaum bewußt wahrnimmt. Die dafür verwendeten Techniken der Abstraktion kann man auch für eigene große Programme einsetzen. Wenn man sie richtig einsetzt, dann erscheint selbst ein großes Programm als relativ klein und übersichtlich. Diese Techniken der Abstraktion werden im Kurs gelehrt.

„Ich bin allgemein unzufrieden mit den Kurs, ohne genau sagen zu können warum.“ (2019)

Das ist bedauerlich, aber dieser Kurs behandelt genau das, was im Programmheft angekündigt wurde; er erfuellt die im Programmheft gegebene und Ihnen vorher bekannte Ankündigung.

„Was kann die Programmiersprache für mich tun?“ (2019)

Eine Programmiersprache ist eher ein Werkzeug, mit dem Sie Programme erstellen können. Sie sagt Ihnen aber nicht, was Sie damit programmieren sollen. Sie benötigen entweder eigene Ideen, die sie mit ihr umsetzen wollen, oder einen Auftraggeber, der ihnen sagt, was Sie für ihn mit der Programmiersprache programmieren sollen. Im zweiten Fall (bei der Auftragsprogrammierung) wäre es sicher hilfreich, wenn Ihnen die Beschäftigung mit dem Programmieren selber gefällt, egal ob Ihnen das vom Auftraggeber gewünschte Ergebnis als nützlich erscheint. Sie können hier im Kurs die Denk- und Vorgehensweise beim Programmieren kennenlernen und dadurch einschätzen, ob Ihnen das Programmieren gefällt und ob Sie sich weiter damit beschäftigen wollen.

„Was kann diese Programmiersprache alles?“

Eine Programmiersprache erlaubt es, einem Computer im voraus zu sagen, was er später tun soll. Damit kann man alles programmieren, was der Computer als Gerät kann. Wenn ein Computer beispielsweise keinen Lautsprecher hat, kann man keine Klänge ausgeben.

In diesem Rahmen kann die Programmiersprache alles tun, was Sie  ihr sagen! Die Grenzen der Programmiersprache werden also hauptsächlich von den Fähigkeiten des Programmierers bestimmt. Die Programmiersprache ist nur ein Werkzeug, sie kann also von sich aus gar nichts. Ein Programmierer kann sie verwenden, um seine Arbeitsweisen zu automatisieren oder seine Ideen umzusetzen.

Einiges von dem, was ein Programmierer mit einer Programmiersprache machen kann, wird im Laufe des Kurses vorgestellt werden. Es ist schwierig, dies alles kurz zusammenzufassen.

Da Programmiersprachen so Vieles können, ist es einfacher, zu sagen, was eine bestimmte Programmiersprache nicht  kann. Bei einzelnen Programmiersprache gibt es folgende Einschränkungen:

Da es so viele verschiedene Programme gibt, die man programmieren kann, kann man schlecht einen kurzen Überblick über all diese Programme geben. Der Dozent wird an dieser aber vielleicht ein oder zwei Beispielprogramme vorstellen.

„Warum soll ich überhaupt diese Programmiersprache erlernen?“ (2019)

Sie wissen anscheinend noch gar nicht, ob Sie überhaupt die im Kurs behandelte Programmiersprache erlernen wollen und benötigen erst einmal eine Beratung zur Wahl einer Programmiersprache. Solch eine Beratung wird in diesem Kurs nicht geboten. Dieser Kurs setzt voraus, daß Sie bereits wissen, daß Sie diese Programmiersprache lernen wollen und damit auch wissen, warum Sie gerade diese spezielle Programmiersprache erlernen wollen. Eine weitere Motivation soll bei diesem Kurs im Laufe des Kurses durch Erfolgserlebnisse beim Lernen und Üben entstehen. Es soll aber niemand davon überzeugt werden, daß es für ihn das Beste ist, gerade jetzt die im Kurs behandelte Programmiersprache zu erlernen, weil das im Einzelfall gar nicht zutreffen muß.

„Warum sollte ich diese Programmiersprache überhaupt erlernen?“

Die Kurse zu den Programmiersprachen richten sich an Teilnehmer, die bereits wissen, daß sie diese bestimmte Programmiersprache erlernen wollen! Der Dozent will gar nicht behaupten, daß jeder  diese Programmiersprache erlernen sollte! Ob ein Kursteilnehmer, eine Programmiersprache erlernen muß oder will, muß er selber wissen! Gründe, die dafür sprechen, könnten sein:

Andererseits kostet das Erlernen einer Programmiersprache sehr viel Zeit, die von Anfängern häufig unterschätzt wird. Mit dieser Zeit könnte man vieles anderes machen: Beispielsweise etwas anderes lernen, arbeiten oder das Leben auf irgendeine Weise genießen. Der Dozent weiß nicht, ob das Erlernen einer Programmiersprache für eine bestimmte Person wirklich die beste Art der Nutzung ihrer Zeit ist, und will niemanden dazu bekehren, der es nicht schon von sich aus will.

Die Sprachen C, C++  und Java  (insbesondere aber C++ ) richten sich aber eher an Programmierer, die sehr viel Zeit  zum Lernen investieren wollen. Wenn man diese Zeit nicht hat, könnte es Zeitverschwendung  sein, überhaupt erst mit dem Lernen anzufangen (falls man nicht durch Ausbildung oder Beruf dazu gezwungen wird).

Um mit weniger Lernaufwand schnell Erfolgserlebnisse zu haben, sind einfache Produktivitätsprachen, wie Python , besser geeignet als die anspruchsvollen Profi-Sprachen C, C++  und Java  (besonders C  und C++  sind schwierig). (Auch VBA  oder JavaScript  sind noch relativ einfach, aber sie sind besonders zum Programmieren von Microsoft Office  beziehungsweise Webseiten/Web-Apps gedacht.)

„Und wofür braucht man das?“

Dies ist vielleicht die am häufigsten gestellte Frage in meinen Programmierkursen. Ich habe im folgenden verschiedene mögliche Antworten aufgelistet, die sich teilweise auch etwas überlappen könnten.

Manchmal hilft es, zu verstehen, wofür etwas ursprünglich gedacht war, um zu begreifen, was es überhaupt macht. Schließlich will niemand Zeit damit verlieren, etwas zu erlernen, das er vielleicht niemals anwenden wird. Daher folgen hier Versuche zur Beantwortung der Frage „Und wofür braucht man das?“.

Anwendungen werden oft erfunden / improvisiert

Die Teile einer Programmiersprache können wie Bausteine oder Werkzeuge verwendet werden, dabei gibt es aber keine Vorschriften für deren Anwendung: Es ist alles erlaubt, was zum gewünschten Ergebnis führt.

Programmierer „erfinden“ oder „improvisieren“ oft Programme, indem sie die Teile einer Programmiersprache auf eine mehr oder weniger neuartige Weise miteinander kombinieren.

Daher ist eine geistige Einstellung zum Lernen oft hilfreich, bei der man zunächst erst einmal versucht, die Eigenschaften der Sprachelemente kennenzulernen, ohne deren Anwendungsbereich auf bestimmte Fälle festzulegen.

Der Kurs ist so aufgebaut, daß dies erst später behandelt wird

Der Kurs ist so aufgebaut, daß man Sprachelemente erlernt, bevor  man sie braucht.

Daher sieht man immer erst später, wofür man etwas braucht. Manchmal reicht die Zeit im Kurs auch gar nicht aus, um so weit zu kommen, und man sieht es erst, wenn man sich nach dem Ende des Kurses weiter mit dem Thema beschäftigt.

Wenn der Dozent nun auf Fragen einzelner Kursteilnehmer, zeigen würde, wofür man etwas braucht, so würden dabei manchmal Beispiele gezeigt werden müssen, die zu diesem Zeitpunkt noch gar nicht verständlich sind - was verwirrend sein könnte und das Lernen erschweren könnte.

Man kann jedoch sicher sein, daß im Kurs größtenteils fundamentale und wichtige Aspekte der Sprache behandelt werden, die man immer wieder brauchen wird, wenn man sich weiter mit dem Kurs beschäftigt.

Es handelt sich fast immer um Techniken aus der Praxis, die jedoch isoliert vorgestellt werden

Ich lese immer wieder größere Programme aus der Praxis oder Berichte über Bewerbungstests für Programmierer und verfüge selber über Erfahrungen in der Programmierung von Programmen sowohl für meinen eigenen Bedarf als auch im Auftrag Dritter. Daher weiß ich, was in der Praxis benötigt wird.

Im Kurs können wir jedoch größere Programme noch nicht  behandeln, weil die meisten Kursteilnehmer damit überfordert wären. Deswegen isoliere ich einzelne Techniken aus größeren Programmen und stelle diese zunächst an kleinen Beispielen isoliert vor, damit sie für möglichst viele Teilnehmer verständlich sind.

Daher können die Kursteilnehmer sicher sein, daß alles was sie im Kurs lernen auch in der Praxis benötigt wird. Manchmal sieht man auch schon im Kurs, daß etwas, das am Anfang des Kurses vorgestellt wurde, gegen Ende des Kursus benötigt wird.

Es ist mir aber nicht immer möglich, die Frage „Wofür braucht man das?“ gut zu beantworten, da sich dies manchmal erst an Hand größerer Programm erklären läßt, die aber an der Stelle des Kurses, an der diese Frage gestellt wird noch nicht behandelt werden können.

Wenn Sie möglichst schnell in die Lage versetzt werden wollen, Ideen durch das Schreiben größerer Programme zu verwirklich, ist der beste Weg dahin, erst einmal kleine Programme zu verstehen. Denn, wenn jemand nicht in der Lage ist ein Programm mit drei Zeilen zu verstehen, warum sollte er dann ein Programm mit drei Millionen Zeilen beherrschen können?

Diese Frage ist vage

Wer ist „man“? Es gibt so viele verschiedene Anwender einer Programmiersprache, etwa Anwender aus den Gebieten der Programmierung von Spielen, betrieblicher Informationssystem oder wissenschaftlicher Software, daß man diese wohl kaum als „man“ unter einen Hut bringen kann. Zudem gibt es viele Menschen, die gar nicht programmieren, aber sehr gut leben – was illustriert, daß „man“ diese Programmiersprache im allgemeinen überhaupt nicht braucht.

Solch eine vage Frage läßt sich oft nur schwer beantworten. Manchmal ist sie Ausdruck einer diffusen Unzufriedenheit mit dem Kurs und soll die Ansicht zum Ausdruck bringen, daß man das Vorgestellte nicht benötigt („Ihr Kurs ist praxisfremd!“). In anderen Fällen kann sie aber auch Ausdruck von wirklichem Interesse an der Sache sein.

Sprache für Hobbyisten und für Profis

Einige Sprachen, wie beispielsweise C++, aber teilweise auch Java  und C, richten sich an Programmierer, die viel Zeit  zum Erlernen einer Sprache investieren können und wollen. Das Erlernen der Grundlagen dieser Sprachen dieser Sprachen lohnt sich nur, wenn man weiß, daß man auch weiterlernen wird, denn bei diesen Sprachen kann man oft erst nach einer längeren Zeit produktiv werden.

Um nur einmal einen Einblick in die Welt des Programmierens zu erhalten, sind spezielle, vereinfachte Produktivitätssprachen, wie beispielsweise VBA, besser geeignet, weil man mit diesen viel schneller produktiv werden kann.

– Solider Aufbau des Kurses

„Nur die Frage: ‚Wozu soll das gut sein?‘ mußt Du etwas aufschieben, bis Du siehst, wozu das gut ist.“

Norbert Dragon 

Unter einem „soliden Aufbau“ eines Kurses verstehen wir hier, daß ein Begriff oder ein Thema immer erst einmal erklärt wird, bevor  es zum ersten Mal verwendet wird. Es werden also erst einmal Grundlagen gelehrt und dann Themen, die darauf aufbauen.

Beispielsweise werden im Grundkurs zuerst Numeralia, wie »2« und »3«, vorgestellt.

Später werden dann Operatoren, wie »+«, vorgestellt. Um solche Operatoren verwenden zu können, wie etwa im Ausdruck »2 + 3«, werden Numeralia aber schon benötigt.

Zu dem Zeitpunkt, zu dem man Numeralia, wie »2« und »3«, kennenlernt, weiß  man aber noch nicht, daß diese später zur Illustration von Operatoren benötigt werden werden.

Daher ist die Motivation bei einem soliden Aufbau ein Problem, denn immer, wenn man etwas lernt, kommen die Anwendungen dazu erst später, also weiß man, immer wenn man etwas lernt, zu diesem Zeitpunkt des Lernens, noch nicht, wofür man es braucht!

Da die Grundlagen aber gerade das sind, was in der Praxis am häufigsten benötigt wird, kann man davon ausgehen, daß ein Thema um so wichtiger ist, um so näher es dem Anfang eines Kurses ist.

Ein Alternative zum soliden Aufbau des Kurses wäre es, gleich mit einem großen Programm zu beginnen, das erkennbar einen praktischen Nutzen hat. Dies hat sich aber also eher schädlich erwiesen, weil es einen Anfänger vollkommen überfordert, denn um solch ein Programm richtig zu verstehen, muß man Tausende kleiner Details lernen. Beim soliden Aufbau eines Kurses werden diese Tausende von Details Schritt für Schritt in geordneter Weise vorgestellt, so daß man jedes Detail erst einmal in Ruhe einzeln verstehen kann, bevor es dann in einem größeren Programm eingesetzt wird.

– Solider Aufbau des Kurses (Teil 1)

Es ist nie  sicher, daß ein bestimmter Kursteilnehmer eine bestimmte Information aus dem Kurs später wirklich benötigen wird. Jedoch werden die Themen so gewählt, daß meist wichtige und oft benötigte  Themen im Kurs behandelt werden. Die Kurse sind schon so ausgearbeitet worden, daß sie größtenteils nur Sprachelemente behandeln, die wahrscheinlich  (sicher kann man sich da nie sein!) entweder später im weiteren Verlauf des Kurses oder außerhalb des Kurses einmal von Nutzen sein werden, wenn  jemand weiterhin mit dem Kursthema zu tun hat. Wofür man es genau brauchen wird, ist nicht immer vorhersagbar.

– Solider Aufbau des Kurses (Teil 2)

Die Kurse sind so aufgebaut, daß bei jedem Schritt immer nur eine neues Thema  gelernt wird und die gelernten Themen so aufeinander aufbauen, daß ein Thema erst dann  behandelt wird, wenn alle Voraussetzungen zum Verständnis dieses Themas schon vorher  erklärt worden sind. Dies ist übersichtlich und erleichtert das Lernen. Jedoch wird es bei dieser Vorgehensweise beim ersten Vorstellen eines Themas nicht immer erkennbar, wofür man es braucht, weil das bei dieser Vorgehensweise manchmal erst später  (im Kurs oder sogar erst danach) kommt. Daher setzt diese Vorgehensweise voraus, daß ein Kursteilnehmer die Motivation, etwas lernen zu wollen, bereits mitbringt und dem Dozenten vertraut, das richtige Material ausgewählt zu haben.

Manchmal ist es schwer zu erkennen, wofür etwas benötigt wird, weil es eine Vorbereitung für etwas ist, das erst später behandelt wird, oder weil es vermutlich erst nach Ende des Kurs benötigt wird, wenn jemand sich dann weiter mit dem Kursthema beschäftigen will. Im weiteren Verlauf eines Programmierkurses wird der Nutzen eines bestimmten Sprachelements dann oft besser verständlich als bei dessen erster Vorstellung. Manchmal wird der Nutzen aber auch erst dann deutlich, wenn man sich nach dem Ende des Kurses noch weiter mit dem Thema beschäftigt. Falls man dies nicht tut, dann wird der Nutzen einiger Themen tatsächlich nicht immer deutlich. Der Kurs hat eben nicht nur die Aufgabe, Sprachmittel vorzustellen, mit denen man sofort einen beeindruckenden Effekt erreichen kann, sondern auch solche Themen zu behandeln, welche eine spätere weitere Beschäftigung mit dem Thema vorbereiten sollen.

Ausnahmsweise werden selten benötigte Dinge manchmal für Beispiele herangezogen, wenn es keine anderen passenden Beispiele gibt: Am Anfang des Kurses sind die Programmierkenntnisse noch gering und daher ist oft wenig Auswahl unter den möglichen Beispielen möglich. Es gelingt daher nicht immer, ein Beispiel zu finden, das einerseits einfach und verständlich ist und andererseits auch von offensichtlichem Nutzwert. In Übungsaufgaben oder Beispiele werden dann manchmal auch solche Sprachelemente verwendet, die sonst nur selten  benötigt werden, wenn sie helfen, ein bestimmtes allgemeineres Thema zu verstehen, das dann für die Anwendung oder das weitere Erlernen dieser Programmiersprache tatsächlich wichtig ist.

Es hätte zwei Nachteile, wenn bei jeder neuen Information gezeigt werden würde, wofür  man sie kennen muß: Zum einen würde dies Zeit kosten, die aber zum Verständnis  der Information nicht unbedingt nötig ist. Diese Zeit würde dann an anderen Stellen fehlen. Zum anderen würde dies oft Vorgriffe auf Informationen nötig machen, die erst später richtig verstanden werden können, und manchmal die Behandlung eines Themas unnötig verkomplizieren. Daher wird darauf verzichtet. Der Leser muß die Motivation, die Sprache lernen zu wollen also im wesentlichen schon selber mitbringen, und dem Autor des Kurses dahingehend vertrauen, daß der Autor ihm nur solche Informationen gibt, die bei weiterer Beschäftigung mit einer Programmiersprache oder bei der späteren Verwendung einer Programmiersprache voraussichtlich auch oft benötigt werden werden.

– Solider Aufbau des Kurses (Teil 3)

In diesem Programmierkurs wird eine Information, die in einer Lektion gegeben wird, manchmal erst in einer späteren Lektion  oder bei der Anwendung der Programmiersprache  nach Ende des Kurses benötigt.

Abhängigkeit der Informationen
Grundkurs
.----------------------------------------.
| |
| Lektion 1 |
| gelernt |
| o |
| | |
| | |
|--------------|-------------------------|
| Lektion 2 | |
| | gelernt |
| | o |
| | | |
| | | |
| | | |
|--------------|--------|----------------|
| Lektion 3 | | |
| | | gelernt |
| v | o |
| benoetigt | | |
| | | |
| | | |
'-----------------------|--------|-------'
Ende des Kurses | |
| |
| |
| |
Aufbaukurs | |
.-----------------------|--------|-------.
| | | |
| Lektion 10 | | |
| | | |
| o | | |
| | | | |
| | | | |
|--------------|--------|--------|-------|
| Lektion 11 | | | |
| | v | |
| | benoetigt | |
| | | |
| | | |
| | | |
|--------------|-----------------|-------|
| Lektion 12 | | |
| | | |
| v | |
| benoetigt | |
| | |
| | |
'--------------------------------|-------'
Ende des Aufbaukurses |
|
|
|
|
|
Anwendung der Programmiersprache |
| ... oder vielleicht nie?
V
benoetigt

Durch diesen Aufbau wird sichergestellt, daß man alle Informationen hat, die vorausgesetzt werden, wenn eine Lektion beginnt.

Andererseits weiß man, wenn man eine Information in einer Lektion erfährt, manchmal zunächst noch nicht, wofür man diese benötigt, da dies manchmal erst in einer späteren  Lektion erkennbar wird.

Oft reicht es, einfach etwas abzuwarten, bis man Anwendungsbeispiele zu einer Information erhält.

Falls es in einigen Fällen bis zum Ende des Kurses noch nicht erkennbar geworden ist, wofür etwas dienlich ist, so könnte dies daran liegen, daß dies erst in einem Aufbaukurs oder bei Anwendung der Programmiersprache erkennbar wird. Dann wäre es aber möglich, in der Fragestunde am Ende des Kurses danach zu fragen.

Es stimmt auch, daß man in einigen Fällen nie erkennen wird, wofür man etwas gelernt hat, wenn nur den Kurs besucht und sich danach nie wieder mit dem Thema beschäftigt. Tatsächlich ist der Kurs eher für Leute gemacht, die sich nach dem Ende des Kurses weiter mit dem Thema beschäftigen wollen, denn sonst wäre das Lernen ziemlich sinnlos. (Es ist in diesem Falle nicht ganz  sinnlos, denn wenn jemand erkennen sollte, daß ihm das Programmieren gar nicht liegt, ist es besser, sofort damit aufzuhören, als sich noch lange damit rumzuquälen!)

(Manchmal kommt es auch vor, daß etwas gerade in den Kurs eingefügt wurde, weil es für etwas anderes benötigt wird, das später  in den Kurs aufgenommen werden soll. In diesem Fall ist das gerade Eingefügte vorübergehend wirklich noch etwas nutzlos, aber zum Glück passiert so etwas nur selten.)

– Widmungen und Eigenschaften

Die Frage „Und wofür braucht man das?“ geht vielleicht von der Annahme aus, daß ein bestimmtes Sprachelement oder eine bestimmte Information über eine Programmiersprache ein fest definiertes Einsatzgebiet  hat.

Das ist aber nicht immer  so. Vielmehr ist das Sprachelement zunächst durch seine Eigenschaften bestimmt, es ist aber nicht  festgelegt, was man dann damit anfängt. Es gibt verschiedene Anwendungsmöglichkeiten, und jederzeit kann eine neue gefunden werden. Man kann ein Sprachelement oder eine bestimmte Information über eine Programmiersprache in dieser Hinsicht mit Leitungswasser vergleichen: Man kann es trinken, man kann es zur Zubereitung verschiedener Speisen verwenden, man kann damit Wäsche waschen oder Duschen, und so weiter. Wenn man eine Vorstellung davon hat, welche Eigenschaften  Wasser hat, dann findet man vielleicht selber noch andere Einsatzmöglichkeiten

Ein Programmierer ist eine Art von Erfinder. Er nutzt die Sprachelemente einer Programmiersprache oder eine bestimmte Information über eine Programmiersprache wie ein Erfinder, der Maschinen baut und dabei einzelne Bausteine kombiniert, um daraus eine Art von Maschine herzustellen, die es bisher noch gar nicht gab. Er zeigt uns Anwendungsmöglichkeiten der Bausteine, an die bisher noch niemand gedacht hat. Als Menschen zum ersten Mal Eisenerz im Boden fanden, war keine Bedienungsanleitung dabei, die erklärt hat, was man alles damit machen kann. Die Menschheit wird von denen vorangebracht, die neue Anwendungsmöglichkeiten  für eine Sache finden, und nicht nur danach gehen, was man bisher  damit gemacht hat oder wofür die Sache ursprünglich gedacht war.

Viele Programmierer haben wahrscheinlich eine gewisse Neugier, welche dazu führt, daß sie technische Systeme in einer entspannten und etwas spielerischen Weise ausprobieren und kennenlernen wollen, um deren Aufbau zu verstehen. Sie würden dabei wahrscheinlich nicht weit kommen, wenn sie an jeder Stelle dieses Weges immer gleich nach Anwendungsfällen suchen würden. Diese Anwendungsmöglichkeiten drängen sich aber dann manchmal plötzlich von alleine auf, wenn man genug gelernt hat, und daher sind es in einigen Fällen gerade solche Geister, die der Welt dann irgendwann einmal großartige Software schenken, mit der man etwas machen kann, das bisher noch niemand zuvor gesehen hat.

Im Programmierkurs werden die Eigenschaften einzelner Sprachelemente vorgestellt. Wie diese dann von einem Teilnehmer später vielleicht eingesetzt werden, hängt von der Aufgabenstellung und dem Erfindungsreichtum des Teilnehmers ab. Verblüffen Sie Ihren Dozenten doch einmal, indem Sie ihm Anwendungsmöglichkeiten des Erlernten zeigen, an die er selber bisher nie gedacht hat!

– Vagheit von „man“

Das in der Frage „Und wofür braucht man das?“ vorkommende Wort „man“ wird im Deutschen für irgendjemanden  verwendet, der nicht näher bestimmt ist.

Ich will aber gar nicht behaupten, daß jeder  Kenntnisse einer Programmiersprache braucht!

Daher kann ich sagen, daß man einzelne Detailkenntnisse über eine Programmiersprache im allgemeinen überhaupt nicht  braucht – außer  man will die Programmiersprache erlernen, und dann  gehört es eben dazu, weil es ein Teil des Erlernens der Programmiersprache ist.

– Prüfungen

Manchmal werden Kurse auch von Teilnehmern besucht, die später einmal in einer Programmiersprache geprüft werden werden, etwa im Rahmen einer Ausbildung, einer Zertifizierung oder einer Einstellung. In solchen Prüfungen werden manchmal Fragen zu den entlegensten Gebieten einer Programmiersprache gestellt. Daher ist jede  noch so entlegen scheinende Information nützlich, falls jemand erwartet, vielleicht einmal in einer Programmiersprache geprüft zu werden.

– Wofür braucht man Programmieren überhaupt?

The primary aim of this book is to help you to express your ideas in code, not to teach you how to get those ideas.” – Bjarne Stroustrup

Man kann nicht  sagen, daß jeder  Mensch Programmieren lernen sollte. Für manche ist es besser, sich auf etwas anderes zu konzentrieren, weil dies mehr zu ihren Talenten paßt. Wenn jemand auf dem Weg ist, ein großartiger Tennisspieler  zu werden, wäre es schade, wenn er vielleicht durch den Zeitaufwand für das Erlernen einer Programmiersprache daran gehindert werden würde.

„Warum ist der Kurs so praxisfremd?“

„Grau, teurer Freund, ist alle Theorie,
Und grün des Lebens goldner Baum.“
– Worte, mit denen Mephistoles  im Faust  einen Schüler verführen will

Praktische Anwendungen sind das Ziel.

Kleine Beispielprogramme sind der Weg  zu diesem Ziel.

Wir befinden uns auf dem Wege, aber sind noch nicht am Ziel.

Übungen sollen nicht zu schwierig sein

Einige mögliche Eigenschaften von Beispielen und Übungen sind:

In der Regel kann ich nicht alle drei Eigenschaften gleichzeitig umsetzen, und dann bevorzuge ich die erste!

– „Praxisbezug“ erschwert das Lernen

Neuere Forschungen haben gezeigt, daß es erfolgreicher ist, formale Systeme (wie Programmiersprachen oder Mathematik) zu unterrichten, wenn dabei kein  künstlicher „Praxisbezug“ durch “real-world examples ” (Beispiele aus dem „wahren Leben“) hergestellt wird! Zitat:

Die besagten Studenten, denen abstrakte mathematische Begriffe vermittelt wurden, erbrachten in den Experimenten bessere Leistungen als diejenigen, welche mit praxisnahen Beispielen, wie Textaufgaben, unterrichtet wurden.

Die zusätzlichen Details der praxisnahen Beispiele erschwerten es den Studenten anscheinend die grundlegenden mathematischen Begriffe zu erkennen und diese auf neue Probleme anzuwenden.

„Mit praxisnahen Beispielen machen wir es wirklich schwieriger für die Lernenden, denn wir lenken sie von der zugrundeliegenden Mathematik ab“ sagte Jennifer Kaminski, eine wissenschaftliche Mitarbeiterin der Ohio-State-University, deren Studie in der Zeitschrift Science  erscheint.

Englischsprachiger Originaltext:

They said students who were taught abstract math concepts fared better in experiments than those taught with real-world examples, such as story problems.

Adding extraneous details makes it hard for students to extract the basic mathematical concepts and apply them to new problems, they said.

"We're really making it difficult for students because we are distracting them from the underlying math," said Jennifer Kaminski, a research scientist at Ohio State University, whose study appears in the journal Science.

Reuters, 25. April 2008, siehe auch: http://www.abc.net.au/science/articles/2008/04/25/2227540.htm, http://blog.cleveland.com/openers/2008/05/math.html, http://researchnews.osu.edu/archive/mathed.htm, http://phys.org/pdf128266927.pdf

– Das Wort „Praxis“ ist vage

„Praxis“ oder „praktisch“ im Zusammenhang dieser Frage ist ein etwas vager Begriff, denn was genau „Praxis“ ist, bestimmt jeder anders! Vielleicht versuchen Sie doch einmal genauer einzugrenzen, was „Praxis“ oder „praktisch“ für Sie persönlich bedeutet, damit Sie dann erklären können, was genau  Sie im Kurs vermissen.

Programmieren bedeutet nichts anderes, als sich genau  auszudrücken, und hier kann es geübt werden.

– In der Praxis kommen sehr spezielle Gebiete vor

Die berufliche  Praxis des Programmierers reicht von Buchhaltung über Web-Server und Bioinformatik bis hin zu 3D-Computer-Spielen. In dieser Praxis werden neben Kenntnissen der Programmierung also fast immer Kenntnisse aus einem weiteren speziellen Gebiet benötigt. Der Kurs ist fern dieser beruflichen Praxis, weil die Behandlung solche spezieller Themen immer nur für jeweils einen Teil der Teilnehmer eines Kurses interessant und verständlich wäre.

Sobald man irgendein Anwendungsbeispiel aus irgendeinem Gebiet bringt, ist es oft nötig, erst einmal die nötigen Kenntnisse aus diesem Gebiet zu vermitteln. Wenn man beispielsweise ein Beispiel aus dem Gebiete der Buchhaltung bringen will, muß man zunächst einige Grundlagen der Buchhaltung erklären, deren Kenntnisse für jenes Beispiel vorausgesetzt werden, da nicht alle Teilnehmer eines Programmierkurses Buchhaltungskenntnisse haben. Dies lenkt dann aber vom eigentlichen Thema der Programmiersprache ab. Es kostet Zeit, die dann für weitere Programmierthemen fehlt. Es könnte für einige Teilnehmer, die sich beispielsweise mehr für Computerspiele interessieren, sogar langweilig und demotivierend sein, Buchhaltung zu behandeln, so wie umgekehrt die Behandlung von Computerspielen Buchhaltungsinteressierte abstoßen könnte.

„Jedes Mal, wenn ich nach einer Quelle suche, um etwas über ein Programm zu lernen, muß ich diejenigen aussortieren, welche mir zeigen wollen, wie man es für etwas gebraucht, das mich nicht interessiert.“ — Übersetzung des Textes von Drew Lawson 2014-05-23 in <llnhhq$1hkl$1@raid.furrfu.com>

Englischsprachiger Originaltext:

Every time I look for a tutorial for learning some package/tool, I have to weed through all the ones that want to show me how to use it for something that doesn't interest me.” — Drew Lawson 2014-05-23 in <llnhhq$1hkl$1@raid.furrfu.com>

Lesenswert zur Berufspraxis eines Programmierers ist der Blog-Eintrag “The Windows Shutdown crapfest ” aus “Moishe's Blog ”. (Zur Suche können Textfragmente wie “shell team disagrees with how ” oder “So Windows has a tree of repositories ” herangezogen werden.) Jener Blog-Eintrag beschreibt, wie mindestens acht Personen mehrere Jahre lang auf Vollzeitstellen  arbeiten, um ein einziges kleines Menü  (das kleine Menü, welches beim Ausschalten des Rechners erscheint, und zwar ohne  die dann vom Menü ausgelösten Funktionen) des Betriebssystems Windows  zu entwickeln.

– In der Praxis werden gute Kenntnisse vorausgesetzt

Für die Erledigung anspruchsvoller Aufgaben in der beruflichen Praxis werden oft schon gute Kenntnisse benötigt  werden, die im Kurs aber erst noch erworben  werden sollen

Die berufliche Praxis ist hart: Programmierer, welche bestimmte Anforderungen nicht erfüllen, werden gar nicht erst eingestellt oder nicht an wichtigen Projekten beteiligt.

Hier ein Bericht über die Programmiererausbildung in einem Bootcamp:

Nine out of 10 applicants are rejected – the academy’s profit comes from a levy on employers who hire its students, so it takes only those considered employable. Anyone who is judged not to be working hard enough is ejected in the first few weeks, which culls about another fifth.

Der Erfolg der Ausbildung wird dadurch gewährleistet, daß 90 Prozent der Bewerber nicht akzeptiert und später faule Bewerber aussortiert werden!

– In der Praxis werden theoretische Kenntnisse vorausgesetzt

Oft werden heute nur noch Entwickler mit einschlägigen Hochschulabschlüssen eingestellt. Dieser Programmierkurs soll aber jedem  offenstehen.

In der Praxis sind meist die Programmierer am erfolgreichsten, die zuvor in einem Hochschulstudium geduldig „praxisferne“ Theorien erlernt haben, gerade sie werden verschiedenen Medienberichten zufolge heute besonders gerne eingestellt und verdienen besonders gut. Vielleicht hatte ja Kurt Lewin (1890 – 1947) recht, als er erklärte „Nichts ist so praktisch wie eine gute Theorie.“

– In der Praxis wird Leistung erwartet

Berufliche Programmierer werden in der Praxis oft unter Druck gesetzt, damit sie bestimmte Anforderungen und Termine einhalten. Der Programmierkurs soll aber ein entspanntes Lernen in angenehmer Atmosphäre ermöglichen.

– In der Praxis scheitern Projekte

Viele Programmierprojekte scheitern  in der Praxis, nachdem schon viel Zeit in sie investiert wurde, oder dauern wesentlich länger als erwartet (ähnlich dem Bau eines Flughafens bei Berlin). Diese Art der Praxisnähe wäre in einem Programmierkurs demotivierend und würde die zeitliche Planung des Kurses erschweren! In Programmen stecken oft viele Mannjahre an Arbeit und sie umfassen oft Millionen von Quelltextzeilen. Solche Projekte würden schlecht in einen Kurs mit 30 Stunden Dauer passen. In all diesen Aspekten ist der Kurs also absichtlich praxisfern !

Please don't be too impatient for "realistic" examples. Our ideal example is the shortest and simplest code that directly illustrates a language facility, a concept, or a technique. Most real-world examples are far messier than ours, yet do not consist of more than a combination of what we demonstrate. Successful commercial programs with hundreds of thousands of lines of code are based on techniques that we illustrate in a dozen 50-line programs. The fastest way to understand real-world code is through a good understanding of the fundamentals

On the other hand, we do not use “cute examples involving cuddly animals” to illustrate our points. We assume that you aim to write real programs to be used by real people, so every example that is not presented as language-technical is taken from a real-world use. Our basic tone is that of professionals addressing (future) professionals.

Bjarne Stroupstrup

I do understand that most people have to design systems somewhat more complex than maximum and minimum. But I urge them to consider the following: unless they can design a three line program well, why would they be able to design a three hundred thousand line program? We have to build our design skills by following through simple exercises, the way a pianist has to work through simple finger exercises before attempting to play a complicated piece.

Alexander A. Stepanov

Wann passen Fragen in den Kurs?

Kommentare, Kritik oder Änderungswünsche am Kurs sind jederzeit willkommen! Sie können dann im Kurs diskutiert werden.

Nachfragen “ zu bereits behandelten  Themen sind ebenfalls jederzeit willkommen (auch, wenn der Kurs dann schon bei einem neuen Thema ist).

Vorfragen “ zu Themen, die noch nicht behandelt  wurden, passen am besten entweder ganz am Anfang des Kurses  oder ganz am Ende des Kurses.

Ganz am Anfang des Kurses  (nach dem Ausblick auf die Teile des Kurses) kann geklärt werden, ob bestimmte Themen im Kurs behandelt werden (falls dies dann noch unklar geblieben ist), und diskutiert werden, ob der geplante Kursablauf verändert werden soll (falls Teilnehmer andere Themen wünschen als die geplanten).

Ganz am Ende  des Kurses gibt es eine „Fragestunde“, in welcher alle noch offenen Fragen so weit wie möglich beantwortet werden sollen oder von Teilnehmern vorgeschlagene Themen behandelt werden können (selbst wenn sie vorgreifen).

Dazwischen  ist der Kurs so aufgebaut, daß immer nur ein neues Sprachelement pro Lernschritt  gelernt wird, und die Übungsaufgaben immer mit den bereits behandelten  Sprachelementen gelöst werden können. Dieser Aufbau des Kurses wäre nicht mehr gewährleistet, wenn mittendrin Wunschthemen behandelt werden würde. Außerdem würden die Beschäftigung mit den eigentlich vorgesehen Themen durch die Behandlung von Wunschthemen verzögert werden. Daher wird Teilnehmern, die möglichst schnell vorankommen wollen, empfohlen, vorläufig (vor der Fragestunde) auf Fragen zu Themen, die im Kurs noch gar nicht behandelt wurde, zu verzichten.

Fragen sollten nicht vor Beginn des Kurses oder nach dem Ende des Kurses gestellt werden, da der Dozent dann mit verschiedenen Aufgaben (Vorbereitung der technischen Einrichtungen im Unterrichtsraum beziehungsweise Ausschalten der technischen Einrichtungen im Unterrichtsraum) beschäftigt ist und sich nicht auf die Beantwortung von Fragen konzentrieren kann. Zudem sollten Antworten auf Fragen für alle Kursteilnehmer zugänglich sein, weswegen es unpassend wäre, sie in einem Einzelgespräch mit nur einem Kursteilnehmer zu geben.

„Warum werden in den Minuten vor Kursbeginn oder nach Kursende keine Fragen beantwortet?“

In den Minuten vor Kursbeginn oder nach Kursende ist der Dozent mit technischen Vor- und Nachbereitungen beschäftigt. Insbesondere vor dem Verlassen des Raumes ist es nötig, sich auf technische Einstellungen zu konzentrieren, da Fehler hierbei Schäden zur Folge haben können. Daher kann der Dozent sich in diesen beiden Situationen nicht auf Fragen konzentrieren und gibt dann oft unabsichtlich falsche oder irreführende Antworten. Deswegen sollten Kursteilnehmer Fragen besser am Anfang des Kurses (nach  Beginn des Kurses) stellen. Für solche Fragen ist bereits Zeit im Kurs eingeplant.

Da der Dozent sich ganz den Kursteilnehmern widmen will, bittet er um Verständnis dafür, daß er mit Personen, die gar  keine Kursteilnehmer sind, im Unterrichtsraum auch keine Gespräche führen kann (weder in den Minuten vor dem Kurs, noch während des Kurses, noch in den Minuten nach Ende eines Kurstermins). Falls Personen, die nicht an einem Kurs teilnehmen, Fragen zu einem Kurs stellen wollen, können sie diese per E-Mail an die Volkshochschule (organisatorische Fragen, beispielsweise Teilnahmebescheinigung) oder den Dozenten (fachliche Fragen) richten.

Darf ich mitgebrachte Geräte (Klapprechner, Tablettrechner, Handrechner u.s.w.) benutzen?

Ja. (Aus der Sicht des Dozenten. Allerdings muß auch der Veranstalter [beispielsweise die Volkshochschule] damit einverstanden sein.)

Darf ich bestimmte Software verwenden?

Falls die Volkshochschule nichts dagegen hat, daß Teilnehmer mitgebrachte oder von anderen Rechnern abgerufene Software auf den Rechnern der Volkshochschule nutzen, hat der Dozent auch nichts dagegen.

An einigen Volkshochschulen (bei einigen Veranstaltern) ist es jedoch nicht erwünscht oder nicht möglich, daß Teilnehmer Software installieren.

Was steht in der Teilnahmebescheinigung?

Die Teilnahmebescheinigung enthält eine kurze Angabe des Inhalts des Kurses. Falls Sie besondere Wünsche zum Inhalt der Teilnahmebescheinigung haben, so können Sie sich damit nur direkt an den Veranstalter (die Volkshochschule) wenden. Der Dozent kann keine individuellen Wünsche zu Teilnahmebescheinigungen erfüllen, da er mit der Erstellung einzelner Teilnahmebescheinigungen organisatorisch nichts zu tun hat.

„Können schon Kinder am Programmierkurs teilnehmen?“

Gelegentlich wird die Frage gestellt, ob Kinder schon an den Programmierkursen teilnehmen können. Grundsätzlich: Ja. Genauso wie es nicht allen erwachsenen Kursteilnehmern gelingt, alle Lernziele eines Kurses zu erreichen, kommt es allerdings auch bei Kindern vor, daß sie nicht alle Lernziele des Kurses erreichen.

Es wird vorausgesetzt, daß ein Kind, das in einen Erwachsenenkurs geht, bereit ist, sich im Kurs wie ein Erwachsener behandeln zu lassen. Teilnehmende Kinder werden vom Dozenten genau so wie erwachsene Teilnehmer behandelt. Wie ein erwachsener Teilnehmer kann auch ein Kind während des Unterrichts  Wünsche äußern, Fragen zum Kurs stellen oder Mitteilungen zu Kurs machen. Aus Gründen des Datenschutzes spricht der der Kursleiter aber nicht mit Dritten  über Kursteilnehmer. Ein Kind paßt also dann am besten in einen Kurs für Erwachsene, wenn es bereits in der Lage ist, in einem solchen Kurs für sich selber zu sprechen.

Kinder unter  12 Jahren sind in Kursen für Erwachsene aber vermutlich nicht so gut aufgehoben, da sie eher einen speziell an Kinder angepaßten Kurs benötigen. Falls ein Kind unter 12 Jahren aber unbedingt am Kurs teilnehmen möchte, hat der Dozent auch nichts dagegen, falls das Kind sich schon so weit selbst kontrollieren kann, daß es den Unterricht nicht besonders stört und keine Gespräche mit Dritten über das Kind nötig sind.

„Ist die Teilnahme mit beschränkten Deutschkenntnissen möglich?“

Für eine erfolgreiche Teilnahme am Kurs werden Deutschkenntnisse der Niveaustufe C1 (oder höher) empfohlen.

„Warum ist der Kurs so langsam?“

Das Lerntempo im Kurs wird durch die Teilnehmer bestimmt.

Der Dozent erklärt etwas und stellt dann Übungsaufgaben. Können alle Teilnehmer diese Übungsaufgaben sofort richtig bewältigen, kann das Tempo beschleunigt werden. Gelingt es jedoch auch nach längerer Bearbeitungszeit nur wenigen Teilnehmern, eine Aufgabe zu lösen, oder kann gar kein Teilnehmer eine bestimmte Aufgabe lösen, so muß der Stoff offensichtlich noch einmal langsamer und in kleineren Lernschritten erklärt werden. Bei der nächste Durchführung des Kurses wird das betreffende Thema dann gleich von Anfang an besser vorbereitet und langsamer erklärt. So ergibt sich dann ein Tempo, das an die Mehrheit der Kursteilnehmer angepaßt ist.

Wenn sich der Kurs nur an die Teilnehmer mit mittlerem Lerntempo richten würde, dann wäre er für die Hälfte der Teilnehmer zu schnell!

Das folgende Diagramm zeigt eine Kurve, die angibt, wie viele Teilnehmer mit einer bestimmten Lerngeschwindigkeit an einem Kurs teilnehmen: Die meisten Teilnehmer haben mittlere Lerngeschwindigkeit, einige sind langsamer und andere sind schneller. Daher ist die Kurve in der Mitte am höchsten und fällt dann zu den Rändern hin ab.

Die Menge der Teilnehmer, die dem Kurs folgen könnte, wenn sich das Lerntempo am Mittelwert des Lerntempos der Teilnehmer orientieren würde, ist in dem folgenden Diagramm mit einem Nummerzeichen »#« markiert. Der Kurs wäre dann für die anderen 50 % zu schnell!

Anzahl der Teilnehmer
mit dieser
Lerngeschwindigkeit
^
| _.---._
| ,' |###',
| / |#####\
| / |######\
| __.-' |#######'-.__
'---------------------------> Lerngeschwindigkeit
Mitte

Die Geschwindigkeit sollte es mindestens 80 Prozent der Kursteilnehmer erlauben, dem Kurs zu folgen. Daher muß sich das Lerntempo also an den langsameren Teilnehmern orientieren.

In dem folgenden Diagramm ist die Menge der Teilnehmer mit einem Nummerzeichen »#« markiert, die dem Kurs folgen könnte, wenn sich das Lerntempo eher an den langsameren Teilnehmern orientiert.

Anzahl der Teilnehmer
mit dieser
Lerngeschwindigkeit
^
| _.---._
| ,'#######',
| /|##########\
| / |###########\
| __.-' |############'-.__
'---------------------------> Lerngeschwindigkeit
Tempo

Dies bedeutet tatsächlich, daß der Kurs dann für Teilnehmer mit besonders hoher Lernfähigkeit oder mit Vorkenntnissen wiederum zu langsam ist. Wenn jemand einen Kurs wünscht, der genau an sein persönliches Lerntempo und Vorwissen angepaßt ist, muß er Einzelunterricht nehmen!

Kursteilnehmer, die besonders schnell lernen können, haben oft auch eine höhere Selbstlernfähigkeit. Sie können dann auch aus Büchern im Selbststudium effektiv lernen und sind daher auch weniger auf Kurse angewiesen.

Jedenfalls wird in einem Kurs in der Regel alles behandelt, was auch in der Inhaltsangaben für den Kurs angekündigt wurde, so daß das Tempo niemanden überraschen sollte, der diese Inhaltsangabe zuvor einmal gelesen hat und die darin erwähnten Themen dann gedanklich auf die gesamte Kursdauer verteilt hat.

Eventuell könnte ein Kursteilnehmer, dem der Kurs viel zu langsam ist, sich als Gasthörer an einer Berliner Universität einschreiben, da die Lehrveranstaltungen an Universitäten oft mehr Stoff in weniger Zeit behandeln als in diesem Programmierkurs an einer Volkshochschule.

Manchmal sind es umgekehrt gerade Studenten dieser Universitäten, welche den Programmierkurs besuchen, weil sie in zwei Woche eine Prüfung haben, für die sie nun alles noch schnell lernen wollen, was sie in ihrem Studium bisher noch nicht richtig gelernt haben. Es ist für diese Studenten sicher hilfreich, diesen Programmierkurs zu besuchen, und ihnen sei viel Erfolg bei ihrer Prüfung gewünscht, aber das Lerntempo im Kurs muß sich doch an der Mehrheit  der Kursteilnehmer orientieren.

Eventuell ist diese Frage auch ein Hinweis auf zu große Ungeduld und Eile, welche das Lernen vermutlich eher behindert. Es kostet viel Zeit, ein guter Programmierer zu werden, und wenn man diese Zeit nicht investieren kann oder will, dann ist es vielleicht besser, sich damit abzufinden, daß man mit einem geringen Zeitaufwand auch nur geringe Programmierfähigkeiten erwerben kann!

„Warum ist der Kurs so schnell und schwierig?“

Das Lerntempo im Kurs wurde im Laufe vieler Jahre entsprechend der Fähigkeiten der Kursteilnehmer immer wieder herabgesetzt. Viele Inhalte wurden aus dem Kurs gestrichen, damit genug Zeit ist, um sich auf die wichtigsten Inhalte konzentrieren zu können. Nun können oft die meisten Teilnehmer die meisten Übungsaufgaben bewältigen, während es früher öfter vorkam, daß gar kein Teilnehmer eine Übungsaufgabe bewältigen konnte.

Wenn das Tempo noch weiter  verlangsamt werden würde oder der Stoff noch weiter reduziert werden würde, hätte dies auch wieder einen negativen Effekt: Am Ende des Kurses hätte man dann nur so wenig gelernt, daß dies auch wieder demotivierend sein würde! Wichtige Inhalte würden dann ganz fehlen. Viele Teilnehmer würden den Kurs verlassen, weil er ihnen zu langsam ist.

Wenn Ihnen der Kurs als zu schnell oder zu schwierig erscheint, dann haben Sie vielleicht die falsche Erwartung an sich selber, alles gleich beim ersten Hören bereits vollständig verstehen zu können, aber das ist tatsächlich oft nicht möglich und auch nicht nötig! Sehen Sie den Kurs als eine Möglichkeit an, zunächst einen Überblick über den Stoff erhalten zu können, auch wenn Sie nicht gleich alle Details verstehen oder alle Übungsaufgaben lösen können. Nach Ende des Kurses ist es dann aber nötig, noch weiterzulernen und einzelne Details zu vertiefen, wenn Sie die Programmiersprache richtig gut lernen wollen. Beachten Sie auch den folgenden Abschnitt „Wie kann ich mir die vielen Details merken?“.

„Wie kann ich mir die vielen Details merken?“

Nach Seite 13 in »Ged%E4chtnisNetz.pdf« (zunächst »http://www.medienwissenschaft.hu-berlin.de/vlz/Ged%E4chtnisNetz.pdf«, später »http://aes.cs.tu-berlin.de/voelz/PDF/Ged%E4chtnisNetz.pdf«) beträgt die Zuflußrate des Langzeitgedächtnisses zirka 22,5 Byte pro Stunde („Die Speicherung erfolgt sehr langsam mit 0,05 Bit/s“). Von drei Stunden Lernen verbleibt im Langzeitgedächtnis also Information im Umfang von zirka einer Textzeile (da noch andere Informationen als Lerninhalte aus den drei Stunden gespeichert werden könnte, effektiv noch weniger). Um dauerhaft mehr zu lernen hilft es demnach anscheinend nicht intensiver  zu lernen, sondern extensiver  (das heißt: länger) zu lernen.

Von einem Kurs mit 18 Stunden bleiben 3240 Bit = 405 Byte = 5 Textzeilen im Langzeitgedächtnis. Daher ist die einzige Möglichkeit, viel zu lernen, viel Zeit zu investieren ! Dies deckt sich mit Forschungen, denen zufolge Experten auf einem Gebiet sich mindestens 10 Jahre lang intensiv damit beschäftigt haben. Zum Lernen ist es also hilfreich, nicht nur im Kurs anwesend zu sein, sondern nach dem letzten Termin des Kurses noch weiterzulernen, etwa durch Lesen von Büchern oder Bearbeiten von Übungsaufgaben.

Vorerst ist es aber vielleicht auch hilfreich, sich bewußt zu machen, daß es nicht  nötig ist, beim ersten Hören des Kurses alle Details zu erlernen, da diese bei Bedarf im Skript zum Kurs oder in anderen Informationsquellen nachgeschlagen werden können.

Einige Details werden im Kurs vielleicht nur einmal erwähnt, aber später nur noch selten benötigt. Wenn man diese vergißt, ist das also nicht so schlimm. Andere Details werden im Kurs immer wieder benötigt: Sie sollten vorrangig erlernt werden, was aber durch die Wiederholung im Kurs dann quasi schon „automatisch“ geschieht.

„Ich kann dem Kurs nicht mehr folgen, was soll ich tun?“

Wenn Sie Teile des Kurses versäumt und diese nicht nachgelesen haben sollten, so wäre dies eine plausible Erklärung für Verständnisschwierigkeiten, da spätere Teile oft auf früheren Teilen aufbauen und ohne diese oft nicht verstanden werden können. In diesem Falle sollten Sie alle versäumten Teile nachlesen. Im Kurs können Sie dann auch Nachfragen dazu stellen.

Ansonsten ist es ganz normal, daß ein Kursteilnehmer ohne Vorkenntnisse und mit durchschnittlicher Lernfähigkeit beim ersten Hören eines Programmierkurses nicht immer alles verstehen kann. Es kann dann helfen, denselben Kurs später noch einmal zu besuchen oder sich außerhalb des Kurses an Hand von Literatur und Übungen weiter mit dem Thema zu beschäftigen. Um so mehr Zeit man in die Beschäftigung mit einem Thema investiert, um so besser kann man dies erlernen.

Falls Sie jetzt außerhalb des Kurses noch Zeit haben, sollten Sie das Skript zu den bisher im Kurs behandelten Themen durchsehen und alle Abschnitte zu den Themen durchlesen, die Sie noch nicht verstanden haben. Dabei können Sie auch die Übungsaufgaben (wiederholt) bearbeiten und sich Fragen notieren, die Sie dann im Kurs stellen können.

„Ich kann dem Kurs nicht mehr folgen, aber ist dies nicht ein Kurs für Teilnehmer ohne Vorkenntnisse?“

Der Grundkurs richtet sich an Teilnehmer ohne Vorkenntnisse  im Programmieren. Das heißt aber nicht, daß garantiert wird, daß jeder  Teilnehmer alle  Übungen im Kurs erfolgreichen bewältigen kann. Denn auch, wenn alles von Grund auf  erklärt wird, ist es nicht jedem Teilnehmer möglich, sich auch alles zu merken oder dann selber zu eigenen Programmen zu kombinieren. Programmieren liegt nicht jedem! Auch Teilnehmer ohne Vorkenntnisse im Programmieren unterscheiden sich darin, welche Vorkenntnisse sie auf anderen, mit dem Programmieren verbundenen, Gebieten (beispielsweise in Sprachen oder der Mathematik) haben und darin, welche individuellen Stärken und Schwächen sie haben. Die Fähigkeit zum Verständnis gesprochener und geschriebener deutscher Sprache, im Ausdrucksvermögen, im Umgang mit Erfolg oder Mißerfolg und der Umfang der bisherigen Erfahrung im Lernen sind bei jedem Kursteilnehmer anders und tragen ebenfalls zum Gesamtergebnis bei. Es kann auch eine Rolle spielen, ob man noch Zeit findet, während des Kurses oder nach dem Kurs die behandelten Themen noch einmal nachzulesen oder außerhalb der Unterrichtstermine zusätzliche Übungsaufgaben zu bearbeiten.

Ein niedrigeres Lerntempo kann bei starker Motivation mit Zeit und Durchhaltevermögen ausgeglichen werden. Beispielsweise kann ein Grundkurs auch mehrfach  besucht werden. Besuchen Sie den Grundkurs bei mehreren verschiedenen Dozenten, so lernen Sie das Thema aus verschiedenen Blickwinkeln  kennen! Nach Besuch eines Kurses können auch Lehrbücher zum Programmieren durchgearbeitet werden. Auch der Dozent Stefan Ram selber lernt beispielsweise sehr langsam, er hat mehrere Jahrzehnte  gebraucht, um das Programmieren zu erlernen!

„Warum wird das Einlesen von Eingaben von der Konsole im Kurs nicht oder erst spät behandelt?“

In vielen Programmiersprachen ist das Einlesen von Benutzereingaben schwieriger als das Ausgeben von Texten, weil dabei oft auch das Erkennen von Eingabefehlern und manchmal auch das Analysieren von Eingaben nötig wird, für das am Anfang noch die Programmierkenntnisse fehlen.

Das Einlesen von Eingaben über die Konsole findet sich zwar in einigen Lehrbüchern, aber wird außerhalb von Lehrbüchern selten verwendet, da selbst Kommandozeilenprogramme Informationen eher aus Kommandozeilenargumenten und Dateien entnehmeb, so daß daher auch keine besondere Notwendigkeit zum Einlesen besteht, und interaktive Programme heute meist mit einer GUI  programmiert werden.

Manche Programmierbücher und Kurse behandeln das Einlesen von Eingaben mit der Konsole, weil früher so unterrichtet wurde, als Textkonsolen noch die Standardbenutzeroberfläche oder einzige Benutzeroberfläche eines Computers waren, und der Urheber sich noch nicht die Mühe gemacht hat, sein Werk auf die Gegenwart umzustellen. Teilweise müssen die Lernenden dann sogar spezielle Bibliotheken erlernen, die außerhalb solcher Kurse niemand verwendet, und welche alte Programiersprachen mit Konsoleneingabe simulieren.

Dadurch, daß das Einlesen von Eingaben über die Konsole nicht behandelt wird, wird Zeit gespart, die dann anderen wichtigen Themen zugute kommen kann.

Anstelle des Einlesens von Eingabewerten können diese einer Methode übergeben werden, was noch den Vorteil hat, daß bei Tests nicht immer von Hand dieselben Werte eingegeben werden müssen, wodurch auch Zeit gespart wird.

Auf Wunsch kann das Einlesen kurz in der Fragestunde am Ende des Kurses behandelt werden.

Programme, die etwas einlesen oder ausgeben sind aus Sicht der Programmierung wie „Sackgassen“, da sie keine Daten aus anderen Programmteilen sondern nur von außen verarbeiten können und die von ihnen ausgegebenen Daten im Programm nicht direkt verfügbar sind. Funktionen und Objekte, welche Daten durch Aufrufe von anderen Programmteilen entgegennehmen können oder an andere Programmteile weitergeben können, sind da viel flexibler und werden im Kurs so früh wie möglich behandelt.

„Warum verwenden die Programme die Textkonsole an Stelle einer GUI ?“

Ausgaben auf die Textkonsole sind für den Anfang einfacher zu programmieren als Ausgaben mit einer GUI.

Hinzu kommt, daß es ohnehin oft nützlich ist, die Techniken zum Arbeiten mit einer Textkonsole zu kennen, da diese von Software-Entwicklern immer wieder benötigt werden. Viele Programme, die „hinter den Kulissen“ ihre Arbeit tun, sind Textkonsolenprogramme.

Dadurch, daß GUI -Programme, wie die Bezeichnung „GUI “ schon sagt, graphisch sichtbar sind, wird ihr Anteil an der gesamten Software eines Rechners überschätzt. Tatsächlich stellen sie nur die sichtbare Oberfläche dar, sozusagen die Spitze des Eisbergs. Hinter den Kulissen arbeiten viele Programme ohne GUI ! Man kann dies mit den Mitarbeitern eines Fernsehsenders vergleichen, in dem viel mehr Menschen arbeiten, als die, welche man auf dem Bildschirm sieht.

Zu den Programmen ohne GUI  gehören nicht nur die Programme, welche über eine Textkonsole verwendet werden, sondern mehr noch Programme und Bibliotheken, die ganz ohne eine Benutzeroberfläche (weder GUI  noch Textkonsole) „im Hintergrund“ arbeiten und beispielsweise Datenbankdienste bereitstellen. Daneben gibt es auch Programme, die über andere Wege kommunizieren, wie beispielsweise über Netzwerkverbindungen. Mancher Anfänger kennt die ganze Vielfalt der Software eines Rechnersystems noch nicht und sieht nur deren Oberfläche und überschätzt daher den Anteil und die Bedeutung von GUI -Software.

Auf Wunsch kann die GUI -Programmierung in manchen Kursen (falls die Programmiersprache diese überhaupt unterstützt) kurz in der Fragestunde am Ende des Kurses behandelt werden. Wenn eine Programmiersprache überhaupt GUI -Programmierung unterstützt, dann wird diese meist im Aufbaukurs auch behandelt.

„Ist der Kurs nicht etwas zu mathematisch ?“

Programmieren ist  eine Art von Mathematik, da viele Begriffe (wie Variablen) und Schreibweisen (wie Operatoren und Aufrufe) aus der Mathematik stammen. Es läßt sich also nicht ganz vermeiden, daß all dies als mathematisch erscheinen kann.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722564 stefan_ram:722564 FAQ zu den Programmierkursen Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722564, slrprddef722564, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/faq_programmieren