最近、私は関数型プログラミングに真剣に取り組んでいます。
Haskellとそれが提供する可能性に本当に興奮していますが、学ぶのに時間がかかることもわかりました。 SO質問 Haskellの学習方法 )の回答では、実際に「習得」するのに数年ではなくても数か月かかると述べています。
今、私はC、PHP、いくつかのオブジェクト指向のものなどを知っています。Haskellは「現実の世界」ではあまり使用されていないと言われていますが、私が知っている正規言語でスキルを向上させたほうがいいでしょうか。 Haskellは闘う価値がありますか?
関数型プログラミングが追いつくと人々が考える理由 のこの質問では、結論は関数型プログラミングが「追いつく」ということのようです。しかし、確かに手続き型プログラミングはトップに留まるでしょう?
編集:keparoは私の質問を次のようにうまく明確にします:手続き型言語とは対照的に、Haskellと関数型プログラミングのパラダイムを研究することは私にとって価値がありますか?
Haskellは、人々が学びたいと思うほど難しくはありません。 Haskellは、あなたがあなたのために存在することを知らなかった新しい世界を開きます。他の言語と同じように学ぶことは価値があります。 Haskellプログラミングを必要とする仕事を見つけられないかもしれませんが、それは本当に言語が価値がないことを意味しますか?
Haskellはあなたにたくさんの新しいことを教えてくれます、そしてそれはあなたが/ do /で使う言語でさらに良くプログラムする方法をあなたに教えます。あなたはそれであなたの暇な時間にあなた自身の個人的なプロジェクトをすることができます。
「実世界」を「キャッシュジェネレーター」と定義すると、Haskellは「実世界」ではあまり使用されません。したがって、それがあなたの目的である場合は、目的を再考する必要があるかもしれません:p
また、私は選択された「haskellを学ぶ方法」の答えのその部分が本当に好きではありません。 Haskellだけでなく、あらゆる言語を習得するには数ヶ月から数年かかります。 「マスター」の定義方法によって異なります。 Haskellはかなり効率的に使用でき、1か月しか学習しておらず、ゆっくりと使用しています。
何といっても、Haskellの学習が提供する考え方の変化は、職場でまだ使用されている手続き型言語の使用に戻らなければならないときに役立ちます。
関数型パラダイムは、さまざまな主流のアプリケーションや言語に浸透し始めています。C++でさえ、C++ 0xに(機能不全の)ラムダを追加する予定です。
ScalaやOCamlなどのハイブリッド言語もご覧ください。ScalaはTwitterで使用されており、OCamlはJane'sStreetで使用されています。金融取引プラットフォームで。
おそらく、プロの設定でCファミリー言語ほど頻繁にHaskellを使用することを期待するべきではありません。 Haskellと関数型プログラミングのパラダイムを研究することがあなたにとって価値があるかどうかという質問であれば、答えはイエスです。プログラミングについての豊富な理解をすべての作業に適用できます。
Haskellを学んだのは、Scala、Clojure、OCaml、Schemeで試した中で群を抜いて最高の関数型言語だったからですが、仕事で使うことを真剣に期待していませんでした。
結局のところ、チームには小さすぎてJavaでは時間がかかりすぎるような奇妙な仕事に最適です。これまで、アドホックなデータ移行、つまりCSVエクスポートの別の形式へのマングリング、XMLのバッチ変換(HXTはXSLTよりも簡潔で強力)、インターネットのスクリーンスクレイピング、モデリングを含むソフトウェアプロジェクトの見積もりに使用してきました。確率モナドを使用し、バックトラッキングを使用して最適なガントチャートを作成するリスク。これはすべて、実行する必要のある実際の作業であり、Javaで数日間の作業になるため、わざわざ試してみる必要はありませんでした。
テキストエディタでhaskellソースに値のリストを作成する方が、Excelに入力するよりも少し手間がかかるため、今では、漠然と数学的なものにExcelの代わりに使用しています。 Haskellに入ると、Excelでは実行できないバックトラックや確率分布などのあらゆる種類の魔法を実行できます。グラフが必要な場合は、値をCSV(2行のコード)として出力し、Excelにロードします。
唯一の欠点は、習熟するのに数か月かかることですが、私見に努力する価値があります。
手続き型言語とは対照的に、Haskellと関数型プログラミングのパラダイムを研究することは私にとって価値がありますか?
拡張されたスキルセットを持つことが価値がある場合:はい。
あなたが得るかもしれない1つの利点:並列および並行プログラミング。過去の手続き型言語は、副作用の明確な概念がない傾向があり、その結果、それらの言語で並列プログラムを作成することは正しく行うことが困難です。関数型言語(特に、Haskellのような副作用を制限する言語)は、生産的な並列プログラミングについてもっと多くのことを言う必要があります。
あなたの袖にそのスキルを持っていることは傷つけることはできません。
苦労する価値があると思います。 コンピュータの動作だけでなく、問題がどのように解決されるかを理解するのに役立ちます。
たぶん1つの特定の問題はHaskell自体です-純粋に関数型言語として、それはちょっと「ハードコア」であり、一方で物事を複雑にすることさえあります。
代わりに、関数型プログラミングは非常に実用的な方法で非常に役立つ場合があります-多くのOO /命令型言語には、この理由で関数型要素が含まれています(Linq、無名関数、読み取り専用値、関数ポインター/委任、型推論):何に集中できますかより少ないコードでより多くを表現できるようにする必要があります(つまり、エラーが発生しにくくなります)。
ScalaまたはF#のような純粋でない関数型言語(標準関数型言語)は、既存のJavaまたは.NETプロジェクトに簡単に統合できるため、関数型言語の典型的な利点については、 このスレッド を参照してください。関数型言語で可能な非常に強力な解析(Monadicパーサーコンビネーター/ Parsec)または同時プログラミングについて考えてみてください。それらがどれほど有用であるかがわかります。
非関数型コードで非常に使いやすい場合、関数型プログラミングは実稼働環境でプラスになる可能性があることがわかります。 MSは、F#を思いついたときにもそれを見ることができたと思います。
どちらもILにコンパイルされるため、機能的なアプローチを必要とする問題を処理し、手続き型コードでそれらのソリューションを非常に簡単に使用できます。
このようにして、関数型コードは実稼働環境で簡単にその方法を見つけることができます一度に少しずつ
したがって、MSのユーザーベースは非常に大きいので、F#が非常に近い将来に普及しなければ、Haskellも普及しないと思います。
手続き型言語とは対照的に、Haskellと関数型プログラミングのパラダイムを研究することは私にとって価値がありますか?
あなたが惨めになりたいのでなければ、そうではありません。 Luke Plantは、 Haskell/Pythonを学ぶとプログラマーが悪くなる理由 :
だから、PythonとHaskellは私を意気消沈させ、奇妙で理解しにくいコードを書くように私を励ましました...
(これは完全に冗談ではありません。)
視野を広げることで、現在使用している言語に関係なく、より優れたプログラマーになることができます。たとえば、LISPマクロを作成した後は、プログラミングを同じように見ることは決してありません。 Haskellの用語で考え始めると、関数を作成し、あまり高度でない言語でクロージャを望んでいることに気付くでしょう。
ラムダ、型推論、クロージャ、 など などのC#の優れた点から判断すると、Haskellを学ぶことで、主流の言語で明日の最先端を学ぶことができます。
関数型プログラミングの使用を組み合わせることができますそして言語について実用的である。
すべての最新のスクリプト言語s.a. JavaScriptまたはLuaでは、機能パラダイムを使用できます。
Haskellでプログラミングを楽しむ人もいます。あなたがあなたの環境を選ぶことができて、そして楽しみが考慮事項であるならば、多分あなたは飛び込むべきです。
多くのプログラマーはツールを選択する立場になく、楽しみは彼らの選択の要因ではありません。それらの多くは、職場で「コアプロジェクトソース」としてC/Java/etcを使用するようになりますが、ビルドスクリプトなどの「スクリプト」にはPythonを選択するか、使用する必要があります。 SCons、Java/etcコードを生成する他のスクリプト、テストシステム、概念実証など。そして他の場所ではPythonは「コアプロジェクト」でも使用されます。
8年後には、PythonではなくHaskellが「あなたのところにやってくる」でしょう。しかし、あなたはもっと早くそれに来ることができます。
機能的なコンセプトが強くなりつつあります。 Rubyの周りの活発な活動と関心に注意してください。最近、単なるブラウザのスクリプト言語を超えて、JavaScriptへの関心が少し高まっていることに気づきました。投資した時間は今年または来年には報われないかもしれませんが、今すぐダイビングすることでゲームを先取りすることができます。
それはあなたの一般的なゲームプランに依存します。あなたはそれ自体の目的として、または目的を達成するための手段としてプログラミングに興味がありますか?前者の場合は、Haskellに夢中になる。後者の場合は、主流の「雇用可能な」言語に固執します。 Haskellが離陸するのを待ってから、急襲します。
なぜ手続き型でオブジェクト指向ではないのか、C以外の長年にわたって手続き型が使用されているのは見られません。
商業的に言えば。私はJavaまたはC#を使用します。どちらがうまくいくかは問題ではなく、スキルはpython、Ruby =およびJavaScript。
Haskellは時間と労力の価値がありますが、非常に学術的ですが、一部の銀行はそれを使用していますが、ヨーロッパと英国の多くはコードベースをF#に移行しています。
商業的に言えば、FOPが高速で動くとは思わない。しかし、テクニックは間違いなく主な滞在言語に登場しています。特にマルチコアチップの設計と、それらでコードを並列実行する場合。