it-swarm-eu.dev

Warum ist Scheme meine Muttersprache an der Universität?

Ich höre jeden Tag von C, C++, Java, wenn Leute anfangen, über Informatik zu sprechen, aber in meinem ersten Informatikkurs werden wir gebeten, in Schema (DrRacket) zu schreiben.

Warum ist das so?

Welche Unterschiede wird dies für mein zukünftiges Verständnis der Programmierung bedeuten?

UPDATE: Ich habe meine erste Amtszeit beendet, aber noch nicht vollständig mit Scheme fertig. In meinem zweiten Semester (das jetzt ist) haben wir uns mit C-Programmierung befasst. Anfangs war es frustriert, Hinweise zu lernen, aber jetzt geht es mir viel besser.

Es gibt nicht viel mehr zu sagen. Ich versuche mir selbst beizubringen Java (oder C++?) Für den Teil OOP, den ich vermisse. Bisher gefällt mir die funktionale Programmierung am besten Lambda ist einfach faszinierend. :)

81
Erica Xu

Klingt nach einer großartigen Schule! LISP-Dialekte folgen dem mathematischen Paradigma der Algorithmen viel genauer. Sie zwingen Programmierer, die Rekursion und den Funktionsstil zu lernen. Das ist eine ausgezeichnete Erfahrung. Ihre Schule befindet sich in den Reihen des MIT, das immer noch Abelson und Sussman für die erforderliche CS 6.001 verwendet.

Möglicherweise finden Sie dieser Artikel ermutigend und hilfreich für das Verständnis des Problems.

91
Jonathan Henson

Niemand erwartet, dass Sie als Neuling die Sprache jede beherrschen, um einen richtigen Job zu bekommen. Warum also nicht mit einer anfangen, die leicht zu erlernen ist? Die Erwartung, dass Anfänger das Programmieren lernen, indem sie eine professionelle Sprache in einer professionellen Sprache verwenden IDE) ist so, als würde man einem Medizinstudenten im ersten Jahr ein Skalpell geben und sie an lebenden Körpern arbeiten lassen.

Mach dir keine Sorgen; Sie werden schließlich Java/C/C++ lernen, wahrscheinlich ab Ihrem zweiten Jahr. Wenn Sie angefangen haben zu lernen Java 6 jetzt, wenn Sie Ihren Abschluss machen Java 8 wird aus sein. Oder es wurde durch Python ersetzt. Oder eine andere Sprache Das wurde noch nicht erfunden, erobert aber die Branche im Sturm. Es ist besser, das Erlernen der "beliebten" Dinge so lange wie möglich zu verschieben, damit es nicht veraltet ist, wenn Sie in der Belegschaft aussteigen.

Mit Scheme/Racket können Sie sich auf die wichtigen Konzepte konzentrieren: Algorithmusdesign, Datenstrukturen und Informationsmanipulation. Weißt du, das Zeug, das allen Sprachen gemeinsam ist.

37
Barry Brown

Herzlichen Glückwunsch, Sie werden jetzt zum Äquivalent eines Veganers in der Computerwelt, und in zwei Jahren werden Sie keine Diskussion mehr beenden können, ohne die Leute darüber zu informieren der höhere moralische Grund , auf dem du stehst. ;)

Wie auch immer, du hast eine sehr gute Schule bekommen. Schulen, die nicht von der Industrie ausgepeitscht sind , sind gut.
Wie jemand anderes sagte, lehren sie Ihnen die Wissenschaft, aus der Sie das Handwerk ableiten .

Viele schlechte Code-Affenfarmen bringen Ihnen das Handwerk bei, und dann können Sie die Wissenschaft daraus ableiten, aber es ist nicht garantiert. (und Sie können mit ziemlich seltsamen Missverständnissen darüber enden)

Wie auch immer, als geehrtes Mitglied der funktionalen Menge werden Sie immer das Gefühl haben, missverstanden zu werden und unterschätzt .

Was, lassen Sie es uns zugeben, für den durchschnittlichen Computer-Assistenten nichts Neues ist.

Sie haben jetzt ein hohes Risiko für:

  • versuchen, in eine akademische Karriere abzuschließen ,
  • begeben Sie sich auf die Suche nach einem [~ # ~] phd [~ # ~] ,
  • ... emacs .

Sie werden wahrscheinlich auch Open Source mögen, aber Sie werden nie genug Mitarbeiter für Ihre funktionalen Projekte finden.

36
ZJR

Welche Unterschiede wird dies für mein zukünftiges Verständnis der Programmierung bedeuten?

Das ist ein bisschen so, als würde man fragen, wie das Lesen von Shakespeare Ihnen beim Schreiben von Hausarbeiten hilft. Das Programmieren (in jeder Sprache) ist nur ein Mittel, um Ihre Ideen in ausführbarer Form auszudrücken. Die Informatik liefert die konzeptionellen Bausteine, die Ihnen etwas Interessantes zu sagen geben. Die Schemasyntax ist relativ einfach, sodass Sie schnell und ohne viele Compilerfehler, Standardbibliotheken usw. auf interessante Ideen zugreifen können.

Achten Sie im Unterricht genau darauf - Sie werden in diesem Semester viele interessante Dinge lernen.

23
Caleb

Es scheint, als wären Sie sehr neu in der Programmierung und haben überhaupt keine Vorkenntnisse. Hier sind einige Klarstellungen:

Warum Schema und nicht C/C++/Java ...?

Wenn Sie eine Programmiersprache lernen (eine Analogie könnte mit der englischen Sprache hergestellt werden), lernen Sie die Syntax, die Sie befolgen müssen, damit Ihr Code gramatisch korrekt ist. Eine Sprache lehrt Sie jedoch nicht die Logik hinter dem Lösen von Problemen. Um diese Logik zu lernen, lernen Sie verschiedene Programmierparadigmen.

Jede Sprache kann ein oder mehrere Paradigmen (mehr oder weniger genau) implementieren. Ein Paradigma ist eine Möglichkeit, Ihre Logik zu strukturieren, und das von Scheme implementierte Paradigma heißt Functional Programming (FP).

Die eigentliche Frage, die Sie stellen, lautet also: Warum FP?

Wie Sie bereits erwähnt haben, sind C, C++ und Java (die FP nicht implementieren) weitaus beliebter. Tatsächlich (und aus verschiedenen Gründen hat jeder seine Meinung) ist FP in der Branche nicht sehr beliebt.

Andererseits wird FP in akademischen Kreisen sehr geschätzt. Es ist näher am gängigen mathematischen Ansatz, konzentriert sich mehr auf die Beweisbarkeit und Optimierung von Algorithmen, und die meisten Leute werden zustimmen, dass es Sie im Allgemeinen zu einem besseren Programmierer machen würde.

Es ist ähnlich wie in Schulen, die Latein unterrichten, um englische Literatur zu lernen.

14
rahmu

Du sollst lernen wie programmiert wird und was die Grundkonzepte sind. Die in den meisten Unternehmen verwendeten Alltagssprachen eignen sich möglicherweise gut für die Erstellung der heute benötigten Software, sind jedoch nicht unbedingt am besten für nterrichten Sie die Grundlagen der Programmierung geeignet.

Sobald Sie die Konzepte verstanden haben, können Sie sie problemlos auf andere Sprachen anwenden.

11
perdian

Wenn Sie mit DrRacket lernen, verwenden Sie bestimmt auch den Lehrplan zum Entwerfen von Programmen.

Hier ist, was einer der (zugegebenermaßen voreingenommenen) Autoren von HtDP zu sagen darüber, wie das Lehrprogramm Studenten an der Northeastern University auf das kooperative Bildungsprogramm ("koop") vorbereitet hat: Studenten wechseln ihre akademischen Semester ab Studium mit Vollzeitbeschäftigungssemestern).

Vor meiner Ankunft hatte Northeastern zwei Jahrzehnte lang einen Standardlehrplan verwendet: drei Begriffe der derzeit modischen Sprache (Pascal, C++, Java), wobei eine Reihe äußerst grafikreicher Übungen verwendet wurden, die mit Lektionen über praktische Anwendungen verknüpft waren. Der Lehrplan wurde in SIGCSE und verwandten Communities weit verbreitet, funktionierte jedoch nicht. Auf dem Höhepunkt der Webblase erhielt nur etwa ein Drittel der Schüler Programmiergenossenschaften; Die meisten anderen wurden zu „Technikfreaks“, wie sie sich selbst nannten: Computer bewegen, Skripte ausführen, Router und Netzwerke einrichten usw. Und all diese Schulungen kosten 150.000 US-Dollar Unterricht.

Nach einem Jahr im Nordosten bat mich unser Dekan, den ersten Kurs zu übernehmen. Die erste Instanz war ein Erfolg - entgegen den Vorhersagen einiger lokaler Fakultäten. Obwohl es sich um eine Testversion handelte, haben wir auf das TeachScheme umgestellt! Lehrplan dauerhaft; Der Dekan schlug vor, einen Brückenkurs zu entwerfen, um den HtDP-Kurs mit dem Rest des Lehrplans zu verbinden. Damit begann meine Zusammenarbeit bei HtDC mit Viera Proulx. Siehe das Postskriptum unten. Innerhalb weniger Jahre hörte ich von unserer Genossenschaftsfakultät, dass der Anteil der Programmierpositionen zunahm. Bis 2007 - das letzte Mal, als ich an dem Kurs beteiligt war - wurde mir mitgeteilt, dass das Programmierverhältnis beim ersten Koop auf zwei Drittel und mehr gestiegen sei. In der Zwischenzeit alle TeachScheme! Die Kurse wurden von zahlreichen Fakultätsmitgliedern mit anderen Unterrichtsstilen und Persönlichkeiten als meinen eigenen unterrichtet. Das Verhältnis der Programmkooperationen ist auf drei Viertel und mehr gestiegen, und alle nachgelagerten Fakultäten freuen sich über die Programmierkenntnisse der Studenten.

Bearbeiten: Für diejenigen, die sich sehr für das Rationale hinter dem Lehrplan interessieren, hier die Erklärung des Hauptarchitekten - http://www.youtube.com/watch? v = m3be1PHW5X

9
pidge

Meine Schule begann auch mit Scheme. Ein Grund, der erwähnt wurde, war, dass dies dazu beitrug, die Wettbewerbsbedingungen zu verbessern. Die meisten Comp Sci im ersten Jahr sind möglicherweise einigen oder vielen gängigen Sprachen ausgesetzt. Es war weniger wahrscheinlich, dass jemand viel Wissen über das Schema hatte.

6
dark fader

Da LISP (Schema ist ein Dialekt) die Grande Dame der funktionalen Sprachen ist (denken Sie an F #, Groovy, Clojure, Haskell usw.), führt dieses Training auch zu keinem kommerziellen Nachteil, da dies das heißeste ist Thema auf dem Entwicklungsblock im Moment.

6
adrianmcmenamin

Das Schema wird Ihnen helfen, gut zu werden und richtig zu denken, um funktionale Programmiersprachen zu verwenden. Scala zum Beispiel ist ein Functional/OO-Hybrid, der ziemlich brillant ist, wenn auch etwas dicht. Sprachen wie diese markieren jedoch die Zukunft - hoffentlich.

LISP-ähnliche Sprachen haben jedoch eine Reinheit und Einfachheit in ihrem Design, die sie für den Unterricht etwas einfacher machen. Der schöne Vorteil ist jedoch, dass Sie es viel einfacher haben, etwas wie Scala danach zu lernen) zu lernen.

4
egervari

Wir haben das Programm in der ersten und ersten Hälfte des zweiten Semesters abgeschlossen. Erst als wir uns an die Arbeit mit C machten, begann ich, die Kraft von Scheme zu erkennen.

Was Ihre Frage betrifft, warum das Schema gewählt wurde: Die Antwort lautet, dass es eine der einfachsten Sprachen auf dem Markt ist und es Ihnen ermöglicht, viel zu tun (insbesondere, wenn wir später anfangen, mit faulen Listen zu spielen). Außerdem :

  1. Für Leute, die keine Programmiererfahrung haben, ist es einfacher zu lernen. Es gibt nicht viele technische Details und nur einige spezielle Formulare.
  2. Es ermöglicht eine Abstraktion auf höherer Ebene. Ein guter Kurs kann sich darauf konzentrieren, Programmierern das Denken beizubringen, anstatt sich auf die technischen Details zu konzentrieren, die es den Schülern ermöglichen, bessere Programmierer zu werden.
  3. Die Listen sind unglaublich. Es gibt so viel, was man damit machen kann. Auto und CDR erweisen sich als leistungsstarke Werkzeuge, und erst wenn Sie mit Zeigern arbeiten, stellen Sie fest, dass Scheme beim Umgang mit Listen erstaunlich war.
3
Avian78