Programmiersprachen für die Schule: welche scheinen am sinnvollsten?
-
Shade Of Mine schrieb:
Python ist da IMHO ideal. Es erfuellt alle Anforderungen und ist als Bonus auch noch Praxisrelevant.
Die Anforderungen sind:
Starke Typisierung
Saubere und Konsistente Syntax
Wenig BoilerplateWelche Anforderung denkt ihr sind sonst noch wichtig?
Ich halte es durchaus für lohnenswert, wenn man weiß, wie Datenwerte im Speicher abgelegt werden.
Deswegen sollte man z.B. wissen, dass eine einfache Liste neben dem eigentlichen Datenwert pro Listeneintrag auch noch eine Adresse enthält, die auf den nächsten Listeneintrag zeigt.
Deswegen sollte es schon eine Programmiersprache sein, die den Zugriff auf die direkten Adressen erlaubt und somit auch Zeiger anbietet.
Man bekommt dadurch also eine bessere Vorstellung der Interna und versteht auch was es sich z.B. mit einem Char Array auf sich hat.
Natürlich könnte man sich jetzt darüber streiten ob das überhaupt wichtig für Schüler ist, die außerhalb des Info Unterrichst sowieso nie wieder progammieren werden, aber wenn Informatik in der Schule bedeuten soll, den Computer auch von einer halbwegs brauchbaren Low Level Ebene zu verstehen, dann wird man um Zeiger nicht herumkommen.
An den Unis ist inzwischen, wie hier schon einer angemerkt hat, Java die typische Lehrsprache und das der Hintergrund über Zeiger & Adressen fehlt kann dann schon ein Problem in Java werden, wenn man nicht wirklich weiß, wie Listen intern funktionieren.
Wer aber C/C++ oder D lernt, der weiß das.
-
.oO schrieb:
Shade Of Mine schrieb:
Python ist da IMHO ideal. Es erfuellt alle Anforderungen und ist als Bonus auch noch Praxisrelevant.
Die Anforderungen sind:
Starke Typisierungreden wir da von der selben, oder gibt es python in unterschiedlichen ausführungen?
Python besitzt zwar eine relativ starke Typisierung, allerdings wird dies für den Programmierer nicht ersichtlich (Variablen sind nur typlose Referenzen auf Objekte); Duck-Typing wird verwendet.
-
danke für die PHP Erklärung. Na mein letztes mal ist schon lange her ... also mit PHP mein ich
Aber solche Fehler sind wirklich blöd zum Finden!Wenn ich sowas sehe, bin ich über den strengen C++ Compiler ja wieder sehr dankbar.
Nagut, genug diskutiert, ich geh schlafen.
-
Anderer Vorschlag schrieb:
Deswegen sollte man auf einen ordentlichen Editor achten, wenn man in PHP programmiert.
Ein guter Editor sagt dir, dass du eine Variable vor ihrer Initialisierung verwendets.
Anderer Vorschlag schrieb:
Ich halte es durchaus für lohnenswert, wenn man weiß, wie Datenwerte im Speicher abgelegt werden.
Wozu?
Man bekommt dadurch also eine bessere Vorstellung der Interna und versteht auch was es sich z.B. mit einem Char Array auf sich hat.
Und wenn man nie in seinem leben C++ anfasst, dann ist dieses Wissen unnuetz.
Und selbst in C++ ist es nicht wichtigDen Computer zu verstehen hat mit Programmierung nichts zu tun. Deshalb sind Einfuehrungen in die Programmierung die gleich mal mit Bitshift anfangen komplett fur die Katze.
Es geht beim Programmieren darum, abstrakte Konzepte zu Code zu bringen. Zeigermanipulation ist da vollkommen uninteressant. Ich habe jetzt schon einigen Leuten diverse Sprachen beigebracht - und das wichtigste fuer das Verstaendnis war immer die Abstraktion.
Erstmal ist eine Liste ein ding, in das man dinger steckt und wieder rausholen kann. Weil es einfach oft notwendig ist, eine Sammlung von Dingern zu haben. Wie das funktioniert, ist extrem lange vollkommen uninteressant. Es ist einfach ein Werkzeug.
So Sachen wie die richtige Datenstruktur zu waehlen (sprich: linked list, array, tree,...) ist etwas, dass man sich erst ueberlegt wenn man grundlegend Programmieren kann.
-
Shade Of Mine schrieb:
Anderer Vorschlag schrieb:
Deswegen sollte man auf einen ordentlichen Editor achten, wenn man in PHP programmiert.
Ein guter Editor sagt dir, dass du eine Variable vor ihrer Initialisierung verwendets.
Das auch, nur würde ein Editor der nur das kann, bei diesem PHP Beispiel nicht helfen, denn das falsch geschriebene $berechenterwert wurde ja initialisiert.
Nur wenn der Buchstabendreher in einem Variablenname auf der rechten Seite der Zuweisung gestanden hätte, dann hätte so ein Editor davor warnen können, dass eine Variablle verwendet wird, die noch nicht initialisert wurde.
Anderer Vorschlag schrieb:
Ich halte es durchaus für lohnenswert, wenn man weiß, wie Datenwerte im Speicher abgelegt werden.
Wozu?
Man bekommt dadurch also eine bessere Vorstellung der Interna und versteht auch was es sich z.B. mit einem Char Array auf sich hat.
Und wenn man nie in seinem leben C++ anfasst, dann ist dieses Wissen unnuetz.
Und selbst in C++ ist es nicht wichtigDoch, natürlich ist das wichtig.
Es hilft dabei eine Vorstellung von komplexeren Datenstrukturen zu bekommen, was dazu führt, dass man seinen Code auch performanter schreiben kann, weil man dann schlichtweg die richtige Datenstruktur für die richtige Aufgabe auswählt.
So Sachen wie die richtige Datenstruktur zu waehlen (sprich: linked list, array, tree,...) ist etwas, dass man sich erst ueberlegt wenn man grundlegend Programmieren kann.
Die richtige Datenstruktur zu wählen ist eine Kunst, die zum Programmieren dazu gehört und das Programmieren erst so richtig ineressant macht.
-
Anderer Vorschlag schrieb:
Doch, natürlich ist das wichtig.
Es hilft dabei eine Vorstellung von komplexeren Datenstrukturen zu bekommen, was dazu führt, dass man seinen Code auch performanter schreiben kann, weil man dann schlichtweg die richtige Datenstruktur für die richtige Aufgabe auswählt.
Erstmal muss man die Leute dazu bringen, dass sie korrekten Code schreiben.
Das unterschaetzt du gewaltig. Das dauert enorm lange und ist enorm aufwaendig.Richtigen Code zu schreiben ist nicht trivial.
Wenn du einen Anfaenger unterrichtest, dann stellst du schnell fest wo die Probleme liegen. Die sind dann nicht ob eine single linked list oder double linked list besser ist, sondern ob man hier ein if oder ein for braucht.
-
Ich denke mal es kommt vor allem auf die Motivation des Lernenden an. Ich habe z.B. meine ersten Gehversuche mit VB und C# gemacht, bin aber überhaupt nicht weit gekommen. Ganz einfach weil die bunten Fensterchen die man sich da zusammenklicken konnte mich nicht die Bohne interessiert haben, für mich war Programmieren lernen eigentlich nur ein Mittel zum Zweck, ich wollte verstehen wie ein Computer funktioniert. Für jemanden mit dieser Motivation wird wohl C/ASM der richtige Einstieg sein. Was ich damit sagen will ist, es kommt eigentlich nur auf eines an: Die Motivation der Schüler irgendwie behalten. Und das ist bei einer Schulklasse wohl aller Wahrscheinlichkeit nach völlig unmöglich, wenn man nur eine Sprache unterrichtet. Warum lässt man sie also nicht aussuchen? Die Leute die eher technisch interessiert sind machen dann C, und die anderen Python. Eventuell kann man ja sogar gleiche Aufgaben implementieren lassen (geht natürlich nur manchmal), und hinterher vergleichen.
-
Die Motivation der Schüler irgendwie behalten.
Es besteht Schulpflicht. Die meisten Schueler koennen wohl fuer Schule im Allgemeinen nicht begeistert werden.
Warum lässt man sie also nicht aussuchen?
Natuerlich ... die Loesung. Weil ja Lehrer auch so unglaublich vielseitig sind, idealistisch und arbeitssam. Nur weil jemand Klavier spielen kann, wird er sich an Gitarre oder Violine wohl schwer tun.
-
Ich verstehe nicht so richtig, warum für so viele hier Java keine Option ist. Ich habe damit selber gute Erfahrungen gemacht, auch damals im Informatikunterricht in der Schule (neben ein bisschen Prolog). An den Unis findet Java auch breite Verwendung als Lehrsprache, da könnten dann einige schon mit Vorwissen punkten. Außerdem kommt Java auch in realen Projekten zum Einsatz, auch wenn mir die Nachteile von Java an dieser Stelle durchaus bewusst sind und dies auch keine Verteidigung von Java darstellen soll.
Java ist nicht anspruchslos, aber auch nicht zu komplex, was ich jetzt einfach mal von C/C++/ASM/Brainfuck behaupten würde. Trotzdem können in Java viele Techniken gelehrt werden, wobei ich vor allem OO hervorheben würde. Man kann ja trotzdem erstmal mit dem imperativen Programmierparadigma anfangen. Außerdem gibt es strenge Typisierung, was ein sehr wichtiger Punkt meiner Meinung nach ist. Auch so Sachen, wie der Unterschied zwischen Instanziierung und Initialisierung, lassen sich gut erklären. Ein weiterer Vorzug wäre, dass viele Lehrer wohl aus der Uni mit Java vertraut sein dürften, im Gegensatz zu den meisten anderen Sprachen.
Ich würde die Schüler jetzt auch im Gegensatz zu den meisten Kommentatoren nicht so unterschätzen, ein engagierter Lehrer kann schon viel vermitteln.
-
Michamab schrieb:
Ein weiterer Vorzug wäre, dass viele Lehrer wohl aus der Uni mit Java vertraut sein dürften, im Gegensatz zu den meisten anderen Sprachen.
IHMO weder den Stoff, den Sie unterrichten werden, werden sie an der Uni durchnehmen noch werden Sie, Programmieren in ihren Studiumgang durchnehmen, außer Sie haben ingeneurmäßige Nebenfächer.
-
Michamab schrieb:
Ich verstehe nicht so richtig, warum für so viele hier Java keine Option ist.
Java ist OK, hat aber viel Boilerplate.
Da wäre vielleicht eher Scala angebracht wenn man auf der JVM bleiben will.Aber natürlich steht und fällt alles mit dem Dozent. Keine Frage.
-
Java ist meiner Meinung nach keine Option. Es kommt einfach mit zu viel Boilerplate daher. Die Entwicklungsumgebungen sind außerdem groß und kompliziert. Unis scheinen ja mittlerweile von Java eher wegzugehen. Das war halt eher ein Trend aus den 90ern und ich glaube die Bezeichnung von Java als neues COBOL trifft durchaus zu. Ich denke mit einer Sprache wie Python, Lua, oder Scheme (Racket) hat man einfach als Schüler mehr Spaß. Ein paar Zeilen reichen und man kann zB einfach mit Turtle etwas interessantes machen. Das ist viel motivierender als sich durch den ganzen Java Boilerplate zu arbeiten.
Und die Sprachen kommen auch in realen Projekten zum Einsatz.
-
Zeus schrieb:
Michamab schrieb:
Ein weiterer Vorzug wäre, dass viele Lehrer wohl aus der Uni mit Java vertraut sein dürften, im Gegensatz zu den meisten anderen Sprachen.
IHMO weder den Stoff, den Sie unterrichten werden, werden sie an der Uni durchnehmen noch werden Sie, Programmieren in ihren Studiumgang durchnehmen, außer Sie haben ingeneurmäßige Nebenfächer.
Sicherlich lernt man in der Uni nicht "Programmieren", aber sofern man es sich nicht andersweitig aneigenet, kommt man halt nur mit den Sprachen in Berührung, die für Übungsblätter und Projekte gefordert werden. Und da ist Java halt nach wie vor sehr populär, weshalb viele Studenten halt zumindestens ein bisschen damit in Berührung kommen. Angehende Lehrer machen in der Regel ja kein richtiges Informatikstudium durch, sondern haben auch noch ein Zweitfach und diverse Didaktikveranstaltungen. Deshalb würde ich halt schon sagen, dass die Kenntnisse in Java im Vergleich zu anderen Sprachen bei Lehramtsabsolventen größer sind.
Außerdem würde ich schon sagen, dass der Stoff, den sie später unterrichten werden, ihnen in der Uni vermittelt wird. Natürlich auf einem völlig anderen Niveau und weit darüber hinausgehend. Z.B. simple Algorithmik (Sortieren, Suchen, Rekursion), ein bisschen theoretische Informatik (im Info-LK an meiner alten Schule wurden glaube ich Automaten behandelt), relationale Algebra (Datenbanken), usw. Meines Wissens nach gibt es dann auch noch spezielle Info-Didaktikvorlesungen, wo dann auch so simple Einsteigerbeispiele (Türme von Hanoi usw.) durchgenommen werden.
rüdiger schrieb:
Java ist meiner Meinung nach keine Option. Es kommt einfach mit zu viel Boilerplate daher. Die Entwicklungsumgebungen sind außerdem groß und kompliziert. Unis scheinen ja mittlerweile von Java eher wegzugehen. Das war halt eher ein Trend aus den 90ern und ich glaube die Bezeichnung von Java als neues COBOL trifft durchaus zu. Ich denke mit einer Sprache wie Python, Lua, oder Scheme (Racket) hat man einfach als Schüler mehr Spaß. Ein paar Zeilen reichen und man kann zB einfach mit Turtle etwas interessantes machen. Das ist viel motivierender als sich durch den ganzen Java Boilerplate zu arbeiten.
Und die Sprachen kommen auch in realen Projekten zum Einsatz.
Naja, ich würde in der Schule sowieso keine IDE nehmen, höchstens nen besseren Editor mit nem Button für Kompilieren und Ausführen. Und mir ging es explizit nicht um Java als solches, sondern um die Merkmale von Java (Scala fände ich an dieser Stelle zum Beispiel auch gut). Schwach-typisierte Skriptsprachen fallen für mich einfach raus, da fehlt mir einfach die Vermittlung davon, was so eine Variable überhaupt ist. Rein funktionale Programmiersprachen sehe ich an dieser Stelle auch kritisch. Wichtig wäre mit wie gesagt OO, das als Konzept im Unterricht zu unterschlagen fände ich schon fatal.
-
Woll'n wir `ne E-Petition erstellen?
-
Man lernt durchaus an der Uni programmieren.
-
Sone schrieb:
Woll'n wir `ne E-Petition erstellen?
Den Verbot in Informatik an der Schule zu unterrichten, Immer.
-
Michamab schrieb:
Wichtig wäre mit wie gesagt OO, das als Konzept im Unterricht zu unterschlagen fände ich schon fatal.
Ich nicht, denn OO wird erst bei Großprojekten unvermeidlich und so etwas wird keiner der Schüler in seinem Leben nach der Schule programmieren, er sei denn er bildet sich spezialisierend weiter (also Info-studium & Co), aber da lernt er dann OO sowieso.
Es genügt völlig, wenn die Schüler lernen rein prozedural zu programmieren.
Denn Programme die größer als 2000 Zeilen sind, wird von denen später sowieso keiner Programmieren und damit ist OO unnötig.C bietet hier also alles was nötig ist.
Genaugenommen wäre C sogar ideal, wenn man berücksichtigt, das einige der Schüler vielleicht mal ihre Modelleisenbahn über die parallele Schnittstelle oder einem µC ansteuern wollen. Für letzteres ist C ja super geeignet,
OO braucht man erst in der professionellen Softwareentwicklung.
-
Nur ist C ungeeignet um damit Programmieren zu lernen, weil es unmoeglich fuer einen Anfaenger ist einen Segfault zu debuggen. Und in C hat man Segfaults.
-
Zeus schrieb:
Sone schrieb:
Woll'n wir `ne E-Petition erstellen?
Den Verbot in Informatik an der Schule zu unterrichten, Immer.
Deine potentiellen Intentionen sind:
oder
oder
Zugegeben, letzte Option würde, sofern sie zutrifft, die Frage aufwerfen, was du dann hier im C++ Forum suchst, aber vielleicht geht es dir hier um Meinungsmache um die Experten zu beeinflussen, so daß diese sich an die Lehrer wenden.
Ich wäre froh gewesen, wenn ich in der Schule Informatik als Hauptfach oder Leistungskurs wählen hätte können. Da hätte ich sicher noch einmal ordentlich Punkte sammeln können.
Das die Lehrer in diesem Fach keine Peilung haben, hätte mir nichts ausgemacht.
Im Gegenteil, je weniger die Lehrer wissen, desto mehr kann man in diesem Fach glänzen. Die 15 Punkte (oder Schulnote sehr gut) sind dann vorprogrammiert.
Ich hatte Computertechnik (so hies das damals bei uns) nur als freiwilliges Nebenfach und dieses entsprach mehr den Status einer Schul AG und dass die Lehrer nicht viel Ahnung hatten, war ich gewohnt. Besonders viel Einfluss konnte ich mit meinen 15 Punkten in Computertechnik auf den restlichen Notenschnitt dann leider doch nicht nehmen. Wie gerne hätte ich das als Leistungskurs gehabt und entsprechend verwerten können.
-
Shade Of Mine schrieb:
Nur ist C ungeeignet um damit Programmieren zu lernen, weil es unmoeglich fuer einen Anfaenger ist einen Segfault zu debuggen. Und in C hat man Segfaults.
Hm, okay.
Das ist ein berechtigter Einwand der gegen C sprechen könnte,
allerdings hat man recht schnell gelernt, was man darf und was nicht.
Das also über die Char Array Grenzen nicht hinausgechrieben werden darf
und man auf die Adressen achten sollte, sobald man Zeiger verwendet, hat man doch recht schnell in 1-2 h gelernt.
Notfalls führt der Lehrer das vor.Auf eine dynamische Speicherreservierung via malloc & Co kann man im Schulunterricht ja verzichten, denn das ist schon ein Gebiet für die fortgeschrittene Programmierung und für die Anfänge in der Programmierung kommt man auch ganz gut ohne aus.