Sprache für den Unterricht in grundlegender Programmierung

8

Ich bin daran interessiert, Mittelschülern Programmieren beizubringen. Ich möchte eine Programmiersprache mit folgenden Kriterien:

  1. Einfach - auf das absolute Minimum reduziert, um anspruchsvolle Programmierung ohne zu viel Code zu unterstützen. Daher interessiere ich mich für diese Sprache nicht für Zeiger und bin der Objektorientierung überdrüssig (obwohl die Funktionen gut sind).
  2. Leistungsstark - Ich möchte Elemente des 21. Jahrhunderts programmieren können, darunter Grafiken, Netzwerke und verteilte Verarbeitung.
  3. Debuggable - Ich hätte gerne eine elegante integrierte Entwicklungsumgebung mit einem für Menschen lesbaren Debugger (dh keine seltsame Fehlermeldung mit einem Stack-Trace, sondern eine klare Erklärung, anhand derer ein durchschnittlicher Mittelschüler feststellen kann, was mit dem Code nicht stimmt). .

Die Standardprogrammiersprachen (C, C ++, C #, Java) erfüllen das erste Kriterium nicht. Grundlegende Programmiersprachen wie Scratch erfüllen das zweite (und möglicherweise dritte) Kriterium nicht. Skriptsprachen (Perl, Python, PHP) erfüllen das letzte Kriterium nicht.

Ich würde gerne wissen, ob jemand von so einem Biest weiß, bevor ich mich hinsetze, um es selbst zu erfinden.

Ari Trachtenberg
quelle
2
Haben Sie ein Beispiel für die Art von lesbarer Debug-Ausgabe, die Sie möchten? Sie haben Python ausdrücklich ausgeschlossen, aber es ist einfach, leistungsstark und verfügt über eine IDE / Debugger-Integration: wiki.python.org/moin/IntegratedDevelopmentEnvironments Die Stapelverfolgung ist besser als bei vielen anderen, jedoch nicht auf der Ebene "Sie haben eine schließende Klammer verpasst" in Zeile 42 "... Ich kenne keine Beispiele für Letzteres.
Andybuckley
Hauptsächlich möchte ich, dass die Fehlermeldungen klar und ausreichend beschreibend sind, damit ein unerfahrener Programmierer sie verstehen kann: Beispiel: "AttributeError: 'Modul'-Objekt hat kein Attribut' BufferedIOBase '" ist nicht beschreibend - welches Objekt war das Problem? und wo brauchte es das gewünschte Attribut?
Ari Trachtenberg
1
Ich bin mir nicht sicher, ob dies a) hier ontopisch ist und b) objektive Antworten hat, aber während wir dies im Computer Science Chat diskutieren, möchten Sie vielleicht diese Frage lesen , in der nützliche Kriterien für die Auswahl der ersten zu unterrichtenden Sprache erläutert werden. Das heißt, Sie könnten in Scala schauen. Es ist keine einfache Sprache, wenn Sie sie gründlich lernen möchten, aber die "erste Stufe" ist recht einfach, sie skaliert und erfüllt Ihre Kriterien, denke ich.
Raphael
1
Ich kann nicht erkennen, dass Python "nicht debuggbar" ist. Verwenden Sie einfach den Befehlszeileninterpreter. Und ich bin nicht allein damit, dass "Debuggen" eine schlechte Art ist, Programme zu entwickeln. Ja, ich greife auch gelegentlich nach einem Debugger, aber ich finde, dass ich es fast immer besser mache.
vonbrand

Antworten:

4

Ich empfehle Javascipt.

  • Nahezu jeder, der dies liest, hat standardmäßig Zugriff auf eine Entwicklungsumgebung in seinem Browser.
  • Es ist verzeihend für neue Programmierer.
  • Es unterstützt einen modernen Funktionsumfang.
  • Trotz der Qualität gibt es im Internet ein riesiges Repository mit Beispielcode
  • Es ist eine real anwendbare Sprache.
John
quelle
Die Khan-Akademie scheint einen schönen Wrapper für Javascript zu haben, der das meiste tut, was ich brauche.
Ari Trachtenberg
4
Sie haben den Link zu destroyallsoftware.com/talks/wat
Andrej Bauer
+1, ich füge hinzu, dass, wenn Sie echte Klassen (im Gegensatz zur Objektvererbung) und optionale statische Typen wünschen, Microsoft Typescript in Visual Studio Express verfügbar ist (mit allen Debugger-Schnickschnack) (ich glaube nicht, dass Typescript unterscheidet sich genug von Javascript, um seine eigene Antwort zu rechtfertigen.)
Wandering Logic
8

Sie sollten sich vielleicht Racket ansehen (formal bekannt als Scheme, eine Ableitung von Lisp). Es ist die Sprache, die CS-Studenten im ersten Jahr an meiner Universität beigebracht wird. Da es sich um eine funktionale Programmiersprache handelt, sind die Syntax und die Konzepte im Vergleich zu C / C ++ recht einfach. Es gibt mehrere Bibliotheken, die einige grundlegende Zeichen- oder Netzwerkfunktionen ausführen können, und Dr. Racket als verschiedene Debugging-Funktionen ... einschließlich eines Steppers ( dh es wird jeweils eine Ersetzung angezeigt und durchgeführt, wenn Sie auf die Schaltfläche "Weiter" klicken. Ich denke, dass es sich lohnen könnte, einen Blick darauf zu werfen : http://racket-lang.org/ . Es hat einige andere Funktionen, die Ihnen gefallen könnten, wie z. B. Unterrichtsmodule (Anfänger, Mittelstufe, Fortgeschrittene, Vollschüler) und ziemlich gute Dokumentationen und Beispiele. Das Buch: How To Design Program ( http: //www.htdp.) ist eine großartige Referenz für diese Sprache, die einige schöne Beispiele für einige der oben genannten Bibliotheken enthält.

user340082710
quelle
5
Ich stimme dir nicht zu. Funktionale Programmierung ist selbst für College-Studenten viel schwieriger als unbedingt erforderlich. Ich möchte Mittelschülern keine rekursiven Datenstrukturen beibringen (ein absolutes Muss für Racket and Co).
Patrick Collins
2
@PatrickCollins: Ich erinnere mich an Studien, in denen Schüler (jeden Alters) das Programmieren von Funktionen schneller lernten als das imperative Programmieren, wenn ihr Geist zuvor nicht an dem wohl eher unintuitiven sequentiell-imperativen Paradigma ausgerichtet / verschmutzt war (dh sie waren absolute Anfänger) ). Ich kann das definitiv für die Universität bestätigen: Wir unterrichten zuerst Funktionsprogrammierung und diejenigen ohne Programmiererfahrung haben weniger Probleme als andere.
Raphael
5
@Raphael, ich kenne einige Leute, die kompetente Imperativ- / OOP-Programmierer sind (selbst unter Leuten, die nicht als solche ausgebildet wurden), und eine knappe Handvoll, die sich mit funktionaler Programmierung auskennen. Ja, Rekursion ist natürlich, wenn Sie in mathematisches Denken vertieft sind . Ansonsten ist es nur eine extrem seltsame Art, die "Wiederholung ... bis sie fertig ist" zu machen, die ganz natürlich ist. Komm schon, Induktion wurde erst zu Fermats Zeiten wirklich verstanden. Die Leute haben schon einige hunderttausend Jahre zuvor Algorithmen definiert / angewendet.
vonbrand
1
Die Racket-Leute haben Lehrmaterial für Mittelschulkinder entwickelt und es mit Erfolg verwendet: bootstrapworld.org
Dave Clarke
3

Wenn Sie entscheiden, dass Python für Sie funktioniert, würde ich mir die Jython-Umgebung für Studenten (JES) ansehen. Es gibt einige raffinierte Debugging-Tools, darunter einen "Watcher", mit dem Sie Variablen auswählen können, die überwacht werden sollen. Sie können die Schritte steuern oder schnell loslassen. Ich habe diese IDE bei Lernenden im mittleren Schulalter in einem Sommerprogramm erfolgreich eingesetzt, aber ich verwende sie auch in einem Einführungskurs auf Universitätsniveau. Auch die Medienberechnungsbibliotheken machen Spaß. Die Studenten in meinen Kursen haben es genossen, Bilder und Töne zu bearbeiten. Es gibt auch Unterstützung für das Erstellen von Animationen.

Ich habe es nicht für die Vernetzung und verteilte Verarbeitung verwendet. Das Lehrbuch zur Medienberechnung von Guzdial und Ericson enthält Beispiele für Themen wie Datenbanken und funktionale Programmierung, einschließlich Verfahren höherer Ordnung. Sie können in JES normale Python-Aufgaben ausführen, es bietet jedoch zusätzliche Unterstützung für Medienaufgaben.

PrairieProf
quelle
2

Sie sollten wahrscheinlich Visual Basic verwenden. Es ist ganz einfach, Sie können die Kontaktlistenanwendung zusammen mit einigen einfachen GUI-Spielen leicht erstellen. Sie können es auch debuggen. Wenn Ihre Schule bereit ist, den Teig auszuteilen, können Sie ein Dreamspark- Abonnement erhalten. Ich denke, es wird die Aufmerksamkeit der Schüler auf sich ziehen.

109
quelle
2

Python ist eine "fast Pseudocode" -Sprache, die leistungsfähig genug ist, um "echte" Programmierung durchzuführen (die meisten Verwaltungstools in z. B. Fedora Linux sind in Python geschrieben). Sie verfügt über einfach zu verwendende Erweiterungen für Grafik- / Grafikschnittstellen und kann große Funktionen verarbeiten numerische Probleme (Leute verwenden NumPy dafür), viel Webprogrammierung wird darin durchgeführt, mehrere Programme verwenden es als Erweiterungssprache. Es gibt eine umfangreiche Bibliothek und viele größere Systeme, die in / für sie geschrieben wurden. Es ist also keine Spielzeugsprache, es ist später nützlich, sie zu lernen.

Schauen Sie sich die Homepage an , es gibt ausgereifte Implementierungen für fast jede Plattform, die Sie interessieren könnten. Es ist kostenlos (nicht nur null Kosten). Es ist eine umfangreiche Dokumentation verfügbar, eine Google-Suche nach "Python-Tutorial" liefert Millionen von Treffern. Ein praktisches Web-Tutorial ist Learn Python . Für einen Einführungskurs in die Programmierung mit Python sollten Sie Downeys Think Python in Betracht ziehen .

vonbrand
quelle
Das OP erwähnte Python ausdrücklich als nicht den "einfach zu verwendenden Debugger" -Kriterien entsprechend. Diese Antwort würde verbessert, wenn Sie auf einige Python-IDEs mit leicht verständlicher Debugger-Unterstützung verweisen könnten.
Wandering Logic
1

Sie schließen vom MIT entwickelte Kratzer aus , die einige der Kriterien grob zu erfüllen scheinen. Jedenfalls gibt es hier zwei neuere Sprachen, die eine Überlegung wert sind.

  • Gehen Sie mit Google. Entwickelt für eine schnelle Kompilierung. Hier sind die Designziele

  • Swift von Apple für die mobile Entwicklung. entwickelt, um eine weniger komplexe Alternative zu Apples Ziel C zu sein.

  • node.js ist neuer und wurde im Wesentlichen entwickelt, um die Funktionen von Javascript auf die Serverseite zu erweitern und Netzwerkfunktionen einzuschließen.

vzn
quelle
1
Danke ... Scratch fehlt funktionale Programmierung. Es mag gut für Grundschulkinder sein, aber ältere Kinder wachsen schnell heraus (meiner Meinung nach).
Ari Trachtenberg
kein Experte für Kratzer. Beim schnellen Überfliegen werden jedoch Funktionen in benutzerdefinierten Blöcken und sogar das Weiterleiten von Nachrichten über "Broadcast" und einige Multithreading-Konzepte unterstützt. es scheint auch rudimentäre Robotik über eine Picoboard-Schnittstelle zu unterstützen
vzn
Berkeley hat eine Scratch-Erweiterung namens Snap, die Funktionen hat. Es hat auch Ereignisbehandlung, aber es hat kein Netzwerk und es ist nicht einfach zu debuggen.
Ari Trachtenberg
Recht. vermutete Debugger wären nicht vorhanden und würden bei diesem Element fehlschlagen. Aber nur Schritt für Schritt durch die Ausführung zu gehen (was nicht sehr schwer zu unterstützen ist), kann als grundlegendes Debugging angesehen werden. Für mich ist das Debuggen eher ein Implementierungsaspekt ... dh man kann nicht ausschließen, dass Scratch-Debugger in Zukunft irgendwo / an einem bestimmten
Punkt auftreten
0

Hast du dir Newspeak angesehen? Newspeak ist eine moderne Variante von Smalltalk. Also ja, es ist objektorientiert, aber eher im Sinne von Alan Kay als im Sinne von Simula 67.

Wenn ich jedoch der Mittelschule Programmieren beibringe, würde ich die Debugger-Anforderung aufgeben und etwas mehr wie Haskell unterrichten.

Pseudonym
quelle