Kriterien für die Auswahl der Sprache für den ersten Programmierkurs

35

Als CS-Pädagoge auf Universitätsniveau wird häufig diskutiert, welche Programmiersprache im ersten Programmierkurs unterrichtet werden soll. Sie haben die Wahl zwischen Tausenden von Sprachen und viel religiöses Fieber (oder Fieber), das ein Sprachcamp über ein anderes unterstützt. All diese subjektiven Vorurteile, die jede Programmiersprache umgeben, machen es einem Pädagogen sehr schwer, eine zu wählen.

Meine Frage ist:

Nach welchen objektiven Kriterien kann ein Pädagoge eine Programmiersprache auswählen, die als Grundlage für einen Programmierkurs an einer Universität im ersten Jahr dienen soll? Was ist die Basis für diese Kriterien?

Hinweis : Ich möchte keine Liste der Programmiersprachen sehen und warum sie am besten zu verwenden sind. Bei der Frage geht es nicht um die beste Sprache, sondern um die Kriterien für die Auswahl einer Sprache . Antworten können jedoch Programmiersprachen sein, um bestimmte Punkte zu veranschaulichen.


Diese Frage wurde von einer anderen Frage inspiriert, die als nicht thematisch erachtet wurde: https://cs.stackexchange.com/questions/1946/criteria-for-choosing-a-first-programming-language .

Dave Clarke
quelle
1
Eröffneter Meta-Thread zu der Frage, ob diese Frage zum Thema gehört oder nicht: meta.cs.stackexchange.com/questions/362/…
Dave Clarke
7
<Grabs Popcorn> Zur Umschreibung von Otto Neugebauer : Keine dem Menschen bekannte erste Programmiersprache kann alle ruinieren.
JeffE
3
@Raphael: Ich denke, Dijkstra antwortet wahrscheinlich mit " Jede erste dem Menschen bekannte Programmiersprache kann jeden ruinieren."
JeffE
2
@ edA-qamort-ora-y, ja, sie sollten verschiedenen Programmierparadigmen ausgesetzt sein. Nein, das geht im ersten Kurs nicht.
Vonbrand
3
Wir hatten es SMLeinfach, weil es unwahrscheinlich ist, dass ein Schüler diese Sprache vorher kennt. Dies brachte jeden Schüler mehr oder weniger auf das gleiche Niveau, um den Kurs zu beginnen.
Markus Malkusch

Antworten:

14

Ich werfe meine eigenen zwei Cent ein, obwohl ich glaube, dass dieses Thema eine Grube ohne Boden ist. Verstehen Sie mich nicht falsch, ich denke, es ist eine faszinierende Frage, die wir hier wahrscheinlich nicht zur Zufriedenheit aller lösen werden.

Kurz gesagt, ich würde sagen, dass die Sprache tun sollte, was Sie wollen , auf eine einfache und eindeutige Weise wie möglich und nicht mehr .

Meine eigenen Erfahrungen stammen aus der Betreuung mehrerer Generationen von Studenten des ersten und zweiten Studienjahres mit der Programmiersprache Oberon . Leute, die diese Sprache kennen, werden ihren Einfluss in meinen Meinungen erkennen. Beachten Sie, dass diese Sprache zum Unterrichten von "Algorithmen und Datenstrukturen" verwendet wurde. Zu der Zeit (damals) wurden funktionale Programmierung und objektorientiertes Design ab dem zweiten Jahr in separaten Kursen unterrichtet.

Wichtig : Bevor ich jedoch auf die Besonderheiten einer Sprache eingehe, möchte ich betonen, dass das Wichtigste darin besteht, sich und Ihren Schülern absolut klar zu machen, welche Ziele Ihr Kurs verfolgt. Unterrichten Sie Programmierung an sich ? Oder Algorithmen und Datenstrukturen? Oder Softwareentwicklung? Bevor Sie eine Sprache auswählen, sollten Sie sich überlegen, wohin Sie damit gehen. Unterschiede auf dieser Ebene (Ziele) führen meiner Meinung nach wahrscheinlich zu den meisten Meinungsverschiedenheiten zu diesem Thema.

Die Punkte, die ich für wichtig halte, überschneiden sich möglicherweise mit einigen bereits erwähnten Dingen, aber ich glaube, die meisten sind Teilmengen einer der folgenden vier:

  • Einfachheit : Den Schülern werden in der Regel Programmierkenntnisse, Algorithmen und Datenstrukturen vermittelt und nicht die Merkmale und Feinheiten einer bestimmten Programmiersprache. Wirth benutzte das Einstein-Zitat "Mach es so einfach wie möglich, aber nicht einfacher" als Leitprinzip bei der Gestaltung von Oberon, und es gibt mehrere andere Sprachen, die es genauso gut machen. Ihre bevorzugte Programmiersprache sollte in der Lage sein, alle in Ihrer Vorlesung erforderlichen Konzepte zu implementieren, dies jedoch mit dem kleinstmöglichen Satz von Funktionen / Details. Die Programmiersprache ist normalerweise nur das Werkzeug, nicht das Ziel.

  • Eindeutigkeit : Ein enges Geschwister der Einfachheit, es sollte ein Konstrukt für jedes Konzept geben, mit so wenig Überlappung wie möglich. Stellen Sie sich das vor, es gibt nur einen "richtigen" Weg, um jedes Konzept umzusetzen. Drei verschiedene Arten von Schleifen, die semantisch alle dasselbe tun? Oder fünfzehn verschiedene Möglichkeiten, eine Variable zu inkrementieren? Nicht gut. Dies macht auch Hausaufgaben zu korrigieren oder im Allgemeinen nur das Verständnis Ihrer Schüler Code ein viel einfacher. Ihre Lehrassistenten werden es zu schätzen wissen.

  • Portabilität : Die Schüler werden mit Linux-, Windows- und OSX-Maschinen zum Unterricht gehen, und die Programmierumgebung sollte unter allen drei so ähnlich (identisch) wie möglich sein. Die Ergebnisse eines Programms sollten ebenfalls identisch sein. Dies ist ein weiterer Punkt, den die Lehrassistenten, die für die Bewertung der Hausaufgaben und die Behandlung von Fragen / Problemen verantwortlich sind, sehr schätzen werden.

  • Branchenpräferenz : Im Ernst, wir sollten uns darüber nur Gedanken machen, wenn "Industrie" selbst entscheidet, welche Programmiersprache ihm am besten gefällt. Seit der Erfindung der Computer ist dies ein sich ständig bewegendes Ziel. Im Moment ist es nicht sprachabhängig , wenn Ihre Schüler wirklich lernen, wie man programmiert. Es gibt jedoch einige Bereiche, in denen es der Industrie gelingt, sich auf einen Standard zu einigen, z. B. VHDL für das Schaltungsdesign oder SQL für Datenbankabfragen. Dies ist also immer noch ein gültiger Punkt.

Wie eine Sprache in diese Liste passt, hängt wiederum stark davon ab, was Sie unterrichten möchten!

Pedro
quelle
4
Tatsächlich gibt es eine Aufteilung im Schaltungsdesign zwischen VHDL und Verilog.
Avakar
@avakar: Oh, Mist. Ich werde das in meiner Antwort beheben, danke für den Hinweis!
Pedro
Huch, lies das und dachte es ist einer meiner Dozenten. +1 für Oberon, solange die Option zum Verwenden von Schlüsselwörtern in Kleinbuchstaben automatisch aktiviert ist; so schmerzhaft zu schreiben WHILE expr DO stmts ENDusw.
Callum Rogers
3
+1 für "Was sind die Ziele Ihres Kurses?" und eine zusätzliche Anmerkung, eines der häufigsten Ziele, auch wenn es nicht geschrieben ist, ist es, die Grundlagen für andere Dinge (Kurse und Praktika) zu vermitteln, für die Programmierung als Voraussetzung gilt.
AProgrammer
Ein wichtiger Punkt ist (zumindest heute), dass die Schüler schnell und schmerzlos attraktive Programme erstellen können. Sie sind so vielen grafikintensiven Anwendungen und Spielen ausgesetzt, dass sie natürlich denken, dass Computer auf diese Weise mit Menschen interagieren sollen.
Vonbrand
13
  • Entwicklung des algorithmischen Denkens zur Lösung von Problemen als Hauptziel: Eine schlechte Sache bei der Verwendung eines objektorientierten Paradigmas im ersten Kurs ist, dass die Einführung neuer Lernender in Dinge wie Vererbung, Polymorphismus usw. sie vom oben genannten Hauptziel ablenkt. Tatsächlich ist die Einführung von Nebenerwägungen neben diesem Kernziel, wie Softwareentwicklung, Portabilität, Nützlichkeit für die Industrie usw., aus dem angegebenen Grund kontraproduktiv.

  • Keine objektorientierte Sprache: Heutzutage unterrichten die meisten Universitäten die Programmierung direkt mit einer objektorientierten Sprache. Ich halte das für einen Fehler. Es gibt Dinge auf der Welt, die nur im Gegensatz zu ihrem Gegenteil wirklich verstanden werden können. Ohne einem prozeduralen Paradigma der Programmierung (Daten und Funktionen als zwei getrennte Aspekte des Programms) ausgesetzt zu sein, kann die Grundidee der Objektorientierung (Daten und Verhalten als inhärent miteinander verbunden betrachtet) von vielen übersehen werden. Und weil objektorientiertes Programmieren so wichtig ist, ist es keine Kleinigkeit, seine Grundidee zu verfehlen. Außerdem müssen CS-Studenten, da sie höchstwahrscheinlich in höheren Kursen hauptsächlich in OO programmieren, auch mit der prozeduralen Seite der Dinge vertraut sein.

Am Ende würde ich mich für eine prozedurale Sprache entscheiden, erweiterte Funktionen vermeiden und mich auf die Entwicklung des algorithmischen Denkens konzentrieren. Mit der Vermeidung erweiterter Funktionen meine ich jedoch nicht die Vermeidung herausfordernder Probleme. Ich meine, dass die Schüler selbst herausfordernde Probleme mit einfachen Werkzeugen lösen müssen.

Nazar Merza
quelle
Sie können ganz einfach mit einer Teilmenge von beispielsweise Java beginnen, um zunächst den prozeduralen Stil zu zeigen. Dann öffnest du die Büchse der Pandora und zeigst, wie das gleiche Zeug mit OOP aussieht.
Raphael
3
@Raphael: public static void main()In Java ist es unmöglich, das zu vermeiden , was im Kontext einer Klasse liegen muss. Dies macht Java als Muttersprache weniger als ideal, obwohl die Hürde natürlich nicht allzu groß ist.
Dave Clarke
Eine gute IDE kann public static void main()sehr lange aufschieben . BlueJ ist ein gutes Beispiel für eine IDE, mit der Schüler Programme schreiben können main, in denen es keine einzige gibt .
Barry Brown
2
Das Problem mit OOP ist, dass es für die Bandbreite der Spielzeugprobleme, die im ersten Jahr oder so der Programmierung behandelt wurden, nur im Weg steht, ohne dass ein klarer Vorteil erkennbar ist. OOP wird wichtig (und geschätzt), wenn Ihre Programme etwa tausend Zeilen lang sind. "Java ohne OOP" ist schrecklich, viele völlig undurchsichtige Dinge, die "so geschrieben werden müssen", gehen gegen das Lernen und nicht gegen das Papageien.
Vonbrand
11

Da es sich um den ersten Programmierkurs in einem Informatik-Programm handelt, würde ich sagen, der wichtigste Aspekt wäre, welche grundlegenden Konzepte von CS Ihre Schüler unterrichten. Da es keine Sprache gibt, die alle Konzepte auf einmal lehrt, müssen Sie überlegen, welche Konzepte später benötigt werden.

Ich stimme der Auffassung von @ Kaveh nicht zu, dass Branchenrelevanz wichtig ist. Es mag ein Bonus sein, aber es ist hier von untergeordneter Bedeutung. Mit einer soliden Grundlage in CS-Prinzipien wird das Erlernen einer "industriellen" Sprache in späteren Kursen relativ einfach sein.

Unabhängig von der Sprache, die als erste ausgewählt wurde, ist es wichtig, dass Ihre Schüler so schnell wie möglich einer anderen, radikal anderen Sprache unterworfen werden.

evilcandybag
quelle
1
Branchenrelevanz kann als zweitrangig angesehen werden, aber ich denke nicht, dass es sich um ein geringfügiges Problem handelt. Da dies eine Einführung in den Programmierkurs ist, verstehe ich nicht, warum man alle Konzepte darin unterrichten möchte. Oft gibt es einen zweiten Programmierkurs und einen weiteren Kurs zum Thema Programmiersprache, in dem verschiedene Sprachen besprochen werden, und viele andere Kurse konzentrierten sich auf bestimmte Anwendungsbereiche, z. B. Programmierung für das Internet usw.
Kaveh
@Kaveh: Das klingt für mich nach dem Lehrplan einer technischen Universität.
Raphael
6
"Es ist wichtig, Ihre Schüler so schnell wie möglich einer anderen, radikal anderen Sprache zu unterziehen." -- absolut korrekt. Wir setzen die Neulinge, die glauben, sie könnten direkt programmieren, indem wir zuerst die funktionale Programmierung einführen: Fast alle sind neu in diesem Paradigma, und je mehr C (++) Sie erfahren, desto schwieriger wird es anscheinend.
Raphael
3
@Kaveh: Sprachen, die entwickelt wurden, um Dinge in der realen Welt zu erledigen, sind nicht unbedingt optimal, um Konzepte zu vermitteln oder Fähigkeiten zu entwickeln. Die Ziele sind sehr unterschiedlich.
JeffE
1
@Kaveh: Ich habe nie geschrieben, dass Kenntnisse der in der Industrie verwendeten Sprachen unwichtig sind. Was ich damit meine ist, dass bei einer soliden ersten Programmiersprache spätere Kurse kein Problem damit haben, den Studenten etwas darüber beizubringen, was sie tatsächlich tun werden, wenn sie ihren Abschluss machen. Nachdem ich selbst an mehreren Einführungskursen teilgenommen habe (als TA), würde ich sagen, dass die Fähigkeiten, die Sie erlernen, nicht mit denen in der Industrie vergleichbar sind (dafür bleibt zu wenig Zeit). Wenn dies der Fall ist, finde ich es besser, ihnen solide Konzepte zu geben, damit sie bessere Programmierer werden können, nicht nur $ LANGUAGE-Programmierer.
evilcandybag
8

Mein Hauptanliegen ist die Universalität in dem Sinne, dass der Schüler die meisten Programmiersprachen beherrschen sollte, wenn er diese Programmiersprache lernt .

So sehr ich es bedaure, schließt dieses Kriterium reine Funktionssprachen aus. Dies gilt auch für den Kurs, der keine exotischen Sprachmerkmale verwenden sollte.

... aber das ist nur gesunder Menschenverstand.

jmad
quelle
1
Bei Monaden wie in Haskell ist zu argumentieren, dass dieses Kriterium nicht mehr für reine Funktionssprachen gilt.
Dave Clarke
@ DaveClarke: Monaden sind eine sehr gute Möglichkeit, nicht funktionierende Dinge zu tun. Aber ist es nicht zu riskant, dieses Zeug zuerst mit dem Monaden-Overhead zu lernen, anstatt direkt? (Vielleicht ist es nicht, ich weiß es nicht!)
jmad
2
@jdam: Du hast wahrscheinlich recht. Das Problem liegt nicht in den Monaden an sich, sondern in der Allgemeinheit und der Schwierigkeit, dem Programmierer gute Fehlermeldungen zu präsentieren. Die Haskell-Variante Helium adressiert diese Probleme und wurde erfolgreich bei Erstsemestern eingesetzt.
Dave Clarke
@ DaveClarke: Wow, davon habe ich nichts gehört. Das ist sehr cool! Obwohl dies für das Lernen von Haskell sehr nützlich ist, behebt es leider nicht das Problem, dass es möglicherweise nicht hilft, andere Sprachen zu lernen.
jmad
4
@Ben: Mein Gefühl ist, dass die manuelle Speicherverwaltung heutzutage für einige Sprachen spezifisch ist (und dass Sie in diesen speziellen Fällen lernen), mehr als eine grundlegende Sache der Programmierung. Wenn Sie damit nicht einverstanden sind, zeigt es vermutlich auf C (oder C ++).
jmad
8

Bei der Auswahl einer ersten Programmiersprache müssen viele Aspekte berücksichtigt werden. Viele davon wurden in den obigen Antworten berücksichtigt. Ich füge 3 weitere hinzu, da diese einen Teil meiner Antwort auf die geschlossene Frage ( https://cs.stackexchange.com/questions/1946/criteria-for-choosing-a-first-programming-language ) darstellten, die diese Frage ursprünglich inspiriert hatte . Ich habe meine Antwort hierher kopiert (und geändert), basierend auf der aktuellen Richtlinie zum Löschen geschlossener Fragen.

Hier sind 3 Punkte zu beachten, wobei einige Programmiersprachen als Beispiele dienen.

Programmieren im Großen gegen Programmieren im Kleinen

Wenn man das Programmieren zum ersten Mal lernt, muss man lernen, wie man im Kleinen programmiert , bevor man Mechanismen lernt, die das Programmieren im Großen unterstützen .

Mit Programmierung im Kleinen meine ich das Schreiben von Programmen mit weniger als 100 Zeilen. Diese Programme umfassen Algorithmen, die einfache Datenstrukturen manipulieren, einen einfachen Steuerungsfluss haben und einfache Probleme lösen. Sie werden im Allgemeinen nicht als Anträge betrachtet .

Mit Programmierung im Großen meine ich das Schreiben großer Programme, die aus vielen Komponenten / Klassen bestehen und auf einer API aufbauen, mit einer GUI, einer Datenbank, möglicherweise in einer Client-Server-Konfiguration.

Die Dinge, über die ein Programmierer nachdenken muss, wenn er im Kleinen programmiert, unterscheiden sich stark von denen, die er im Großen programmiert. Bei der Programmierung im großen Stil muss der Programmierer über Modularität, gute Schnittstellen, gutes Design, Wiederverwendbarkeit und viele andere Aspekte nachdenken. Moderne Programmiersprachen bieten viele Konstrukte, die das Programmieren im Großen erleichtern. Zu diesen Konstrukten gehören Klassen, Module, Schnittstellen, Ausblenden von Informationen usw. Beim Programmieren im Kleinen sind diese Probleme viel weniger wichtig.

Eine Programmiersprache wie C ++ hat viele Funktionen, die das Programmieren im großen Stil erleichtern. Es ist jedoch schwieriger, sich hinzusetzen und ein sehr einfaches Programm zu schreiben. Java ist ähnlich.

Andererseits macht es eine Sprache wie Python, Ruby, Scheme oder Haskell viel einfacher, ein Programm direkt zu schreiben.

High-Level vs Low-Level

Sprachen wie C ++ und C sind eher untergeordnete Sprachen. Sie ermöglichen es dem Programmierer, Referenzen direkt in den Speicher zu manipulieren. Obwohl dies das Schreiben von sehr effizientem Code ermöglicht, können die Details auf niedriger Ebene für einen ersten Programmierer schwierig sein, die Sprache zu lernen. Einige würden argumentieren, dass diese Details auf niedriger Ebene der Erstellung der Logik zur Lösung des Problems im Wege stehen.

Eine höhere Sprache wie Python erleichtert es, Konzepte direkter in Bezug auf die Problemdomäne auszudrücken.

Statisch getippt vs dynamisch getippt

C ++, Haskell, Java und viele weitere Sprachen sind statisch typisiert. Dies bedeutet, dass der Compiler anhand der erwarteten Wertetypen an jeder Stelle im Code automatisch Stellen findet, an denen potenzielle Fehler auftreten. Es ist ein bisschen ein religiöser Krieg darüber, ob statisches Tippen eine gute Sache ist oder nicht, aber ich werde mich von diesem fernhalten. Ein Problem bei der statischen Eingabe für neue Programmierer besteht darin, dass die vom Compiler gemeldeten Fehlermeldungen häufig schwer zu verstehen sind. Dies ist insbesondere bei C ++ - Vorlagen und Haskell-Programmen im Allgemeinen der Fall.

Python, Ruby und Scheme werden dynamisch eingegeben. Dies bedeutet, dass Fehler erkannt werden, während das Programm ausgeführt wird. Man kann argumentieren, dass dies zu spät ist, um die Fehler zu erkennen (man kann aber auch Tests verwenden, um solche Fehler zu vermeiden). Unter Vermeidung des religiösen Arguments ist der Vorteil der Art von Fehlern, die beim Schreiben einfacher Programme in einer dynamisch typisierten Programmiersprache auftreten, von der Art , wie dieses Objekt diese Operation nicht ausführen kann . Im Kontext eines kleinen Programms sind diese Fehler leicht zu verstehen und aufzuspüren.

Sprachen wie C haben eine schwache Typisierung, was bedeutet, dass der Compiler zwar einige Fehler behebt, die Laufzeit jedoch andere Fehler nicht abfängt, z. B. ungültige Speicherzugriffe. Infolgedessen entspricht die an den Programmierer zurückgegebene Fehlermeldung "Programm abgestürzt". Eine dynamisch getippte Sprache würde diese Fehler abfangen und in eine verständlichere Fehlermeldung umwandeln.

Andere

Für andere Sprachen können andere Aspekte ins Spiel kommen, z. B. die Unterstützung durch die Programmierumgebung, die verfügbaren APIs, die Qualität der Bücher und Online-Tutorials usw.

Dave Clarke
quelle
Ich stimme dir von Herzen zu.
Vonbrand
1
Ich habe auch meine eigenen Vorlieben in Bezug auf den Wettbewerb "statische vs dynamische Typen". In einem allgemeinen CS-Programm ist die Reihenfolge meines Erachtens jedoch nicht so wichtig, solange beides irgendwann unterrichtet wird. Wenn jedoch nur eine Seite der Medaille präsentiert wird, ist das für mich ein großes Problem.
Chi
8

Als einleitende Bemerkung sollten Sie die Möglichkeit in Betracht ziehen, mehr als eine Sprache (in einem Kurs) zu präsentieren. In meinem ersten Semester haben wir sowohl SML als auch Java gezeigt. Der Kontrast hatte eine ganz eigene und wichtige Botschaft: Wählen Sie das richtige Werkzeug für den Job.

Nun aber zu den Kriterien, in beliebiger Reihenfolge.

Schwierigkeit zu lernen ist ein subjektives Problem, aber wichtig: Sie möchten nicht, dass Ihr Schüler Zeit damit verschwendet, die Sprache zu lernen, sondern Dinge damit zu tun . Es ist anzunehmen, dass dynamische Sprachen wie Ruby an dieser Front gewinnen werden: Sie können sie mit allem füttern, und es gibt ausgezeichnete "Dummy" -Tutorials im Web. Wenn ich mich recht erinnere, gibt es auch Studien, die zeigen, dass Studenten, die vorher nicht programmiert haben, mit funktionalen Sprachen bessere Ergebnisse erzielen als mit anderen.

Reichhaltigkeit : Die Sprache (n) muss (müssen) reich genug für alle Konzepte sein, die Sie unterrichten möchten. Wenn Sie beispielsweise Funktionen höherer Ordnung diskutieren möchten, benötigen Sie eine Sprache, in der Funktionen Werte sind, z. B. funktionale Sprachen oder Scala.

Skalierbarkeit : Wahrscheinlich lernen Ihre Schüler nicht mehr Sprachen als die, die Sie ihnen zeigen. Sie möchten, dass die von Ihnen ausgewählten Sprachen im Laufe des Studiums skaliert werden: Sie müssen die Übungen für Ihr Haustier jetzt schreiben, können aber auch ein mittelgroßes Projekt später angreifen. Java und Sprachen mit ähnlicher Ökosphäre sind hier eine gute Wahl.

Tool-Unterstützung : Dies hängt mit der Skalierbarkeit zusammen. Wenn Sie erwarten / möchten, dass Ihre Schüler mit der Sprache produktiv umgehen, müssen gute IDEs, Build-Manager und Bibliotheken vorhanden sein. Interaktive Shells (Ruby, Scala) sind auch eine nette Sache, besonders für den Anfang. Tools müssen auch auf allen wichtigen Plattformen funktionieren.

Dokumentation : Sie möchten die Sprache wahrscheinlich nicht wirklich unterrichten , sondern die Schüler sollen sich selbst mit Ihrer (abstrakten) Anleitung unterrichten. Daher ist eine gute Dokumentation wichtig. Je beliebter und etablierter eine Sprache ist, desto besser ist die Dokumentation. Zum Beispiel ist die Dokumentation von Scala ziemlich schlecht (aber sie verbessert sich). Tools wie Hoogle sind von Vorteil .

Verfügbarkeit : Es gibt tatsächlich Leute, die mit Matlab oder Visual C ++ unterrichten. Bedenken Sie, dass möglicherweise nicht jeder über eine Lizenz oder einen Computer verfügt, auf dem die erforderlichen Programme ausgeführt werden können. Sie sollten wahrscheinlich freie Sprachen bevorzugen, die auf einer Vielzahl von Plattformen ausgeführt werden.

Sauberkeit : Sie möchten wahrscheinlich das Denken Ihrer Schüler beeinflussen. Je chaotischer die Sprache, desto chaotischer werden sie denken; Ich würde niemals PHP in einem Kurs vorschlagen. Dynamische Sprachen haben hier generell Nachteile: Sie erlauben, manchmal sogar fördern, schlechte Gewohnheiten.

Welche Kriterien für Sie wichtiger sind als für andere, hängt auch davon ab, was Sie unterrichten möchten. Ist das buchstäblich ein Programmierkurs? Ist es ein Kurs zu Algorithmen und Datenstrukturen? Ist es ein Kurs, der Konzepte von Programmiersprachen in verschiedenen Paradigmen einführt? Geht es um Softwareentwicklung im großen Stil?

Raphael
quelle
For example, if you want to discuss higher-order functions, you need a language where functions are values, such as functional languages or Scala. ... oder C oder Pascal, die beide so ziemlich ewig Funktionszeiger hatten. Praktisch die einzige (Mainstream-) Sprache, die dieses Kriterium tatsächlich ausschließt, ist Java.
Mason Wheeler
Der Versuch, Neulingen ein Durcheinander verschiedener Syntaxen und zugrunde liegender Konzepte beizubringen, ist nur ein Rätsel.
Vonbrand
6

Faszinierende Frage; Ihre Betonung auf objektive Kriterien gefällt mir. Wir möchten, dass Erstsemester Folgendes lernen:

Programmierkonzepte : Die erste Programmiersprache muss unterstützen: Funktionsaufrufe, Iteration, Rekursion

Grundlegende Ideen : Die erste Programmiersprache muss Arrays unterstützen (für die ersten Schritte in einer sanften Einführung, wie Speicher wirklich funktioniert und wie Zeiger funktionieren)

praktische Programmierkenntnisse : wie man den Debugger benutzt, wie man den Profiler benutzt, wie man große Probleme löst (eine Hochsprache), wie man große Systeme zusammensetzt, wie man Probleme aufschlüsselt (Zerlegung von Problemen), wie man das Schreiben vermeidet komplizierter Code, wie die Absicht hinter einer (oft kryptischen) Reihe ausführbarer Anweisungen an den Menschen kommuniziert werden kann .

die Tatsache, dass vorab geschriebene Bibliotheken für Dinge wie sort () existieren und wie man sie benutzt - dh die Tatsache, dass es nicht notwendig ist, alles von Grund auf neu zu schreiben.

Andere Kriterien für eine Muttersprache :

interpretiert (schnelles Feedback hilft beim Lernen).

eine interaktive Umgebung, die das Lernen, Testen und Debuggen beschleunigt.

Studenten können hochwertigen Quellcode in dieser Sprache lesen

"einfach zu lesen", "Syntax, die sich der natürlichen Sprache annähert" (um das Lesen und Bewerten des SourceCodes zu vereinfachen)

portabel (läuft unter Mac OS, Windows, Unix). Mindestens eine freie Software-Implementierung der Sprache.

schnell zu unterrichten, "wenige Fallstricke" - zum Beispiel "[I] t kann schneller sein, zuerst Anfänger Python und dann Java zu unterrichten, anstatt Java als erstes OOPL." - "Vergleich objektorientierter Programmiersprachen" und TelescopeRule

Matthias Felleisen entwickelte eine Programmiersprache mit Fehlermeldungen, die auf ein Anfängerpublikum zugeschnitten sind. Er betont, dass die Wahl einer bestimmten Sprache nicht so wichtig ist wie die Vermittlung einer guten Entwurfsmethodik. Tatsächlich sieht er den ersten CS-Kurs als eine Klasse für freie Künste, die kritisches Denken, Problemlösung und Liebe zum Detail lehrt.

Kriterien für eine zweite Programmiersprache

Sachen, die die Schüler lernen sollen, aber vielleicht kann dies auf die zweite Programmiersprache warten:

eine "relevante" Sprache, die "nicht zu esoterisch" ist; etwas "Populäres in der Branche"

Komplexitätstheorie: Erkennen von Aufgaben, die mit der aktuellen Technologie nicht möglich sind.

übergeordnete Themen: Auswahl des richtigen Tools für den Job , Verwendung eines Compilers, Strukturen, objektorientierte Programmierung, funktionale Programmierung, Logikprogrammierung, Compiler-Design, Komposition und Manipulation von Funktionen (im Sinne von Lisp / ML), gleichzeitige und verteilte Programmierung,

Low-Level-Zeug: Zeigerarithmetik, Computerarchitektur. Speicherverwaltung, Stack-Frames, Assembly-Programmierung, Maschinenarchitektur, Gerätetreiber und Betriebssystem-Design

EDIT: Ich finde es enttäuschend, dass das Posten einer Zusammenfassung von etwas, das ich in Zusammenarbeit mit vielen anderen geschrieben habe, "möglicherweise kein legaler Post" ist.

Aus diesem Grund füge ich meinem vorherigen informellen Link ein formelleres Zitat hinzu und versuche, mich an die faire Verwendung und andere Wiki-Urheberrechtsfragen zu halten.

Diese Antwort ist eine Zusammenfassung von Freshmans Erstsprache (Anon 2011) im Portland Pattern Repository.

(Anon 2011) Viele anonyme und verschiedene andere Autoren. "Freshmans First Language". Portland Pattern Repository. 27. September 2011. http://c2.com/cgi/wiki?FreshmansFirstLanguage .

David Cary
quelle
Haben Sie bei den Originalautoren nachgefragt, ob Sie deren Inhalt reproduzieren dürfen? Bei der Quelle handelt es sich um eine Unternehmenswebsite, und ich konnte keine Erklärung finden, dass der Inhalt kostenlos ist. Dies ist möglicherweise kein legaler Beitrag.
Raphael
1
@Raphael Die Quelle ist ein Wiki (hat also möglicherweise viele verschiedene Autoren). Wenn der Autor (einer der Mitautoren) dieses Materials nicht möchte, dass es hier aufgenommen wird, sollte er eine DMCA-Deaktivierungsbenachrichtigung an die unten auf dieser Seite angegebene [Kontaktadresse] senden (mailto: [email protected]). . Darüber hinaus unterliegen die Informationen nicht dem Urheberrecht, sondern nur der Ausdrucksweise. Ein bisschen Refactoring und RemovingWordsRunTogetherWikiWikiStyle verbessern diese Antwort und beseitigen das Risiko einer Urheberrechtsverletzung.
Gilles 'SO- hör auf böse zu sein'
1
+ Gute Antwort, aber ich habe ein Problem - Profiler. Es gibt keine Theorie dahinter - nur "allgemeines Wissen". Unter Akademikern wird im Allgemeinen nicht geschätzt, dass es viele Probleme gibt, die sie nicht finden, und eine andere Technik tut dies. Überprüfen Sie diesen Link.
Mike Dunlavey
5

Ich denke, dass Einfachheit und Leichtigkeit des Lernens eines der Hauptkriterien ist. In einem Einführungskurs zur Programmierung möchten wir unnötige Programmierhürden vermeiden und uns so weit wie möglich auf die Prinzipien der Programmierung und algorithmischen Problemlösung konzentrieren. Im ersten Studienjahr fehlt es den Schülern oft an der Fähigkeit, algorithmisch über Probleme nachzudenken. In diesem Kurs geht es also auch darum, algorithmisches Denken zu vermitteln.

Ein weiteres Kriterium ist die Nützlichkeit der Sprache in der Branche. Wir möchten keine Sprache unterrichten, die in der Branche nicht von Nutzen ist. Eine klare Mehrheit der Studenten wird in der Branche arbeiten, daher sollte man ein Auge darauf haben, was in der Branche verwendet wird (und was verwendet wird, wenn die Studenten ihren Abschluss machen).

Das dritte Kriterium wären die Kurse, die die Studenten in späteren Jahren belegen werden. Die Kurse, insbesondere die erforderlichen Kurse, sind nicht auf sich selbst zugeschnitten, sondern in Abstimmung mit anderen Kursen.

Die letzte Antwort, die mir gerade einfällt, ist die gleiche wie die von JMAD. Die Sprache sollte das Erlernen anderer wichtiger Sprachen erleichtern. Es sollte reich genug sein und das Erlernen der späteren wichtigen Sprachen wäre einfach (hier sind wichtige Mittel aus Sicht der Schüler wichtig).

Ich denke, dass viele Universitäten ihre Haupteinführung in den Programmierkurs von Java / C ++ / C auf Python verlagert haben, obwohl sie von Zeit zu Zeit eine Einführung in das Programmieren in anderen Sprachen bieten könnten (häufig für Nicht-Informatik-Hauptfächer, zB C für Elektrotechnik-Hauptfächer). Sie können jedoch flexibel sein, wenn der Kursleiter gelegentlich mit dem Unterrichten einer anderen Sprache experimentieren möchte.

Kaveh
quelle
3
Ich würde den Nutzen in der Industrie in einem Einführungskurs für Programmierer nicht als besonders hoch einschätzen. Ein erfolgreicher Programmierer in freier Wildbahn muss im Laufe seiner Karriere wahrscheinlich eine Reihe von Sprachen lernen, einige davon "on the job". Die Fähigkeit, neue Sprachen zu lernen und zu erlernen, ist daher eine Schlüsselkompetenz, die gelehrt werden muss. Folglich würde ich nicht erwarten, dass die erste Sprache, die in einem Universitätslehrgang unterrichtet wird, bei Abschluss unbedingt die stärkste ist.
Ben
1
@ Ben: Nützlichkeit in der Industrie ist besonders wichtig, wenn die Studenten kein Hauptfach in CS belegen. Wenn ich von vielen Leuten komme, die Biologie oder andere Wissenschaften studieren, und wenn sie keine Zeit haben, viele Sprachen zu lernen, ist es wahrscheinlich sinnvoller, in ihrem Ökosystem etwas Gemeinsames wie Python zu lernen als ML, Java oder C.
hugomg
1
Ich spreche als jemand aus der Industrie (eine bestimmte Branche, die nicht unbedingt repräsentativ ist) und glaube nicht, dass Branchenrelevanz ein Faktor ist, wenn es um zukünftige Tier-1-Programmierer geht. Der Umgang mit mehreren Paradigmen macht Programmierer besser, auch wenn wir in meiner Domäne (eingebettete Programmierung) meistens C verwenden. In einem Handbuch können bestimmte Sprachen erlernt werden, allgemeine Konzepte werden in der Schule besser unterrichtet. Für zufällige Programmierer (z. B. Wissenschaftler) sind die Prioritäten unterschiedlich - aber wenn man sich zu sehr auf Fortran konzentriert, kann man Numpy ignorieren, wenn es das ist, was sie verwenden sollten.
Gilles 'SO - hör auf böse zu sein'
5

Also werde ich sofort auf meine Knie-Ruck-Reaktion verzichten, die besagt , dass jeder das Programmieren über SICP lernen sollte, da Lisp das Richtige ist.

Es wurden bereits viele gute Kriterien für die Auswahl einer Sprache angeboten ... Einfachheit und Portabilität zählen zu den wichtigsten. Ich denke jedoch auch, dass es für Studenten, die noch keine Programmierer sind, wichtig ist, nicht die falsche Vorstellung davon zu bekommen (oder keine Ahnung zu haben), was mit modernen Sprachen hinter den Kulissen passiert.

Obwohl einige dieser anderen Posts hervorragende Kriterien bieten, möchte ich mit einer bestimmten Sprache veranschaulichen, wie die Erfüllung der Kriterien aussieht.

Einige dieser Bedenken wurden in Joel Spolskys Blog-Post The Perils of JavaSchools angesprochen (weitaus besser, als ich es versuchen könnte) . Die Auswahl von Sprachen wie Java oder Python schließt zwei der schwierigsten (und wichtigsten) Konzepte in CS ab. nämlich Zeiger und Rekursion.

Natürlich wird das Unterrichten eines Einführungskurses in C unglaublich dicht sein, und es werden wahrscheinlich auch viele wichtige Konzepte im Zusammenhang mit der Rekursion fehlen. Ebenso muss ein Kurs, der in Lisp unterrichtet wird, Hinweise unter dem Deckmantel enthalten carund cdrwichtige Konzepte in Bezug auf verknüpfte Listen implizieren, wobei die Sprache mit den Details umgehen muss.

Grundsätzlich geht es mir darum, dass die Studierenden die Grundlagen von Datenstrukturen und Algorithmen sowie die praktische Umsetzung verstehen müssen.

Ich bin auch nicht einverstanden mit dem Vorschlag, keine objektorientierte Sprache zu verwenden. Ich denke, der Nutzen objektorientierter Sprachen für die Modellierung der realen Welt ist für neue Programmierer ein positiver Vorteil, solange die Impedanzinkongruenz klargestellt wird und objektorientierte Sprachen ein Paradigma unter vielen sind.

Ich würde vorschlagen, dass Ruby (auch von einem anderen Beitrag als Möglichkeit vorgeschlagen) viele Eigenschaften aufweist, nach denen in einer Sprache gesucht werden muss, die für eine Einführung in den Programmierkurs verwendet werden kann.

Ich werde diese Behauptung vorübergehend rechtfertigen, aber zuerst möchte ich einen Trend kommentieren, der mich in CS-Einführungskursen stört. Ich arbeite an einer Universität, die, wie viele andere Schulen, in letzter Zeit Python für ihre Einführungskurse einsetzt. Ich bin der festen Überzeugung, dass Python das neue BASIC ist, und die Tendenz der Sprache besteht darin, Neufreundlichkeit vor Macht und Ausdruckskraft zu wählen, wie ich kürzlich an anderer Stelle argumentiert habe . Dies ist ein schlechter Service, und wir müssen uns überlegen, zu welchen Programmierern sie werden, nicht zu welchen Newbs sie im Moment gehören.

Wie auch immer, Ruby als einleitende Sprache zu rechtfertigen ...

  • Ruby ist zwar nicht für Tail-Calls optimiert, rekursiv aber recht gut. Das ist es also.
  • Ruby ist ein Multiparadigma. Obwohl es sich um eine reine objektorientierte Sprache handelt, umfasst sie auch die funktionale Programmierung sowie einige zwingende, von C abgeleitete Trainingsräder. Vergleichen Sie dies mit Python, einer prozeduralen Sprache mit etwas aufgesetztem OO (obwohl die Schrauben sichtbar sind) und einigen funktionalen Elementen (die BDFL von Python wiederholt versucht hat, herauszufinden ).
  • CRuby (auch bekannt als MRT oder Ruby Classic) ist in C geschrieben und erweitert. Sie können den Schülern Zeiger, Gedächtnismanagement und den Schreckensgott beibringen, malloc()indem Sie ihnen beibringen , die Sprache in C zu erweitern.
  • Auch wenn es sich um eine dynamische Hochsprache handelt, können Sie viel über Datenstrukturen, -typen usw. lernen. Es gibt Bibliotheken (Edelsteine) für alles, was man sich vorstellen kann, von rotschwarzen Bäumen bis hin zu seltsamen Dingen mit Ententypisierung.

Wie auch immer, es gibt keinen Ersatz für das Erlernen vieler Sprachen, unabhängig davon, ob Sie sie professionell einsetzen oder nicht. Grundsätzlich denke ich, jeder sollte C und Lisp verstehen , wenn nicht sogar verwenden . Ruby ist der beste Kompromiss, den ich mir für ein Einführungssemester vorstellen kann.

Jedenfalls ... das sind meine 0,02 US-Dollar. Ich versuche nicht, Sie davon zu überzeugen, Ruby zu verwenden, wohlgemerkt ... ich verwende es nur als Beispiel für Eigenschaften, nach denen Sie in einer Sprache suchen müssen, um einen Einführungskurs zu unterrichten.

Jason Lewis
quelle
2
"Ich glaube fest daran, dass Python das neue BASIC ist" - kopieren Sie das. "Zwei der schwierigsten (und wichtigsten) Konzepte in CS: Zeiger und Rekursion" - Ich habe noch nie eine Sprache gelernt, die sich explizit mit Zeigern befasst, und ich habe noch nie etwas verpasst. Als ich lernte, wie Compiler funktionieren, wurden Zeiger schnell genug erklärt.
Raphael
Ich stimme zu, dass eine Multi-Paradigmen-Sprache ihren Charme hat (obwohl es besser sein könnte, zwei bis drei "reine" Sprachen zu unterrichten), aber ich werde Ruby aus diesem Grund nicht wählen. Andere Sprachen zu einem besseren Job, imho, insbesondere in Bezug auf die Basisbibliothek. Scala hat zum Beispiel eine ganze Bibliothek unveränderlicher Sammlungen.
Raphael
3
Ich glaube auch, dass Python das neue BASIC ist. Aber warum ist das ein Argument gegen Python?
JeffE
1
@Raphael, Zeiger sind nur dann schwierig, wenn Sie mit C beginnen. Dies zwingt Sie dazu, Zeigern ausgesetzt zu sein, wenn zu viele Dinge nicht erledigt sind und wenn sie eine verwirrende Beziehung zu Arrays haben. Zeiger waren nicht schwer für mich, als ich mir Pascal selbst beibrachte. Zeiger waren nicht schwer für Leute in meiner Klasse, die sie in Algol 68 gelernt haben (sie werden dort als Referenzen bezeichnet, aber sie sind Zeiger mit einem anderen Namen, genau wie in Java; was in Algol 68 schwer ist, sind die automatischen Dereferenzierungsregeln). Zeiger sind mit C ++ nicht einmal schwierig, wenn Sie nicht mit dem Unterrichten der C-Teilmenge beginnen.
AProgrammer
1
@ DaveClarke: Es rückt mit Leerzeichen ein, was diese mehr als wettmacht.
Raphael
5

Meine erste Programmiersprache war eine Spielzeugassemblersprache. Der zweite war Fortran. Zwischendurch wurde mir eine "Algorithmen" -Notation beigebracht, die ungefähr Algol 60 war. Ich stellte mich als ganz ok heraus. In der Tat denke ich, was mir beigebracht wurde, war ziemlich perfekt.

Als ich zum ersten Mal funktionale Programmierung betrachtete, ging ich in Forschungsarbeiten, wenn auch nicht in einer implementierten Sprache, auf "Wow, das ist völlig anders. Es ist ziemlich mathematisch!" Die meisten Leute, denen funktionale Programmierung beigebracht wird, haben immer noch die gleiche Art von "Wow" -Erfahrung. Ich denke, das ist großartig.

Ich denke, Imperative Programmierung und funktionale Programmierung sind zwei völlig unterschiedliche Sichtweisen auf die Welt. Wir würden unseren Schülern keinen Dienst erweisen, wenn wir ihnen diese vielfältigen Erfahrungen rauben würden.

Die beste erste Programmiersprache sollte so einfach wie möglich und so klar wie möglich sein, damit sich die Schüler darauf konzentrieren können, klar zu denken. Leider sind die Einfachheit und Klarheit der Montage von Fortran und Algol 60 von den meisten modernen Programmiersprachen nicht zu übertreffen. Haskell ist eine gute Ausnahme. Aber Haskell würde meine ideale zweite Programmiersprache sein, nicht die erste. Eiffel oder Oberon könnten vielleicht die Rechnung passen.

Uday Reddy
quelle
5

An der North Carolina School für Naturwissenschaften und Mathematik haben wir seit 2004 Schüler in Python eingeführt. Wir verwenden es, um prozedurales Programmieren zu unterrichten, da wir der Meinung sind, dass die Fähigkeit, kurze, korrekte Prozeduren zu schreiben, entscheidend ist, um später mit schwereren Tools, einschließlich OO, fortzufahren Programmierung.

Wir mögen es aus diesen Gründen.

  1. Python ist keine frei formatierbare Sprache. Es zwingt die Schüler, ihren Code in Blöcken mit Einrückungen zu schreiben. (Als technische Anmerkung verwenden wir den VIM-Texteditor und set tabstop=4 set etfügen [ ] in die VIMRC-Datei ein, um störende Probleme zu beseitigen und um sicherzustellen, dass Codeeinrückungen erkennbar sind, aber keine hässlich übermäßige horizontale Abweichung verursachen.) Unsere Schüler haben sich daran gewöhnt, die hierarchische Struktur von Programmen zu sehen, die durch Leerzeichen begrenzt sind. Infolgedessen sind ihre Formatierungsgewohnheiten tendenziell sehr gut, da sie in anderen Sprachen programmieren.

  2. Pythons syntaktische Einfachheit macht es anfängerfreundlich. Einfache Programme können mit einem Minimum an geheimen Schlüsselwörtern und magischen Beschwörungen geschrieben werden. Wir möchten, dass Schüler, die normalerweise nicht an Programmierung denken, es versuchen. Beachten Sie die schöne Einfachheit von Python hello.py; es ist glasklar, was passiert.

  3. Python wird dynamisch und Ente getippt. Dies erleichtert das Einfügen von Variablen. Ich sage meinen Schülern, dass Variablen nur Bezeichnungen sind. Sie zeigen auf Objekte. Sie senden eine Nachricht unter Verwendung des Variablennamens an ein Objekt, so wie jemand Ihnen eine Nachricht sendet, indem er Sie auf dem Telefon anruft.

  4. Python ist ein Tool, aus dem ambitionierte Schüler nicht herauswachsen können. Es hat ausgefeilte Bibliotheken, die viele nützliche Dinge enthalten. Es ist ein leistungsfähiges kreatives Werkzeug, das Anfängern zugänglich ist.

  5. Python ist kostenlos und läuft auf allen gängigen Plattformen. Unsere Schule ist eine heterogene Betriebssystemumgebung mit allen Arten von Maschinen. Über Kopfschmerzen wie Kompatibilitätsprobleme müssen wir uns keine Gedanken machen. Es läuft auf nahezu jedem Computer.

  6. Python hat eine hervorragende Dokumentation. Wir ermutigen unsere Schüler, außerhalb der Linien zu forschen, zu basteln und zu färben. Sie lernen frühzeitig, wie man Python-Dokumentation einsetzt, und erkunden häufig coole Dinge außerhalb des Unterrichts.

Wir waren sehr zufrieden mit Python.

ncmathsadist
quelle
1
Herzlich willkommen! Dies ist eine schöne Fallstudie, die jedoch wenig dazu beiträgt, die Frage nach den Auswahlkriterien zu beantworten, imho. Wenn Sie Ihre Artikel rückwärts lesen, können Sie das tun, aber ich bin mir nicht sicher, ob Sie das so beabsichtigt haben.
Raphael
Es war keine bestimmte Reihenfolge vorgesehen. Es ist ein "und".
ncmathsadist
3

Ich würde sagen, dass die Sprache (unter gewissen Einschränkungen) nicht so wichtig ist wie das, was Sie mit der Sprache machen. Sie können in den meisten Sprachen dasselbe über Softwareentwicklung, Algorithmen, objektorientierte Programmierung, Computerhardware usw. lernen. Der Schlüssel ist, etwas Interessantes zu entwickeln, das all diese Konzepte nutzt.

(migrierte Antwort von https://cs.stackexchange.com/questions/1946/criteria-for-choosing-a-first-programming-language/ )

utdiscant
quelle
1

TL; DR: Es gibt keine Möglichkeit, dies objektiv zu beantworten, da es keine objektive Grundlage für die dahinter stehenden Kriterien gibt. Es ist so willkürlich wie zu diskutieren, ob Blau objektiv eine "bessere" Farbe als Rot ist oder ob Vanilleeis objektiv "schmackhafter" als Schokolade ist.


Ich denke, es gibt einige wunderbare Beiträge, aber ich werde meine eigenen 2 Cent hinzufügen.

Nach welchen objektiven Kriterien kann ein Pädagoge eine Programmiersprache auswählen, die als Grundlage für einen Programmierkurs an einer Universität im ersten Jahr dienen soll?

Diese Frage ist vergleichbar mit der Frage, ob es eine Möglichkeit gibt, objektiv den ersten Eisgeschmack auszuwählen, den ein anderer probieren sollte, wenn er zum ersten Mal eine Eisdiele besucht. Nein, es gibt keinen objektiven Weg, etwas zu wählen, das von Natur aus subjektiv ist .

Warum? Denn selbst wenn wir uns die vernünftigen Kriterien ansehen, die in Pedros Antwort genannt werden , wird jeder eine subjektive Meinung darüber haben, wie jeder Faktor gegen die Ansichten eines anderen "hält".

Ist Ruby zum Beispiel objektiv "einfacher" als Python? Einfacher in welchem ​​Sinne? In Bezug auf was? Was bedeutet für Sie "einfacher" ? Bedeutet das "weniger Codezeilen"? Bedeutet es "leichter zu lesen und zu verstehen"? Was ist mit anderen Warum sollte sich hier jemand mit einer bestimmten Auswahl einverstanden erklären? Ich glaube nicht, dass wir diese Frage objektiv beantworten können .

Dies führt zur nächsten Frage.

Was ist die Basis für diese Kriterien?

So vernünftig einige Kriterien auch sein mögen, ich denke, dies beruht mehr auf subjektiven Vorlieben als auf irgendetwas anderem. Zum Beispiel gibt es keinen Grund, warum ich einfach die Kriterien von Pedro für Einfachheit , Eindeutigkeit , Portabilität und Branchenpräferenz akzeptieren sollte - unabhängig davon, wie vernünftig manche meinen. In der Tat, die Industrie bevorzugt ist definitionsgemäß subjektiv und würde einfach zu einem Teufelskreis führen. (Jeder wird darin geschult, also verwendet jeder es in der Industrie, weshalb jeder darin geschult wird, ...)

Zum Beispiel, warum nicht

  • Effizienz: Ausführungszeiten und Speicherbedarf können tatsächlich gemessen werden.
  • Größe: Die geringstmögliche Anzahl reservierter Wörter würde das Erlernen der Sprache erleichtern.
  • Funktionsumfang: Ein breiterer Satz unterstützter Funktionen (z. B. Lambdas, Generika, Objektorientierung, Überladen von Operatoren usw.) würde es Ihnen ermöglichen, mehr Konzepte zu unterrichten, ohne die Sprache wechseln zu müssen und auf die erste Stufe zurückzukehren.
  • Interoperabilität: Eine Sprache, die die Arbeit mit anderen Sprachen und systemeigenen Systemen erleichtert (z. B. Win32-API von C # oder Python usw.), könnte als bessere langfristige Investition usw. in Betracht gezogen werden.

Der Punkt ist, dass ich mir zwar andere Bewertungskriterien ausdenken und diese dennoch als angemessen erachten könnte, wir aber nicht behaupten können, dass sie denjenigen anderer objektiv überlegen / unterlegen sind.

Zusammenfassend gibt es keine objektive Grundlage für die Kriterien. Es ist so willkürlich wie zu diskutieren, ob Blau objektiv eine "bessere" Farbe als Rot ist oder ob Vanilleeis objektiv schmackhafter als Schokolade ist.

Das heißt nicht, dass Sie keine guten Gründe haben können , Ihre Präferenzen zu rechtfertigen, aber am Ende des Tages sind es nur Ihre Präferenzen.

code_dredd
quelle