web-dev-qa-db-ja.com

Haskellは第一言語として適していますか?

私は以前に命令型言語(C、一部のJava)に触れたことがありますが、プログラミングの経験はありませんでした。したがって、私を非プログラマーとして扱うと、Haskellは第一言語として適しているでしょうか?

純粋数学とCSに対する私の関心は、ほとんどのHaskellチュートリアルの意図と一致しているようであり、命令型プログラミングの現在および将来の業界価値を本質的に認識できますが、関数型プログラミングの可能性を見出しています(パラダイムシフト)魅力的。

私の質問は次のように抽出できると思います-プログラマーでない人は、関数型プログラミングを評価して十分に活用するために命令型プログラミングを理解する必要がありますか?

いくつかの参考文献:

45
Alex

私は世論に反して、Haskellは典型的な初めてのプログラマーにとって良い最初のプログラミング言語ではないと言います。 Rubyのような命令型言語ほど、生の初心者にとっては親しみやすいとは思いません。

その理由は、人々が世界を機能的に考えていないからです。車が通りを運転しているのを見ると、同じ車が常に変化する可変状態で表示されます。彼らは、わずかに異なる一連の不変の車を見ていません。

other SO questions をチェックアウトすると、Haskellが初心者にとって良い選択として言及されることはほとんどないことがわかります。

ただし、数学者である場合、または関数型プログラミングの価値を理解するのに十分なプログラミングの知識がある場合は、Haskellが適していると思います。

要約すると、Haskellはあなたにぴったりだと思いますが、典型的な初心者にはぴったりではありません。

編集:洞察に満ちたコメントをありがとう。人々がマルチパラダイムで考えるというオーウェンの主張は非常に真実です。これにより、Rubyのようなマルチパラダイム言語は習得しやすくなり、学生を命令型思考と機能的思考の両方にさらすという追加の利点があるという私の信念が強化されます。Haskellは明らかにマルチパラダイムではありません。パラダイム。

Chuckは、Haskellの洗練された型システムについて言及しました。これはもう1つの大きなポイントです。私は個人的に静的に型付けされた言語を好みますが、動的言語を使用すると、初心者は舞台裏で何が起こっているのかを知るのに十分な興味を引くまで、パズルのその部分を無視できます。 Haskellの型システムは、エレガントでありながら、1日目からあなたの顔に現れます。

20
dbyrne

さて、 [〜#〜] sicp [〜#〜] の存在は、関数型言語を入門資料として使用できることを示唆しています。ただし、SchemeはHaskellよりもおそらく親しみやすいものです。

Haskellは学ぶのが「難しい」という評判があるようですが、人々は古典的な命令型プログラミングも学ぶのが難しいことを忘れがちです。多くの人が最初は変数に値を割り当てるという概念に苦労しており、驚くほど多くのプログラマーが実際にポインターや間接参照に慣れることはありません。 。

Haskellと抽象的な数学の関係は、人々が時々想定するほど重要ではありませんが、とにかく数学に興味のある人にとっては、類推を見ると興味深いボーナスが得られるかもしれません。

32
C. A. McCann

Haskellを初心者プログラマーに教えることの効果について少なくとも1つの研究があります:

次の要約で:

新入生コースで純粋に関数型プログラミングを教えることは、カリキュラムとパラダイムの促進の両方に有害であると私たちは主張します。代わりに、プログラミングの基本的なテクニックとコンピューティングの本質的な概念を教えるという、より一般的な目的に焦点を当てる必要があります。私たちは、Haskellで大規模な1年生のクラス(最大600人の学生)を教える数学期に得られた経験でこの視点をサポートします。これらのクラスは、コンピュータサイエンスの学生と他の分野の学生で構成されていました。各学期後に調査を実施することにより、体系的に学生のフィードバックを収集しました。この記事は、初年度のコースでの関数型言語の使用へのアプローチに貢献し、これに基づいて、この設定での関数型言語の使用を提唱しています。

したがって、はい、Haskellを使用できますが、関数型プログラミング自体ではなく、基本的で一般的な手法と基本的な概念に焦点を当てる必要があります。

人気のある本の数 初心者プログラマー向けで、次のようなこれらの基本概念を教えるための魅力的なターゲットにもなっています。

  • 「Haskellでのプログラミング」
  • 「関数型プログラミングの技術」

さらに、Haskellはすでに 第一言語として広く教えられています。 -しかし、重要なのは、Haskell自体である大きくて豊かな言語を教えるのではなく、Haskellに示されているコアコンセプトに焦点を当てることです。 。

29
Don Stewart

Haskellを数学者として使用する11の理由
それ以上に書くことはできません。しかし要約すると:

  • Haskellは宣言型であり、数学は究極の宣言型言語です。つまり、Haskellで記述されたコードは、数学的なステートメントとして記述したものと非常に似ています。
  • Haskellは高レベルであり、キャッシュ、メモリ管理、その他すべてのハードウェアに関する詳細を知る必要はありません。また、それは常に良い短いプログラムを意味します。
  • Haskellは記号計算、代数、論理に最適です...
  • Haskellはきれいです:)

あなたの質問に答えるには:プログラミングの経験がない数学者として関数型言語から始めるのは問題ありません。実際にはそれがより良い選択であり、C/Javaなどから受ける脳の損傷を修復する必要はありません。
Mathematicaもチェックする必要があります。市販のクローズドソース製品なので嫌いな人もいますが、数学をするのにかなり良い環境だと思います。

13
Daniel Velkov

まったく経験がない場合は、実際、関数型プログラミング、特に純粋関数型プログラミングの生産性が向上します。私は命令型から機能への移民です。Haskellで生産的になることを学んだことの約80%を忘れなければならないことに対処しなければなりませんでした。

対照的に、後で機能から命令に切り替える方が簡単です。

12
LukeN

一方で、Haskellは第一言語としては素晴らしいと思いますが、プログラミングに真剣に興味を持っている人は、CでまたはC(またはアセンブリ)の後に並行して学ぶ必要があると思います。 Cは、内部で何が起こっているのか、これを行うためのコストは何か、そして最後に、より高いレベルの抽象化と自動リソース管理の有用性を理解するために必要です。 C(低レベルの命令型言語として)とHaskell(高レベルの関数型言語として)の両方に触れると、ほとんどの学生はHaskellが実用的で表現力豊かであることに気付くと思います。

一方で、プログラミングはクラフトだと思います。それは実践的な活動であり、重要なことです喜びを学ぶために何か新しい、役に立つ、または面白いものを作ること。だからあなたは物事を成し遂げる必要があります。そして、これを行う最も簡単な方法は、問題に対応するツールを備えた言語を使用することです。つまり、データ形式にはlibraries、問題の種類にはアルゴリズムを使用します。そしてこの時点で、Python(またはRuby)がより良い選択かもしれません。なぜなら、Hackageはまだ多くの分野でPyPIに遅れをとっているからです(そして、初心者に操作するために何日教える必要があるかなど)画像、またはHaskellでチャートをプロットするには?).

したがって、私の意見では、低レベルの命令型プログラミングへのある程度の露出が必要です(おそらく、OOPには必要ありません)。そうすれば、Haskellの価値を理解することができます。しかし、物事を成し遂げ、すぐに生産的になるためには、Pythonは初心者にとってより良い選択です。Haskellは、ツールになるまでに数週間かかります。

4
sastanin

私はそれが第一言語として適切であり、命令型言語を最初に学んだことはおそらく学習プロセスを妨げるだけだと思います(それは最初に多くの非学習を必要とするので)。

注意点として、関数型言語の原則は、概念が抽象的な数学的なものであるため、数学的なバックグラウンドを持つ人がおそらく最もよく理解できると付け加えておきます。

私は多くの学校がそれを第一言語として教えていることを知っています関数型言語ですが、第一言語としてではありません。

3
Oded

はい、そうです。 Real World Haskellは、それに入るのに最適な方法です http://book.realworldhaskell.org/

3
Alain O'Dea

プログラミングを開始するためにより必須の言語を選択した場合、学習において誰かをメンターまたはチューターとして見つけることははるかに困難な作業ではないという事実を除いて、私は躊躇して「はい」と言います。代わりにRまたはPython(NumPyおよびSciPyを使用))を提案できますか?

1
wheaties

番号。

Haskell98プログラムを明確に理解するのは非常に簡単です。 [〜#〜] lyah [〜#〜] は、経験のない人にとっては素晴らしいチュートリアルですが、学習者が拡張機能x、yzにつまずくのを防ぐのは難しいことです。すぐに彼らは探求し始め、理解するのがはるかに難しいが他のコードを読むために理解する必要がある高度なプログラミング/数学の概念に圧倒されます。

Haskellのすべての部分がhaskell'98/'10だけで書かれているとしたら、おそらくそうだと思います。

1
Tim Matthews

必ずしもそのような質問に対処することなく、私は付け加えます:あなたがハスケルの執拗さをあまりにも難しいと思うなら、落胆しないでください。

他のプログラミング言語もありますが、機能的な言語でさえ、遅れてバインドされています。

0
Marcin