質問

最近、私は関数型プログラミングに真剣に取り組んでいます。

私はHaskellとそれが提供する可能性に本当に興奮していますが、今では学習に時間がかかることもわかります。 Haskellの学習方法に関するSOの質問では、そうでない場合は数か月かかると答えています実際に「マスター」する年それ。

今、C、PHP、オブジェクト指向のものなどを知っています。そして、「現実の世界」ではHaskellはあまり使われていないと言われたので、定期的にスキルを向上させる方が良いでしょう私が知っている言語? Haskellは闘争に値するものですか?

のこの質問では、なぜ人々は関数型プログラミングがキャッチすると思うのかの結論は、関数型プログラミングは「キャッチオン」するということです。しかし、確かに手続き型プログラミングは常にトップにとどまりますか?

編集:keparoは私の質問を次のようにうまく明確にします:手続き型言語とは対照的に、Haskellと関数型プログラミングパラダイムを研究することは価値がありますか

役に立ちましたか?

解決

Haskellは、学ぶことを好むほど難しくはありません。 Haskellは、あなたが存在することを決して知らなかった新しい世界を開きます。他の言語と同様に学ぶことは価値があります。 Haskellプログラミングを必要とする仕事は見つからないかもしれませんが、それは本当に言語が価値がないことを意味しますか?

Haskellは多くの新しいことを教えてくれますし、あなたが/やる/使っている言語でさらに良くプログラムする方法を教えてくれます。空き時間に自分のプロジェクトを行うことができます。

Haskellは、「現実の世界」ではあまり使用されていません。 「現実の世界」を定義すると「キャッシュジェネレーター」として。それがあなたの目的であれば、あなたは目的を再考する必要があるかもしれません:p

また、選択した「ハスケルの学習方法」のその部分があまり好きではありません。回答。 Haskellだけでなく、あらゆる言語を習得するには数か月から数年かかります。 「マスター」の定義方法によって異なります。 Haskellはかなり効率的に使用できますが、1か月しか学習していませんでしたが、遅くても使用しています。

他のヒント

他に何もなければ、Haskellの学習が提供する考え方の変化は、職場でまだ使用されている手続き型言語の使用に戻る必要があるときに役立ちます。

機能的パラダイムは、さまざまな主流のアプリケーションや言語に取り入れられ始めています-C ++でさえ、C ++ 0xに(欠けた)ラムダを追加する予定です。

また、ScalaやOCamlなどのハイブリッド言語の一部をご覧ください。 ScalaはTwitterで使用されており、OCamlは金融取引プラットフォームのJane's Streetで使用されています。

おそらく、Haskellをプロフェッショナルな環境でCファミリー言語と同じくらい頻繁に使用することを期待すべきではありません。 Haskellと関数型プログラミングのパラダイムを勉強することがあなたにとって価値があるかどうかという質問であれば、答えはイエスです。プログラミングに関する豊富な知識をすべての作業に適用できます。

Haskellを学んだのは、Scala、Clojure、OCaml、Schemeを試した中で最も機能的な言語だったからです。しかし、仕事で使うことを真剣に期待していませんでした。

結局のところ、チームにとっては小さすぎて、Javaでは時間がかかりすぎるような奇妙な仕事に最適です。これまでは、アドホックなデータ移行に使用しました。つまり、CSVエクスポートを別の形式に変換する、XMLのバッチ変換(HXTはXSLTよりも簡潔で強力です)、インターネットからのスクリーンスクレイピング、モデリングを含むソフトウェアプロジェクトの見積もり確率モナドを使用してリスクを計算し、バックトラッキングを使用して最適なガントチャートを作成します。これはすべて実行が必要な実際の作業であり、Javaで何日もかかるのでJavaで実行しようとすることさえありませんでした。

テキストエディターでhaskellソースに値のリストを作成するのは、Excelに入力するよりも少し手間がかからないため、漠然と数学的にはExcelの代わりに使用します。 haskellに入れば、Excelではできないバックトラッキングや確率分布など、あらゆる種類の魔法を実行できます。グラフが必要な場合は、値をCSV(2行のコード)として吐き出し、Excelに読み込みます。

唯一の欠点は、習熟するのに数か月かかるが、努力するだけの価値があるということです。

  

手続き型言語とは対照的に、Haskellと関数型プログラミングのパラダイムを研究することは価値があるのでしょうか?

拡張されたスキルセットを使用する価値がある場合:はい。

1つの利点は、並列プログラミングと並行プログラミングです。過去の手続き型言語には副作用の明確な概念がない傾向があります。その結果、それらに並列プログラムを書くことは正しく行うことが困難です。関数型言語(特に、Haskellのような副作用を制限する言語)には、生産的な並列プログラミングについて多くのことを言う必要があります。

そのスキルを身に付けていても痛くない。

非機能コードで非常に使いやすい場合、実稼働環境では機能プログラミングがプラスになることがわかります。 MSもF#を思いついたときにそれを見ることができたと思います。

どちらもILにコンパイルされるため、機能的なアプローチが機能することを要求する問題を処理し、手続き型コードでそれらのソリューションを非常に簡単に使用できます。

そのようにして、機能コードは本番環境で簡単に見つけられます少しずつ

したがって、MSのユーザーベースはそれほど大きいので、F#が近い将来に広まらなければ、Haskellもそうではないと思います。

私はそれが闘いの価値があると思う。コンピューターの動作だけでなく、問題の解決方法を理解するのに役立ちます。

たぶん特定の問題の1つはHaskell自体です-純粋に機能的な言語として、それはちょっと「ハードコア」です。一方で、事態を複雑にする可能性もあります。

関数型プログラミングは、非常に実用的な方法で非常に役立つ場合があります-多くのオブジェクト指向/命令型言語には、この理由で関数要素が含まれています(Linq、匿名関数、読み取り専用値、関数ポインター/デリゲート、型推論):少ないコードでより多くのことを表現できるようにする(エラーが発生しにくい)ことに集中してください。

ScalaやF#などの非関数型言語(標準関数型言語)は、既存のJavaまたは.NETプロジェクトに簡単に統合できるため、両方のパラダイムの利点を必要に応じて組み合わせることができます。関数型言語の典型的な利点については、このスレッド。非常に強力な構文解析(モナディックパーサーコンビネータ/ Parsec)または関数型言語で可能な並行プログラミングを考えてみてください。それらがどれほど便利かがわかります。

  

手続き型言語とは対照的に、Haskellと関数型プログラミングのパラダイムを研究することは価値があるのでしょうか?

悲惨になりたくない限り。 Luke Plantによると、 Haskell / Pythonを学ぶことでプログラマーが悪くなる

  

だから、PythonとHaskellを学ぶことは私をやる気を失い、励ましました   奇妙で理解しにくいコードを書くようにしています...

(これは完全に冗談ではありません。)

視野を広げることは、現在どの言語を使用していても、より良いプログラマーになるのに役立ちます。たとえば、Lispマクロを書いた後は、同じ方法でプログラミングを見ることはありません。 Haskellの用語で考え始めると、関数を作成し、あまり高度でない言語でクロージャーを望んでいることに気付くでしょう。

ラムダ、型推論、クロージャ、などのC#の利点から判断する、Haskellを学ぶことで、主流言語の明日の最先端に足を踏み入れることができます。

Haskellでプログラミングを楽しむ人もいます。あなたの環境を選択でき、楽しみが考慮事項であるなら、多分あなたは飛び込むべきです。

多くのプログラマーはツールを選択する立場になく、楽しみは選択の要因ではありません。彼らの多くは職場で「コアプロジェクトソース」としてC / Java / etcを使用していますが、「スクリプト」にPythonを選択するか、使用する必要があります。たとえば、SConsを使用したビルドスクリプト、Java / etcコードを生成する他のスクリプト、テストシステム、概念実証など。その他の場所では、Pythonが"コアプロジェクト"で使用されています。

8年後には、PythonではなくHaskellが「あなたに来る」ことになるでしょう。しかし、あなたはより早くそれに来ることができます。

関数型プログラミングの使用を組み合わせて、 言語について実用的になることができます。

すべての最新のスクリプト言語s.a. JavaScriptまたはLuaは、機能的パラダイムの使用を許可します。

機能的なコンセプトが強くなっています。 Rubyをめぐる活発な動きと関心に注目してください。また、最近の単なるブラウザスクリプト言語を超えて、JavaScriptにもう少し関心があることに気付きました。今年に入ってからでも、投資した時間で報われることはないかもしれませんが、今すぐゲームを進めることができます。

一般的なゲーム計画に依存します。それ自体が目的として、または目的を達成するための手段としてプログラミングに興味がありますか?前者の場合は、Haskellに夢中になります。後者の場合、「雇用可能な」主流に固執します。言語。 Haskellが離陸するのを待ってから跳ねます。

オブジェクト指向ではなく、手続き型である理由、Cとは別に手続き型が長年使用されているのを見ていない

商業的に言えば。 JavaまたはC#を使用します。どちらが上手くいくかは問題ではなく、スキルはpython、Ruby、JavaScriptなどの他の言語と互換性があります。

Haskellは非常にアカデミックですが、一部の銀行はそれを使用しますが、ヨーロッパと英国の多くはコードベースをF#に移行しています。

私は、FOPが商業的に言えば大きな速度で動くとは思わない。しかし、テクニックは間違いなく主要な滞在言語に登場しています。特に、マルチコアチップデザインでは、コードを並列実行します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top