web-dev-qa-db-ja.com

なぜ、Schemeが大学の第一言語なのですか?

C、C++についてJava人々がコンピューターサイエンスについて話し始めるたびに毎日聞いていますが、私の最初のコンピューターサイエンスクラスでは、Scheme(DrRacket)で書くように求められます。

何故ですか?

これは私のプログラミングの理解にどのような違いをもたらしますか?

更新:私は最初の学期を終えましたが、Schemeを完全に終えていません。私の2期目(今)は、Cプログラミングに入りました。最初はポインターを学ぶのにイライラしていましたが、今ではずっと気分が良くなりました。

それ以上に言うべきことはありません。 Java(またはC++?)OOP欠けている部分を教えます。これまでのところ、関数型プログラミングが一番好きです。 。ラムダは魅力的です:)

81
Erica Xu

素晴らしい学校のようですね。 LISP方言は、アルゴリズムの数学的パラダイムに非常に厳密に従っています。それらはプログラマに再帰と関数型スタイルを学ぶことを強います。これは素晴らしい経験です。あなたの学校はMITと同じランクにあり、必要なCS 6.001には Abelson and Sussman を使用しています。

あなたは この記事 が問題を理解するのに励みになり、役立つかもしれません。

91
Jonathan Henson

新入生として、あなたはany言語に堪能で実際の仕事に就けるとは誰も予想していません。簡単に習得できるものから始めてみませんか?初心者がプロでプロの言語を使用してプログラミングを学ぶことを期待するIDEは、1年生の医学生にメスを与え、彼らに生体で作業させるようなものです。

心配しないでください。最終的には、おそらく2年目からJava/C/C++を学びます。学習を始めた場合Java 6、卒業するまでにJava 8は廃止されます。またはPythonに置き換えられます。または他の言語それはまだ発明されていませんが、業界を席巻します。「人気のある」ものの学習をできるだけ長く延期して、従業員の外に出ても時代遅れにならないようにすることをお勧めします。

Scheme/Racketは、アルゴリズム設計、データ構造、情報操作などの重要な概念に集中するのに役立ちます。ご存知のとおり、すべての言語に共通するものです。

37
Barry Brown

おめでとうございます。これで、コンピュータの世界ではveganに相当するものになりました。2年後には、人々にについて知らせずに議論を終えることはできなくなります。より高い道徳的根拠あなたは立ち上がる。 ;)

とにかく、あなたはとても良い学校に着きました。 業界でホイップされていない学校は良いです。
他の誰かが言ったように、彼らは技術を教え、そこから技術を導き出します

多くの悪いcode-monkey-farmsがあなたに技術を教えてくれ、それから科学を推論するかもしれませんが、それは保証されていません。 (そして、あなたはそれについてかなり奇妙な誤解で終わるかもしれません)

とにかく、機能的な群衆の名誉あるメンバーとして、そこから出ると、常にmisunderstood過小評価

それを認めましょう。平均的なコンピューターウィズは新しいものではないからです。

あなたは今、次のような高いリスクにさらされています:

  • 学歴に包み込もうとする、
  • [〜#〜] phd [〜#〜]の追求に乗り出す
  • ...emacs

また、おそらくオープンソースが好きですが、機能プロジェクトに十分な協力者を見つけることはできません。

36
ZJR

これは私のプログラミングの理解にどのような違いをもたらしますか?

これは、シェイクスピアを読んで学期末の論文を書くのにどのように役立つかを尋ねるようなものです。プログラミング(任意の言語)は、アイデアを実行可能な形式で表現するための手段にすぎません。コンピュータサイエンスは、あなたに何か面白いことを言う概念ブロックを提供します。 Schemeの構文は比較的単純なので、多くのコンパイラエラーや標準ライブラリなどに遭遇することなく、興味深いアイデアをすばやく見つけることができます。

クラスで細心の注意を払ってください-あなたは今学期にたくさんの興味深いことを学びます。

23
Caleb

あなたは、プログラミングの経験がまったくないプログラミングに非常に慣れているようです。だからここにいくつかの明確化があります:

C/C++/Javaではなく、Schemeを使用する理由...?

プログラミング言語を学ぶとき(英語で類推することができます)、あなたはsyntaxを学ぶあなたはあなたのコードが文法的に正しいように従う必要があります。しかし、言語はあなたに問題を解決することの背後にあるlogicを教えません。そのロジックを学ぶために、さまざまなプログラミングパラダイムを学びます。

各言語は1つ以上のパラダイムを(多かれ少なかれ正確に)実装できます。パラダイムはロジックを構造化する方法であり、Schemeによって実装されるパラダイムはFunctional Programming(FP)と呼ばれます。

だからあなたが尋ねている本当の質問は:なぜFPなのか?

おっしゃったように、C、C++およびJava(FPを実装していない)の方がはるかに人気があります。事実として(そしてさまざまな理由で、誰もが意見を持っています)FPは業界ではあまり人気がありません。

一方、FPは学界で非常に高く評価されています。それは一般的な数学的アプローチに近く、アルゴリズムの証明可能性と最適化により重点を置いており、ほとんどの人はそれが一般的にあなたをより良いプログラマーにすることに同意するでしょう。

英語の文学を学ぶためにラテン語を教える学校に似ています。

14
rahmu

あなたはhowプログラミングが行われていること、そして基本的な概念が何であるかを学ぶことになっています。ほとんどのビジネスで使用されている日常の言語は、今日必要なソフトウェアの作成には適しているかもしれませんが、プログラミングの基礎--teachingには必ずしも最適ではありません。

概念を理解したら、それらを他の言語に適用するのは簡単です。

11
perdian

DrRacketで学習している場合は、プログラムの設計方法のカリキュラムも使用していると思います。

これは、HtDPの(確かに偏った)著者の1人です 言わなければなりません 教育計画がどのようにノースイースタン大学の共同教育プログラム(「生協」)の学部生を準備したかについて:学生は学術の代替学期フルタイムの学期での研究)。

私が到着する前は、Northeasternは20年間標準カリキュラムを使用していました。現在ファッショナブルな言語の3つの用語(Pascal、C++、Java)で、実用的なアプリケーションのレッスンと絡み合った非常にグラフィックの豊富な演習を使用しています。カリキュラムはSIGCSEおよび関連コミュニティで広く公開されていましたが、機能しませんでした。 Webバブルの最盛期では、学生の約3分の1のみがプログラミング協同組合を利用しました。他のほとんどは、コンピュータの移動、スクリプトの実行、ルーターとネットワークのセットアップなど、彼ら自身が言ったように「技術」として終了しました。そして、この教育のすべてに$ 150,000の授業料がかかります。

Northeasternで1年後、学部長から最初のコースを引き継ぐように依頼されました。最初の例は成功でした-地元の教員からの予測に反して。試用版と見なされていましたが、TeachSchemeに切り替えました!恒久的にカリキュラム。学部長は、HtDPコースを残りのカリキュラムに接続するブリッジコースを設計することを提案しました。これにより、HtDCとViera Proulxのコラボレーションが始まりました。以下の追記を参照してください。数年以内に、私は協同組合の教員からプログラミングポジションのシェアが上昇していることを聞き始めました。 2007年までに、最後にコースに参加したとき、最初の生協でのプログラミングの比率は3分の2以上に上昇したと言われました。その間、すべてのTeachScheme!コースは、私とはかなり異なる教育スタイルと性格を持つ多くの教員によって教えられてきました。プログラミング協同組合の比率は4分の3以上に増えており、下流のすべての教員は学生のプログラミングスキルに満足しています。

編集:カリキュラムの背後にある合理性に非常に興味がある人のために、ここに主な建築家の説明があります- http://www.youtube.com/watch?v = m3be1PHW5X

9
pidge

私の学校もSchemeから始めました。言及された理由の1つは、これが競争の平準化に役立ったことです。ほとんどの1年目のComp Sciは、より一般的な言語にいくらか、または多くさらされている可能性があります。誰もがSchemeについて多くの知識を持っていることはほとんどありませんでした。

6
dark fader

実際、LISP(Schemeは方言)は関数型言語のグランデダム(F#、Groovy、Clojure、Haskellなどと考えてください)なので、このトレーニングは最もホットなので、商業的な不利な点はありません。現在の開発ブロックに関するトピック。

6
adrianmcmenamin

Schemeは、関数型プログラミング言語を正しく使用し、適切な方法で考えるのに役立ちます。 Scalaたとえば、Functional/OOハイブリッドは、少し密度は高いですが、非常に優れています。このような言語は未来を示していますが、うまくいけば。

LISPに似た言語は、デザインが純粋で単純であるため、教えるのが少し簡単になります。しかし、すばらしい利点は、Scalaのようなものを後で学習する時間がはるかに簡単になることです。

4
egervari

2学期前半と前半にSchemeを修了しました。私が実際にCとの作業に取り掛かるまで、Schemeの力を理解し始めませんでした。

あなたの質問について、Schemeが選ばれた理由:答えは、それが世の中で最も単純な言語の1つであり、それによって多くのことができるようになるということです(特に、後で遅延リストを使ってプレイする場合)。さらに:

  1. プログラミングの経験がない人にとっては、学ぶ方が簡単です。技術的な詳細はそれほど多くなく、特別なフォームはいくつかあります。
  2. それはより高いレベルの抽象化を可能にします。優れたコースでは、学生がより優れたプログラマーになるための技術的な詳細に焦点を当てるのではなく、プログラマーに考え方を教えることに焦点を当てることができます。
  3. リストは素晴らしいです。あなたがそれらを使ってできるほどたくさんあります。 Carとcdrは強力なツールであることがわかります。ポインタを操作し始めて初めて、Schemeがリストの処理に優れていることがわかります。
3
Avian78