45


12

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

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

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

私の質問は次のように蒸留することができると思います-非プログラマーは関数型プログラミングを評価し、完全に活用するために命令型プログラミングを理解する必要がありますか?

いくつかの参考文献:

11 回答


32


さて、http://en.wikipedia.org/wiki/Structure_and_Interpretation_of_Computer_Programs [SICP]の存在は、関数型言語が入門資料として使用できることを示唆しています。 ただし、おそらくSchemeはHaskellよりも親しみやすいでしょう。

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

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


29


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

  • http://www.cse.unsw.edu.au/~chak/papers/CK02a.html [リスクと 初年度に純粋に機能的なプログラミングを教えることの利点]。 マヌエル・M T. ChakravartyとGabriele Keller。 Journal of Functional Programming 14(1)、pp 113-123、2004。

次の要約で:

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

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

初心者プログラマ向けのhttp://haskell.org/haskellwiki/Books_and_tutorials#Books [多数の人気書籍]があり、これらの基本概念を教えるための魅力的なターゲットになっています。

  • 「Haskellでのプログラミング」

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

さらに、Haskellはすでにhttp://haskell.org/haskellwiki/Haskell_in_education#Haskell_as_a_first_language [広く第一言語として教えられています。] Haskellそのものである大規模でリッチな言語。


20


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

その理由は、人々が機能的な方法で世界を考えていないからです。 車が通りを走っているのを見ると、彼らは同じ自動車を見て、絶え間なく変化する状態を見る。 彼らは、一連のわずかに異なる不変の車を見ません。

https://stackoverflow.com/questions/4769/what-is-the-easiest-language-to-start-with [他のSOの質問]をチェックすると、Haskellがほとんど言及されていないことがわかります。初心者に適しています。

しかし、あなたが数学者であるか、関数型プログラミングの価値を理解するためにプログラミングについてすでに十分に知っているなら、Haskellは良い選択だと思います。

要約すると、Haskellはあなたにぴったりですが、一般的な初心者にはぴったりではないと思います。

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

チャックは、もう一つの素晴らしい点であるHaskellの洗練された型システムに言及しました。 私は個人的に静的に型付けされた言語を好みますが、動的言語を使用すると、初心者はパズルの一部を無視して、舞台裏で何が起こっているのかを知りたがります。 Haskellの型システムはエレガントですが、1日目から顔を出します。


13


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

  • Haskellは宣言的であり、数学は究極の宣言的です つまり、Haskellで記述されたコードは、数学的なステートメントとして記述するものと非常に類似しています。

  • Haskellは高レベルであり、キャッシュ、メモリに関する詳細を知る必要はありません 管理およびその他のすべてのハードウェア。 また、それは常に良いプログラムを意味します。

  • Haskellは、記号計算、代数、論理に最適です…​

  • Haskellはきれいです:)

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


12


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

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


4


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

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

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


3


私はそれが第一言語として適切であり、命令型言語を最初に学んだのはおそらく学習プロセスを妨害するだけだと言うでしょう(最初に多くの未学習を必要とするため)。

警告として、概念は抽象的な数学的概念であるため、関数型言語の原則はおそらく数学的背景を持つ人が最もよく理解するだろうと付け加えます。

私は、多くの学校が第一言語としてではなく第一機能言語としてそれを教えていることを知っています。


3


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


1


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


1


No.

haskell98プログラムを明確に理解することは非常に簡単です。 LYAHは、経験のない人向けの素晴らしいチュートリアルですが、学習者が拡張機能x、y zにつまずかないようにしようとするのは難しいことです。 すぐに彼らは探求を開始し、高度なプログラミング/数学の概念に圧倒されるようになります。これらの概念は理解するのははるかに困難ですが、他のコードを読むには理解する必要があります。

haskellのすべての部分がhaskell'98 / '10で書かれている場合、おそらくyesと言うでしょう。