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 .