it-swarm.com.de

Was ist die orthogonalste Programmiersprache?

Ich ärgere mich immer wieder darüber, dass ich Neulingen spezielle Sprachregeln (wie den Zerfall von Arrays zu Zeigern) beibringen muss, die absolut nichts mit Programmierung an sich zu tun haben. Also fragte ich mich:

Was ist die Programmiersprache mit der geringsten Anzahl spezieller Sprachregeln, bei 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 nach langen Antworten, die Erklärungen und Zusammenhänge liefern. Listen Sie nicht nur eine Sprache auf: Erklären Sie bitte , warum Sie glauben, dass die Sprache die Frage beantwortet. Antworten, die nichts erklären, werden gelöscht. Weitere Informationen finden Sie unter Good Subjective, Bad Subjective .

47
fredoverflow

Wenn es um "sehr wenige Regeln" geht, würde ich argumentieren, dass LISP oder Smalltalk gewinnen würden. Die nackte Syntax kann auf eine Bierregisterkarte geschrieben werden.

Nach meiner Erfahrung bedeutet die Einfachheit von LISP und Smalltalk jedoch nicht, dass sie einfach zu verstehen und leicht zu lehren sind. Obwohl dies nicht der "reine" Weg ist, ist meiner Erfahrung nach der To-Do-List-Stil imperativer Sprachen für Neulinge am einfachsten zu verstehen.

Daher würde ich vorschlagen Python, Ruby oder etwas von ähnlicher Abstraktion: Sie finden (fast) jedes Grundkonzept in ihnen (OK, keine Zeiger), aber Sie ziehen nicht an Ich muss es nicht von Anfang an verstehen, damit etwas funktioniert.

54
keppla

Ich würde sagen, LISP oder Schema oder eine Sprache aus dieser Familie wäre am orthogonalsten. Mit let, lambda, define, if, cons, list und () Sie können so ziemlich alles unterrichten, was Sie in einem Einführungskurs möchten. Es ist auch nicht erforderlich, Direktiven oder int main() und ähnliches vorzuverarbeiten, was die Schüler nur einschließen, aber keinen Grund dafür sehen.

In meinen CS-Einführungskursen haben wir viele wirklich coole Dinge mit Scheme gemacht: Implementieren einer Turing-Maschine, Implementieren eines TC-201-Computers, Schreiben einer kontextfreien Grammatik, Verwenden von Rekursion, Schreiben von Sortierungen zum Zusammenführen und Einfügen, Implementieren von Addierern und Tonnen von andere Sachen.

Ich hatte Java in AP comp sci vor dem College gemacht, aber das Schema 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 es sehr empfehlen Sie es für Ihren Unterricht zu versuchen.

41
BlackJack

Pascal wurde speziell für den Programmierunterricht entwickelt. Es ist leicht zu lernen (es war eine der ersten Programmiersprachen, die ich gelernt habe).

17
Henrik

Logo: es ist immer noch lebendig und munter !

; draws a triangle
FORWARD 100
RIGHT 120
FORWARD 100
RIGHT 120
FORWARD 100
RIGHT 120

Es mag eher wie ein Spielzeug als wie eine Programmiersprache erscheinen, aber für viele Menschen 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 zu lernen, um ein Problem zu lösen.

Wenn Sie jedoch eine Abneigung gegen Schildkröten haben, denke ich wirklich, dass Schema der richtige Weg ist.

14
benzado

Ich würde sowohl SML als auch Haskell vorschlagen. 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 ziemlich ideal.

Es gibt ein paar nicht typentheoretische Warzen in beiden Sprachen (eqtypes in SML, seq in Haskell), aber sie schlagen immer noch die Hosen von allem anderen da draußen in Bezug auf bizarre Interaktionen von nicht verwandten Sprachmerkmalen.

10
Lambdageek

Was auch immer die Wahl sein mag, ich würde dringend empfehlen, eine „echte“ Sprache zu unterrichten . Das Unterrichten von Spielzeugsprachen funktioniert für einige Menschen, für andere jedoch sehr, sehr frustrierend, da die Verbindung zur realen Welt unterbrochen ist. Einige Leute brauchen Relevanz für die reale Welt als Motivation zum Lernen, und es ist nicht unsere Aufgabe, diese Lernstrategie zu beurteilen (tatsächlich ist dies ein weit verbreitetes Missverständnis).

Dies disqualifiziert Sprachen wie Logo, aber auch domänenspezifische Sprachen wie Verarbeitung . 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 Verwendungen (und damit für die meisten Benutzer) zu eingeschränkt. Dies schließt auch Gofer aus, eine nutzlose Haskell-Teilmenge. Es auch schließt Pascal aus, denn obwohl letzteres wurde in realen Projekten verwendet wurde, ist es einfach nicht mehr relevant und es fehlen einfach wesentliche Funktionen (z. in Strings).

Von den praktischen Sprachen stimme ich den bereits erwähnten zu: moderne LISP- oder Schemadialekte, Haskell, Python oder Ruby. Persönlich würde ich wahrscheinlich Python verwenden, aber all diese Optionen haben ihre Vor- und Nachteile.

8
Konrad Rudolph

Tcl hat 12 Regeln , die die gesamte Sprache regeln.

[1] Commands. 
[2] Evaluation. 
[3] Words. 
[4] Double quotes. 
[5] Argument expansion. 
[6] Braces. 
[7] Command substitution. 
[8] Variable substitution.
[9] Backslash substitution.
[10] Comments. 
[11] Order of substitution. 
[12] Substitution and Word boundaries.

Es gibt nur sehr wenige Sonderfälle oder reservierte Wörter oder Zeichen.

7
Bryan Oakley

Was ist die Programmiersprache mit der geringsten Anzahl spezieller Sprachregeln, bei der alles erstklassig ist und ohne störende technische Einschränkungen komponiert werden kann? Wäre eine solche Sprache nicht die perfekte Unterrichtssprache?

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 haben Turing-Tarpits nur sehr wenige spezielle Regeln und erfordern, dass Sie die Grundlagen der Berechnung sehr gut verstehen, bevor Sie etwas tun können. Die perfekte Unterrichtssprache ermöglicht es den Schülern, zu experimentieren, ohne sich die Haare auszureißen. Abstraktionen auf höherer Ebene sind also eine gute Sache.

4
Peter Taylor

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, um meinen Lebensunterhalt zu verdienen, 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 nur wenige ernsthafte Überraschungen (sie sind meistens in MS-Tools/Frameworks versteckt ...) und eine riesige Menge an zu lesendem Code und Dokumentation, die beide für ein gutes Lernen unerlässlich sind.

2
Kheldar