Ich ärgere mich immer wieder darüber, dass ich Neulingen spezielle Sprachregeln beibringen muss (wie den Array-to-Pointer-Zerfall), die absolut nichts mit Programmierung an sich zu tun haben. Also habe ich mich gefragt:
Was ist die Programmiersprache mit der geringsten Anzahl von speziellen Sprachregeln, in der alles erstklassig ist und ohne störende technische Einschränkungen komponiert werden kann? Wäre eine solche Sprache nicht die perfekte Unterrichtssprache?
Moderator Hinweis
Wir suchen lange Antworten, die einige Erklärungen und Zusammenhänge liefern. Listen Sie nicht nur eine Sprache auf: Bitte erklären Sie, warum die Sprache Ihrer Meinung nach die Frage beantwortet. Antworten, die nichts erklären, werden gelöscht. Weitere Informationen finden Sie unter Gutes Subjektiv, Schlechtes Subjektiv .
quelle
I=SKK
. Das Ultimative in orthogonalen Sprachen sind Einzelanweisungssprachen wie Jot und RSSB.Antworten:
Wenn es um "sehr wenige Regeln" geht, würde ich argumentieren, Lisp oder Smalltalk würden gewinnen. Die nackte Syntax kann auf einen Bier-Tab geschrieben werden.
Aber meiner Erfahrung nach bedeutet die Einfachheit von Lisp und Smalltalk nicht, dass sie einfach zu verstehen und zu unterrichten sind. Meiner Erfahrung nach ist der To-Do-Listen-Stil von imperativen Sprachen für Neulinge am einfachsten zu verstehen.
Daher würde ich Python, Ruby oder etwas Ähnliches vorschlagen : Sie finden (fast) jedes grundlegende Konzept in ihnen (OK, keine Hinweise), aber Sie müssen es nicht von Anfang an verstehen, um etwas zum Laufen zu bringen.
quelle
Ich würde sagen, LISP oder Schema oder eine Sprache aus dieser Familie wäre die orthogonalste. Mit
let
,lambda
,define
,if
,cons
,list
, und(
)
man kann so ziemlich alles lehrt , dass Sie in einem Intro Kurs wollen würden. Es ist auch nicht erforderlich, Anweisungen oderint main()
ähnliches vorab zu verarbeiten, was die Schüler nur einschließen, aber keinen Grund dafür sehen.In meinen CS-Einführungskursen haben wir mit Scheme viele wirklich coole Dinge gemacht: eine Turing-Maschine implementieren, einen TC-201-Computer implementieren, eine kontextfreie Grammatik schreiben, Rekursion verwenden, Zusammenführen und Einfügen sortieren, Addierer implementieren und jede Menge andere Sachen.
Ich hatte Java in AP comp sci vor dem College gemacht, aber Scheme war großartig, weil ich die Unordnung beseitigen und mich auf die tatsächlichen Konzepte in meinem Programm konzentrieren konnte. Es war eine großartige Klasse und ich würde Ihnen wärmstens empfehlen, sie für Ihren Unterricht auszuprobieren.
quelle
Pascal wurde speziell für den Programmierunterricht entwickelt. Es ist leicht zu lernen (es war eine der ersten Programmiersprachen, die ich gelernt habe).
quelle
Logo: Es ist noch am Leben und munter !
Es scheint eher ein Spielzeug als eine Programmiersprache zu sein, aber für viele wäre es kein schlechter erster Schritt. Die Syntax ist sehr einfach, aber die Schildkröte bietet eine konkretere Form des Feedbacks als die meisten Sprachen / Umgebungen. Der Versuch, eine bestimmte Form zu erstellen, ist eine großartige Möglichkeit, den Prozess des Vorausdenkens zur Lösung eines Problems zu erlernen.
Wenn Sie eine Abneigung gegen Schildkröten haben, denke ich wirklich, dass Schema der richtige Weg ist.
quelle
Ich würde sowohl SML als auch Haskell vorschlagen. Die Orthogonalität war für beide ein Hauptentwurfspunkt. Insbesondere ist der Kern von SML (dh der Teil der Sprache, der sich nicht mit Modularität befasst) so ziemlich ein typisierter Lambda-Kalkül. Infolgedessen werden die meisten Sprachfunktionen von Typen gesteuert, und die Typen steuern wiederum die Einführungs- und Eliminierungsformulare für die Werte. Das ist so ziemlich ideal.
Es gibt in beiden Sprachen ein paar nicht-typentheoretische Warzen (eqtypes in SML, seq in Haskell), aber sie schlagen immer noch die Hosen von irgendetwas anderem, was bizarre Wechselwirkungen von nicht verwandten Sprachmerkmalen betrifft.
quelle
Was auch immer die Wahl ist, ich würde dringend empfehlen, eine „echte“ Sprache zu unterrichten . Das Unterrichten von Spielzeugsprachen funktioniert für manche Menschen, aber für andere ist es sehr, sehr frustrierend, da die Verbindung zur realen Welt unterbrochen ist. Einige Menschen brauchen Relevanz für die Praxis als Lernmotivation, und es ist nicht unsere Aufgabe, diese Lernstrategie zu beurteilen (das ist in der Tat ein weit verbreitetes Missverständnis).
Dies disqualifiziert Sprachen wie Logo, aber auch domänenspezifische Sprachen wie Processing . Während letzteres für bestimmte Dinge (z. B. das Erstellen von Infografiken) äußerst nützlich ist, ist die Verwendung für die meisten Verwendungszwecke (und damit für die meisten Benutzer) zu eingeschränkt. Dies schließt auch Gofer aus , eine unbrauchbare Haskell-Untergruppe. Es auch schließt Pascal denn obwohl letztere hat in realen Projekten verwendet worden, es ist einfach nicht mehr relevant und es fehlt einfach wesentliche Merkmale (zB Einbau-Strings).
Von den praktischen Sprachen stimme ich den bereits erwähnten zu: moderne Lisp- oder Scheme-Dialekte, Haskell, Python oder Ruby. Persönlich würde ich wahrscheinlich Python verwenden, aber all diese Entscheidungen haben ihre Vor- und Nachteile.
quelle
Tcl hat 12 Regeln , die die gesamte Sprache regeln.
Es gibt nur sehr wenige Sonderfälle oder reservierte Wörter oder Zeichen.
quelle
Um meinen Kommentar zu erweitern, in Jot ist alles erstklassig (weil es ein Lambda-Kalkül ist) und kann komponiert werden. Es gibt nur eine Anweisung. Es ist eine absolut schreckliche Unterrichtssprache.
Im Allgemeinen gibt es in Turing-Tarpits nur wenige Sonderregeln, und Sie müssen die Grundlagen der Berechnung sehr gut kennen, bevor Sie etwas tun können. Die perfekte Unterrichtssprache ermöglicht es den Schülern, zu experimentieren, ohne sich die Haare auszureißen. Daher sind Abstraktionen auf höherer Ebene eigentlich eine gute Sache.
quelle
Die wichtigsten Funktionen in einer Sprache, die Sie lernen, sind:
Prinzip der geringsten Überraschung (PASCAL)
Lesbarkeit (Ada)
Meiner Meinung nach übertrifft der Zweite den Ersten, da das Lesen von Code noch wichtiger ist als das Schreiben.
Jetzt schreibe ich wieder C #, Java, Objective-C und Javascript, die alle schreckliche Macken haben: D
Wenn ich jedoch zunächst eine Sprache auswählen müsste, würde ich mich für C # entscheiden. Es ist relativ einfach zu lesen, hat an sich nur wenige schwerwiegende Überraschungen (sie sind meistens in MS-Tools / Frameworks verborgen ...) und eine enorme Menge an zu lesendem Code und Dokumentation, die beide für ein gutes Lernen unerlässlich sind.
quelle