Schemeが大学の第一言語であるのはなぜですか?


80

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

何故ですか?

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

更新:最初の任期は終了しましたが、Schemeで完全には完了していません。2番目の用語(現在)では、Cプログラミングに取り組みました。最初はポインターを覚えるのはいらいらしていましたが、今では気分が良くなりました。

それ以上のことは言いません。私は私が行方不明になっているOOP部分のためにJava(またはC ++?)を自分で教えようとしています。これまでのところ、私はまだ関数型プログラミングが最も好きです。ラムダはただ魅力的です。:)


148
おめでとうございます、実際にコンピューターサイエンスを教えようとしている数少ない学校の1つに行くようです。第一言語としての学習スキーム(IMO)は非常に良いことです。いいえ、他の多くの製品ほど商業的ではありませんが、コンピューターサイエンスの真の本質を学ぶための優れた言語です。
ジェリーCo

21
C、C ++、およびJavaは、コンピューターサイエンスの産業副産物です。Schemeのルーツはすべてコンピューターサイエンスにあります。商業用の言語は、マクドナルドが料理に関係するのと同じくらいコンピュータサイエンスに関係しています。
ジェイソンTrue

33
これらの人は正しいです。あなたはコンピュータープログラミングコンピューターサイエンスを混同しています -ダイクストラが言ったように、それは天体と望遠鏡の構造を混同するようなものです。Schemeはコンピューターサイエンスの基本的な概念を学ぶための最高の言語です。コンピューターサイエンスの学位を取得するのが、Javaで基幹業務アプリを作成する方法を学ぶことであると期待している場合、間違ったプログラムに登録されている可能性があります。
エリックリッパー

29
動物学コースは、象の失速アウトマックする方法ではなく、進化生物学、解剖学、動物行動を教えるのと同じ理由
JKを。

4
Schemeの基本構文を理解した上で足を踏み入れたら、「The Little Schemer」を読んでみてください。それは薄い本ですが、その中のすべてを理解することができれば、関数型プログラミング言語の基礎を本当にしっかりと把握できます。
エリックリッパー

回答:


91

素晴らしい学校のようですね!Lispの方言は、アルゴリズムの数学的パラダイムにより厳密に準拠しています。それらは、プログラマーに再帰と機能スタイルを学ぶことを強制します。これは素晴らしい経験です。あなたの学校はMITのランクにあり、必要なCS 6.001にはまだAbelsonとSussmanを使用しています。

あなたは見つけるかもしれないこの記事は、問題を理解するのに有望で親切。


6
「Force」はおそらく使用するのに適した言葉ではありません。「電車」はどうですか?
バリーブラウン

4
実際、過去数年間でMITのEECSカリキュラムに抜本的な変更がありました。イントロコースは現在2つのコースに分かれており(前半はmit.edu/6.01/mercurial/fall11/www/index.htmlを参照)、言語の指導の大部分はPythonで行われています。
jonsca

4
Schemeは素晴らしい言語であり、それを学ぶのは良い考えだということに同意します。ただし、それに直面しましょう。ほぼすべての現実世界のプログラミングの仕事は命令型言語を採用しています。最も深刻なプログラミングジョブにはC ++が必要であり、C ++プログラマーは通常、何らかの理由でプログラム設計に数学ベースのすてきなアイデアを使用することを積極的に推奨しません。再帰は、命令型プログラムでは大きな役割を果たしません。
フェリックスDombek

4
@FelixDombek、よろしいですか?すべてのアイデア?本当に?命令型ループも数学的アイデアです。
SKロジック

3
@ FelixDombek、 C ++で末尾再帰の代わりに反復を使用する理由しかわかりません。他のすべての再帰形式は、関数型言語の実装とまったく同じ方法で提供されます。ですから、あなたの発言にはまったく同意できません。C ++コーディングに入れる数学が多ければ多いほど良いです。たとえば、赤黒木を再帰なしでC ++に実装してみることはできないでしょう。
SKロジック

37

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

心配しないでください。おそらく2年目からJava / C / C ++を学習します。今すぐJava 6の学習を始めたら、Java 8を卒業する頃にはJava 8が公開されます。または、Pythonに置き換えられます。または、まだ発明されていないが、業界を席巻する他の言語。「人気のある」ものをできるだけ長く学習するのを先延ばしにして、従業員が外に出ても陳腐化しないようにしてください。

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


36

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

とにかくあなたはとても良い学校に上陸しました。産業界が鞭打ちしていない学校は良い。
他の誰かが言ったように、彼らはあなたに科学教えます

多くの悪いコードモンキーファームが技術を教えてくれるので、そこから科学を推測するかもしれませんが、それは保証されていません。(そして、あなたはそれについてかなり奇妙な誤解で終わるかもしれません)

とにかく、機能的な群衆の名誉あるメンバーとして、そこから出たとき、あなたは常に誤解され過小評価されていると感じるでしょう。

それを認めましょう、平均的なコンピューターの知恵は新しいものではありません。

あなたは今、高いリスクに直面しています:

  • 包むしようとしている学歴
  • PHDの追求に乗り出し、
  • ... emacs

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


2
ネクロコメントに申し訳ありませんが、なぜemacsですか?私は興味がある。私はOPと同じボートに乗っています(この秋に大学1年生を始めます)。そして、ラケットを使用します(Schemeに似ています)。
ケビンジョンソン

2
@KevinJohnson emacsは、LISPで記述さたオペレーティングシステムと呼ばれ、多くの人が誤ってコードを編集するのに役立ちます。機能的なパラダイムを行い、LISPに似た構文のわいせつを好む(教えられる)場合、好みのテキストエディタとして成長するでしょう。
ZJR

1
「科学を教えて、そこからクラフトを引き出します」:+1
ジョルジオ

23

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

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

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


14

あなたはプログラミングの経験がまったくないプログラミングに非常に新しいようです。そのため、いくつかの説明があります。

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

プログラミング言語を学習する場合(英語で類推することもできます)、コードが文法的に正しいように、従う必要のある構文を学習します。しかし、言語は問題解決の背後にある論理を教えてくれません。そのロジックを学習するには、さまざまなプログラミングパラダイムを学習します

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

したがって、あなたが尋ねている本当の質問は、なぜFPなのでしょうか?

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

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

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


1
Schemeは機能的に使用する必要はありませんが、C、C ++、Javaよりも使用する可能性が高くなります。
リッキークラークソン

「英語の文学を学ぶためにラテン語を教える学校に似ています。」:または、より広く普及している他のOSではなく、UnixのようなOSを教えるオペレーティングシステムクラスに似ています。
ジョルジョ

11

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

概念を把握したら、他の言語に簡単に適用できます。


4
「ほとんどの企業で使用される日常言語は、今日必要なソフトウェアを生産するのに適しかもしれない」 -典型的なコスト、品質、および成功率を考えると、それは:-)かなり楽観的声明だ
イェルクWミッターク

それは間違いなく本当です!だからこそ、「ある」ではなく「力がある」と書いたのです:
ペルディアン

1
「いったん概念を理解すると、他の言語にそれらを簡単に適用できます。」-この文はあまりにも真実です。ほぼすべての新しい言語で構文を習得し、習熟するには約1週間かかると思います。私は学校でC / C ++とアセンブリを教えられましたが、私は自分でPythonを研究し、研究プロジェクトのためにLispを学びました。Python、Lisp、およびAssemblyから得た基本的な理解がなければ、私が今日のプログラマに近いとは思えません。
ウェインワーナー

9

DrRacketで学習している場合は、プログラムの設計方法のカリキュラムも使用しているに違いありません。

HtDPの(明らかに偏った)著者の1人が、教育スキームがどのようにノースイースタン大学の学部生を協力教育プログラム( "co-op":フルタイムの学期と学術研究の代替学期とするか)について準備している方法について述べています雇用)。

私が到着する前に、Northeasternは20年間、標準的なカリキュラムを使用していました。現在のファッショナブルな言語の3つの用語(Pascal、C ++、Java)、実用的なアプリケーションのレッスンと絡み合った非常にグラフィックが豊富なエクササイズのセットを使用しています。カリキュラムはSIGCSEおよび関連コミュニティで広く公開されましたが、うまくいきませんでした。Webバブルの真っAt中、プログラミング協力を獲得した学生は約3分の1だけでした。コンピューターの移動、スクリプトの実行、ルーターとネットワークの設定など、他のほとんどの人は自分たちを「技術者」と呼びました。そして、この教育はすべて$ 150,000の授業料がかかりました。

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

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


6

私の学校もSchemeで始まりました。言及された理由の1つは、これが競技場の平準化に貢献したことです。1年生のComp Sciのほとんどは、より一般的な言語にある程度、または多くの経験を持っています。だれでもSchemeについて多くの知識を持っている可能性は低い。


4
同意する; Pascal、C、Basic、x86 Assemblerを知っているCSを始めましたが、他の言語の経験がある人もいなかった人もいました。私たちはMLを紹介されました。これは、誰も以前に経験したことがないだけでなく、非常に異質なパラダイムを持っていたため、私たちの中で最も経験豊富な人にとってもやり直しのようなものでした。後で、ML(機能的パラダイム)はCSで学んだ最も有用なものだと思います。
KaptajnKold

6

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


4

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

しかし、Lispに似た言語は、デザインが純粋でシンプルであるため、教育が少し簡単になります。しかし、すばらしい利点は、後でScalaのようなものを学ぶのがずっと楽になることです。


3

後期の前半と前半にスキームを完了しました。Schemeの力を実感し始めたのは、実際にCで作業するようになってからです。

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

  1. プログラミングの経験がない人にとっては、学ぶのは簡単です。技術的な詳細はあまりなく、いくつかの特別なフォームがあります。
  2. より高いレベルの抽象化が可能です。良いコースは、学生がより良いプログラマーになるための技術的な詳細に焦点を当てる代わりに、プログラマーに思考方法を教えることに焦点を合わせることができます。
  3. リストは素晴らしいです。それらでできることはたくさんあります。Carとcdrは強力なツールであることが証明されており、ポインターを操作し始めて初めて、Schemeがリストの処理に優れていることがわかります。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.