Einfache Programmiersprache für Einsteiger

Hallo liebes Forum,

ich plane eine Programmier-AG an einem Gymnasium. Die Schüler die diese besuchen werden sind Interessierte ab der Klasse 7. Das heißt, dass ich es wohl mit lieben Kleinen ab zwölf Jahren zu tun haben werde. Mir wird wohl jeder zustimmen, dass es kaum Sinn macht so jungen Programmieranfängern sofort mit Objektorientierung und ähnlich komplexem Stoff den man für eine Programmiersprache wie C++ oder Java benötigen würde auf die Nerven zu gehen.

Daher suche ich eine leicht zu erlernende Programmiersprache. Dinge die mir bei der Wahl wichtig wären sind:

  • Variable müssen vor der ersten Verwendung samt ihrem Datentyp deklariert werden

  • folgende Datentypen sollten vorhanden und leicht zu handhaben sein: int,float, bool, char. Außerdem sollten Arrays (am liebsten nur mit int-Indizes) und Strings vorhanden und mit den üblichen einfachen Funktionen ausgestattet sein.

  • bei Verwendung falscher Datentypen sollte keine automatische Konvertierung stattfinden, dh einer Int-Var einen Float-Wert zuweisen -> Fehler

  • Es sollte einen schönen Editor mit integriertem Compiler geben, das heißt, dass ein Textfenster da ist in das man den Quellcode eingibt und dann im Menu einen Startknopf drückt der das ganze dann sofort compiliert und ausführt. Als erste Standardausgabe sollte ein Fenster da sein in das man dann mit print oder einer ähnlichen Funktion eine Ausgabe erzeugt.

  • Das Definieren von Subroutines und Funktionen sollte ebenfalls in dem Quellcode-Fenster möglich sein ohne sie aus externen Dateien importieren zu müssen.

  • Die Erstellung von Fenstern mit den üblichen Elementen wie Textfenstern, Buttons, Checkboxen und Radiobuttons sollten dann so einfach zu realisieren sein, dass ich sie nach einigen Wochen einführen kann.

  • Sonstiger Schnickschnack ist erstmal nicht nötig. Also es werden keine Packages zur Bearbeitung von Medien oder komplizierten Schnittstellen oder so benötigt.

  • DAS GANZE SOLLTE KOSTENLOS SEIN. Und zwar in dem Ausmaß, dass ich es legal auf 15 Computern im Computerraum der Schule installieren kann und jeder Schüler es sich auch zu Hause installieren kann.

Vielen Dank für alle Tips und für die Mühe sich den langen Text überhaupt durchgelesen zu haben :smile:

Hallo!

  • Variable müssen vor der ersten Verwendung samt ihrem
    Datentyp deklariert werden
  • bei Verwendung falscher Datentypen sollte keine automatische
    Konvertierung stattfinden, dh einer Int-Var einen Float-Wert
    zuweisen -> Fehler

Also eine statische, explizite und dann noch starke Typisierung. Der Spaßfaktor einer solchen Sprache dürfte gegen Null gehen. Ich wüsste auch gar keine solche Sprache, die zudem noch eine GUI-Lib mitbringt, zu der es eine IDE gibt und die dann noch OS-unabhängig ist (ich hoffe ja mal, dass nicht alle Schüler Windows zuhause haben müssen). Also, zumindest die Typisierungsanforderung würd ich nochmal überdenken.

Python hat z.B. eine starte Typisierung in dem Sinne, dass sowas wie „5“ + 3 nicht geht, anders also als bei Perl. Da z.B. wäre vielleicht Python aus pädagogischer Sicht „besser“ geeignet. Naja, und Pythons „Duck Typing“ zu erklären, ist sicherlich auch ganz erheiternd.

Major - kein Pädagoge und kein Dipl.-Inform.

Vielen Dank schonmal für die Antwort.

Vielleicht habe ich mich etwas missverständlich ausgedrückt. Bei den Datentypen wollte ich natürlich nicht jeden Spaß erwürgen. Mir geht es nur darum, dass eben sowas wie

int i = „5“ + 5.2

nicht gehen soll. Natürlich sollte sowas wie

int i = round( int(„5“) + 5.2 )

schon klappen. Außerdem ist es in meinen Augen besser wenn man lernt, dass Arrays immer nur in der Form Array[0…n] existieren können. Wenn die lieben Kleinen dann später z.B. php lernen sind die dann froh wenn auf einmal alle Indizes gehen. Anders herum wäre es wohl eher verwirrend.

Ich gucke mir jetzt mal C# mit SharpDevelop 2.2 an. Da kann man mit zwei Klicks ein laufendes Konsolenprogramm erstellen und starten. Da kann man das ganze Klassen-Hickhack erstmal umgehen, hat aber später die Möglichkeit eine mächtige Sprache mit allem drum und dran voll auszuschöpfen.

Für andere Vorschläge bin ich natürlich weiterhin offen…

Ich gucke mir jetzt mal C# mit SharpDevelop 2.2 an.

Also mir wär Python und vielleicht noch C als mögliche Sprachen eingefallen. Auch wenn C sehr „tiefsinning“ sein kann, kann mans am Anfang ja gemütlich angehen. Und was ist mit Pascal?

Aber C#? – Wenn du doch schon sagtest, dass du keine Objektorientierung haben willst, anfangs. Warum dann nicht auch Java? Dann hast du auch die OS-Unabhängigkeit, die du forderst. Denn außer mono (unter Linux/Unix/etc.) fällt mir jetzt nichts ein, wo .NET sonst noch läuft.

Also C# als einfache Einsteigersprache zu präsentieren, ich weiß nicht…

mfg.

In Verbindung mit SharpDevelop erfüllt es alles was ich so gesucht habe. Das einzige Manko ist, dass teilweise einfache Funktionen wie zB eine Zufallszahl zu erzeugen über den Zugriff auf eine Klasse realisiert werden müssen. Aber das kann man ja auch erstmal nur ganz grob erklären ohne detailliert auf Klassen, Objekte und sonst was einzugehen.

Hallo Fusel,

ich denke, Pascal ist so ziemlich das, was du suchst. Es erfüllt alle von Dir genannten Kriterien:

  • strikte Variablendeklaration
  • Datentypen Integer, Real/Single/Double/Extended, Boolean, Char, String
  • einfache String-Manipulationen
  • ein- und mehrdimensionale Arrays
  • es gibt schöne, einfache und komfortable Editoren
  • prozedurale Sprache; das volle Programm mit allem drum&dran kann in einer einzigen Quellcode-Datei geschrieben werden. Trotzdem ist das Auslagern von Quellcode-Teilen in andere Dateien („Units“) einfach möglich
  • kostenlos verfügbar

Es gibt einen Haken:

  • Die Erstellung von Fenstern mit den üblichen Elementen wie
    Textfenstern, Buttons, Checkboxen und Radiobuttons sollten
    dann so einfach zu realisieren sein, dass ich sie nach einigen
    Wochen einführen kann.

Solche Komponenten grafischer Benutzeroberflächen sind nicht einfach zu programmieren. In der Regel sprechen Programmiersprachen, welche derartige Komponenten EINFACH implementieren, diese als OBJEKTE an. Hier kommst du um das Konzept von OOP kaum herum. Oder du brichst dir einen ab, Buttons usw. ordentlich zu platzieren und die Ereignisbehandlungsroutinen zu schreiben usw.

Es gibt die Pascal-Varianten ‚Delphi‘ (für Windows) und ‚Kylix‘ (für Unix), mit denen sich sehr einfach gute grafische Benutzeroberflächen (also Buttons, Grids, Labels etc) machen lassen. Dahinter steckt aber dann zwangsläufig die Verwendung von Objekten.

Mein Tipp: Es lohnt sich. Die Einfachheit, SCHÖNE kleine Programme zu erstellen, ist berauschend. Das macht den Kids sicher Spaß! Ohne Spaß hat’s keinen Zweck. Die paar Aspekte, die man von der OOP braucht, um das zum Laufen zu bringen, sind schnell erklärt. Um das zu benutzen, muss man nicht über Vererbung, Virtualität, Klassenhierarchie usw. Bescheid wissen - so wie man nichts über Thermodynamik usw. wissen muss, um Auto zu fahren.

Welche Version Du nimmst, ist egal bzw. Geschmackssache. Ob TurboPascal, FreePascal, oder sonst ein Pascal-Klon. Delphi bzw. Kylix bieten IMHO die einfachste und beste grafische Anwendungsgestaltung (Versionen 1-7; ab 8 wird’s mit .Net etwas doof).

LG
Jochen

Hallo Jochen,

an Delphi habe ich auch als erstes gedacht, da ich selbst damit in der Schule programmieren gelernt habe. Das Problem ist, dass es meines Wissens keine Delphi-Version gibt die in dem Maß wie ich es bräuchte als Freeware zur Verfügung steht.
Damals in der Schule hat es mich auch wenig interessiert, dass ich bei dem Button, den ich mit der Maus in ein Fenster ziehe und bei dem ich per Mausklick an die richtige Stelle im Quelltext gelange, nicht alles vertstanden habe was im Header vonwegen Sender TObject oder so steht. Leider ist das ganze nicht kostenlos.
Kannst du mir eine andere Pascal Variante nennen die ähnlich leicht zu bedienen und trotzdem kostenlos ist?

Vielen Dank schon im Voraus.

Hallo,

damit in der Schule programmieren gelernt habe. Das Problem
ist, dass es meines Wissens keine Delphi-Version gibt die in
dem Maß wie ich es bräuchte als Freeware zur Verfügung steht.

Aber doch.

Hier ein direkter Download-Link:

http://www.delphi-tage.de/sl/dwl.1/

Oder auch hier:

http://www.entwickler-ecke.de/download_delphi_2005_p…

Evtl. benötigte Aktivierungs-Keys gibt’s kostenlos beim Hersteller (mein Delphi läuft ohne Registrierung & Aktivierung seit 4 Jahren):

http://www.codegear.com/downloads/free/delphi

Du bekommst Delphi. Die PC-Welt hatte auch mal eine Delphi-CD beiliegen. Ich weiß allerdings nicht, welche Ausgabe. Aber da kannst Du bei der PC-Welt ja mal nachfragen.

Wenn das mit dem Download nicht klappt, kannst du Dich immer noch per email mal an CodeGear wenden und denen sagen, dass Du gerne für die Ausbildung von Schülern eine alte Delphi-Version hättest. Die Senden dir sicher was zu.

Kannst du mir eine andere Pascal Variante nennen die ähnlich
leicht zu bedienen und trotzdem kostenlos ist?

Das ist nicht nötig, denke ich.

Vielen Dank schon im Voraus.

Gerne doch. Und viel Erfolg!

Jochen

Servus,

Ich finde es nicht gut, wenn man prozedural programmieren lernt, in einer objekt-orientierten Sprache. Sauber Programmieren inkludiert eine angemessene Verwendung der Sprache. Wenn man nicht objekt-orientiert programmieren will, soll man keine OOP-Sprache verwenden, meiner Meinung nach.

Denn was antwortet man auf Fragen wie: Und warum muss ich immer „objekt.funktion“ schreiben, wenn doch immer "objet. " da steht? Kann man doch gleich weglassen. Und das doch Hinschreiben ist Inkonsequenz die dem sauberen Programmieren widerspricht.

Denn was spricht gegen eine prozedurale Sprache?

mfg.

Ich schließe ja nicht prinzipiell aus irgendwann die Prinzipien von OOP einzuführen. Ich muss erst einmal abchecken wie fit die lieben Kleinen so sind. Von daher ist dieser Kompromiss mit der etwas komplexeren Programmiersprache in einer Entwicklerumgebung die einem anfangs viel abnimmt vielleicht ganz gut.
Ich habe in meiner ganzen Schulzeit mit Delphi programmieren gelernt und von Objekten erst im Studium etwas erfahren. Sonderlich gestört hat mich das nie. Sollten die Schüler nachfragen warum man bei Stringoperationen immer String. davor schreiben muss kann man das ja ganz kurz erläutern und sie auf später vertrösten.
Solltest du jedoch noch eine schöne prozedureale Sprache mit anfängerfreundlicher Entwicklungsumgebung wissen bin ich natürlich weiter für jeden Tip dankbar.

Hi Fusel,

Ich schließe ja nicht prinzipiell aus irgendwann die
Prinzipien von OOP einzuführen.

Du kommst IMO heutzutage überhaupt nicht mehr ohne OOP aus. Alles ist heute OOP. Guck Dir mal Windows an, wenn Du z.B. aus Deinem Programm heraus Word oder Excel starten willst, dann sprichst Du die Programe als Objekte an. Egal ob Du in VB oder Delphi programmierst.

Ich muss erst einmal abchecken
wie fit die lieben Kleinen so sind.

Mit ca. 12 Jahren? Glaube mir, die werden das schon schnallen. Und es ist IMO besser wenn sie gleich an OOP rangeführt werden. Als wenn sie sich an reine prozeduale Programmierung gewöhnt haben und später umlernen müssen.

Außerdem: sooo groß ist der Unterschied zwischen Prozeduren und Methoden ja auch nicht. Beide nehmen ggf. Parameter entgegen und liefern ggf. einen Rückgabewert.

Kompromiss mit der etwas komplexeren Programmiersprache in
einer Entwicklerumgebung die einem anfangs viel abnimmt
vielleicht ganz gut.

VB, Delphi.

Sollten die Schüler
nachfragen warum man bei Stringoperationen immer String. davor
schreiben muss kann man das ja ganz kurz erläutern und sie auf
später vertrösten.

Muß zumindest bei Delphi nicht sein, da kann man die Strings auch auf alte Weise bearbeiten.

Solltest du jedoch noch eine schöne prozedureale Sprache mit
anfängerfreundlicher Entwicklungsumgebung wissen bin ich
natürlich weiter für jeden Tip dankbar.

Wird schwierig, da heute fast alle Sprachen OOP-Elemente besitzen. Aber Du kannst mit VB, Delphi oder C immer noch prozedural programmieren.

Aber Du kannst ja versuchen, das uralte BASICA (oder Locomotive Basic) auf Deinem XP zum Laufen zu bringen. Ist garantiert OOP-frei (hehe).

Grüsse,

Tim

Außerdem: sooo groß ist der Unterschied zwischen Prozeduren
und Methoden ja auch nicht. Beide nehmen ggf. Parameter
entgegen und liefern ggf. einen Rückgabewert.

Objektorientierung auf die Art und Weise von Methodenaufrufen zu reduzieren ist… interessant. Und OOP auf das Aufzählen von Punkten wie Kapselung, Vererbung und Polymorphie zu beschränken wäre ebenfalls unzureichend. Ein sauberes objektorientiertes Design hinzulegen ist nicht jedermanns Sache!

mfg.

Hi,

Objektorientierung auf die Art und Weise von Methodenaufrufen
zu reduzieren ist… interessant. Und OOP auf das Aufzählen
von Punkten wie Kapselung, Vererbung und Polymorphie zu
beschränken wäre ebenfalls unzureichend.

Schon richtig. Aber eine saubere strukturierte (rein) prozeduale Sturkturk hinzukiegen ist auch nicht trivial.

Ein sauberes
objektorientiertes Design hinzulegen ist nicht jedermanns
Sache!

Doch! Uns zwar wenn Du es jemand von Anfang an beibringst. Du kannst z.B. jemand Programieren im alten MS-BAISC lernen lassen. Dann bringst Du ihm Pascal oder Modula-2 bei. Diesen Schritt hättest Du Dir auch sparen können. Genauso verhält es sich IMO auch mit prozedural OOP.

Grüsse,

Tim