Warum ist die c-Familie das Standard-CS-Studienregiment für Mathematik- / CS-Programme anstelle der LISP-Familie? [geschlossen]

14

Ich habe mich mit LISP vertraut gemacht, um mich zu verbessern. Eines der Dinge, die mir aufgefallen sind, ist, dass LISP viel mehr dem Paradigma der Mathematik entspricht als etwa C. Die Syntax und die Entwurfsstruktur scheinen das tatsächliche mathematische Modell eines Algorithmus direkt wiederzugeben. Es macht für mich keinen Sinn, warum auch gute mathematikbasierte CS-Programme C statt LISP studieren. Ich denke, dass LISP direkter höhere mathematische Konzepte verwendet als C. Ich sage nicht, dass Sie mathematische Strukturen in C nicht modellieren können. Ich stelle lediglich fest, dass LISP für Mathematiker fest verdrahtet zu sein scheint.

Ich habe viele von Joel Spolskys Beschimpfungen in den JAVA-Schulen gelesen und was nicht - und ich stimme seiner Einschätzung zu -, aber meine Schule unterrichtete JAVA aus genau diesem Grund nicht. Sie waren strikt darin, grundlegende Konzepte wie Zeiger, Algorithmusdesign, Rekursion und sogar Montageanweisungen zu vermitteln. Sie haben dies jedoch alles in C und C ++ getan. Kennt jemand die Gründe dafür und / oder seine Geschichte?

Jonathan Henson
quelle
Letztendlich sollte ein Informatik-Abschluss in gewissem Maße sprachunabhängig sein. Die Idee eines CS ist, dass er / sie in der Lage sein sollte, jede neue Sprache zu lernen, da Informatik theoretisch ist. Nach außen hin scheint CS das All-Inclusive zu sein. Lernen Sie, wie man ein Programmierer und ein Wissenschaftler ist. Dies ist nicht der Fall. Das Erlernen einer Sprache ist das, worum es bei CS geht.
Chris
2
Ähnlich wie LISP "das tatsächliche mathematische Modell eines Algorithmus wiedergibt", gibt C die tatsächliche Struktur der Hardware wieder und es ist unkompliziert, wie Konstrukte in C dem Speicher zugeordnet werden (was natürlich besonders für eingebettete Systeme nützlich ist). Ich stimme Ihnen jedoch voll und ganz zu. Ich hätte mich über weitere Studienleistungen in LISP sehr
Bill VB vom

Antworten:

13

IN ORDNUNG. Die langweilige Antwort ist also, dass die meisten Schulen am Ende lehren, was die Professoren mögen, und die meisten Professoren sind nicht mit Lisp aufgewachsen. Sie verbrachten ihre ersten Jahre auf dem Gebiet der Algol-basierten Sprachen. Aus diesem Grund werden Sie Jahre später, wenn sie Lehrpläne erstellen, mit Schulen konfrontiert, die CS mit einer Grundlage in Pascal, C, C ++ und Java unterrichten.

Dann haben Sie Schulen, die eine Stufe niedriger und einige Jahre jünger sind. Und sie schauen auf die Messlatte, die von den vorausschauenden Schulen festgelegt wurde, und sie sehen, dass die Schüler diese Schulen verlassen und C kennen, und dass ihre eigenen Schüler dasselbe erwarten - also beginnen sie mit dem Unterrichten von C, dann C ++ Java.

Schließlich haben Sie einige der technischen oder "unteren" Einrichtungen, die einfach lehren, welche Art von Technologie zu den Stichwörtern passt, die die Studenten in ihren Lebensläufen haben möchten - Sie erhalten also so ziemlich nur Java.

That being said, einige Schulen tun lehren Lisp, obwohl es eher eine Wahl sein kann als eine grundlegende Sprache. Sogar die Schulen, die Lisp nicht als eigenständige Sprache unterrichten, verwenden es ausgiebig in AI-Kursen, sodass Anfänger-AI-Kurse eine Konzentration auf den Beginn der Lisp-Programmierung erhalten.

Andrey Butov
quelle
2
Ich höre dich. Keine Respektlosigkeit gegenüber C und C ++, sie waren während meiner gesamten Karriere meine bevorzugte Sprache, aber LISP wäre ein viel besseres Lehrmittel für Mathematikstudenten als C. C ist eine großartige Sprache, und auf jeden Fall würde ich niemals jemanden einstellen wer wusste es nicht, aber der Zweck eines CS-Abschlusses ist nicht technische Feldausbildung, es ist die Konzepte der Mathematik und Informatik zu meistern. LISP scheint für diesen Zweck viel besser geeignet zu sein.
Jonathan Henson
Ich denke, beide haben ihren Platz, und Universitäten können von einer theoretischeren / akademischeren Ausbildung zu einem CS-Abschluss profitieren, bei dem Sie Ihren Verstand erweitern. Dieser Track sollte eine schöne Auswahl an Sprachen enthalten, einschließlich Lisp, Prolog, Algol usw., und einen Track, der auf der Praxis basiert und sich auf das konzentriert, was auch immer der praktische Geschmack des Tages ist.
Andrey Butov
@ Jonathan Henson: Genau richtig!
Chris
9

Das hängt wirklich von der Universität ab. Schema (ein Dialekt von Lisp) ist seit langem die Sprache für den Einführungskurs in die Informatik am MIT, obwohl es kürzlich durch Python ersetzt wurde. Ich habe meinen BS in CS an einer Ingenieurschule gemacht, wo ich in meinem ersten Jahr mit C, Scheme, Prolog und C ++ in Berührung gekommen bin. Ich denke das war eine gute Mischung.

Ich bin der festen Überzeugung, dass die Sprache, mit der Sie anfangen, viel weniger wichtig ist, als sich früh mehreren Paradigmen auszusetzen, bevor Ihr Gehirn zu einer Art der Sichtweise auf die Welt erstarrt.

Dima
quelle
1

Grundsätzlich ist die Informatiktheorie mathematisch. Software-Engineering ist dies jedoch nicht. Mathematische Konzepte direkt zu modellieren ist kein inhärenter Vorteil - ich würde behaupten, es kann oft ein Nachteil sein.

Gute Theorien und gute Programme sind nicht unbedingt miteinander verbunden.

DeadMG
quelle
"Gute Theorien und gute Programme hängen nicht unbedingt zusammen.": Beim Programmieren geht es darum, Abstraktionen zu erstellen und zu kombinieren, die Probleme lösen. Und laut Wikipedia ist "Theorie eine ... Art abstraktes oder generalisierendes Denken oder die Ergebnisse eines solchen Denkens." ( de.wikipedia.org/wiki/Theory ) Theorie und (gute) Programmierung liegen also wirklich sehr nahe beieinander.
Giorgio