関数型プログラミングの初心者の方、また勉強に躓いた方に質問します。


現在、『マンガで学ぶ関数型プログラミング』という漫画の連載をしようと思っています。詳細は、下のブログを参考にしてください:
http://bugrammer.hateblo.jp/entry/2015/07/12/155321

そこで関数型プログラミング初心者、あるいは挫折した方に質問します。どのような箇所で悩んだり、あるいは挫折しましたか? もしよろしければ、詳細なエピソードを教えてください。

また、「このトピックを重点的に解説して欲しい」と思うところがありましたら、それも教えてください(この項目に関しては必然ではありません)

なお、学習していた/している言語には、特に制限はありません。

回答の条件
  • 1人3回まで
  • 登録:2015/07/12 23:56:56
  • 終了:2015/07/20 00:00:05

回答(8件)

id:alfa-gadget No.1

alfa-gadget回答回数254ベストアンサー獲得回数502015/07/13 00:30:51

ポイント125pt

関数型言語についての書籍やらネットの情報などは読んだことありますが、いまいち何がメリットなのか分かりません。
再帰や無名関数であれば手続き型の言語でもできるものがありますし。
関数型言語を知っている人の視点での説明では、知らない人向けの説明になっていないという感覚があります。
関数型言語に限った話ではないでしょうが、分かっている人には分からない人の気持ちが分からないのだろうと思います。

ちなみに私は挫折したわけではありませんがwww

id:t10471 No.2

t10471回答回数1ベストアンサー獲得回数02015/07/13 10:59:53

ポイント125pt

ずっとHaskellを勉強していて、関数型プログラミングの記事をよく読むのですが、書いている人が使っている言語の主観が強過ぎて結局、関数型プログラミングについて書いてあるのではなくその言語の特性を書いてあることがよくあります。
なので、質問の意図とは違うと思うのですが、関数型言語とはなにか?関数型プログラムとはなにか?について書いてもらえるとうれしいです。

id:language_and_engineering No.3

lang_and_engine回答回数170ベストアンサー獲得回数632015/07/13 15:22:52

ポイント125pt

(初学者のころにつまずきそうになった要因)

・かつて学校指定の教科書「関数プログラミング」(バード・ワドラー)が,あまりに難解で挫折しそうになった。

・モナドとカリー化について,アハ体験のタイミングがなかなかやってこなかった。

・関数型ではない言語を使ってむりやり関数型プログラミングらしいスタイルをとって説明をすることによってむしろ混乱を招くことが多く,またそのような説明方法に対してはマサカリが飛んでくる風潮も強いために困った。

・職業プログラマとして関数型言語を使える機会が,案件ベースでは世の中に多くないという悩み。10数年前よりはだいぶ普及したが,まだいまひとつ。学術的・技術的な価値だけでなく,経営層に対して積極的に導入を勧め説得できるような要素がさらに必要。Ruby普及のためのRailsのようなポジションのプロダクトが何か必要。パラダイムは確実にシフトしつつあるが,オブジェクト指向の時ほどの社会現象にいたるブレイクをまだ生み出せていないのではないか。という悩み。


マンガ頑張ってください。

id:pente40 No.4

pente40回答回数218ベストアンサー獲得回数212015/07/13 22:01:02

ポイント125pt

インターネットがまだ無い時代に図書館で読み漁った本で、まず、関数っていう物の意味が分からなかったんですよね。

その後はオブジェクト指向に悩まされましたねー。

id:pmint No.5

pmint回答回数41ベストアンサー獲得回数62015/07/15 15:26:38

ポイント125pt

「実行順序の無いプログラム」というのがよく分かりません。
「SQLもループ処理の一部を書いているだけだ」と理解している私にとっては、ループを使わずにプログラムを書くということが既に分かりません。

id:eliya No.6

eliya回答回数1ベストアンサー獲得回数02015/07/16 08:20:11

ポイント125pt

授業で関数型言語を1セメスター勉強しました。
でも「関数型言語とは要するに何なのか」がピンときませんでした。

手続き型言語は、CとかBASICをイメージすれば、実際のメモリやCPUから手続きのフローまで全部自然につながります。SQLのような集合志向言語は、ベン図とか、集合から集合への写像とか、集合からスカラーへの写像とか想像すれば、言語で何を実現しようとしているのかが想像できます。

関数型言語は、そういうのがいまいち見えませんでした。全く新しい概念を勉強しているようで、既存の知識のネットワークに上手に入りませんでした。

全く新しい概念ならそれはそれでいいのですが、そのメリットをちゃんと知りたかったように思います。ゼロから作ればもちろん数学的にきれいな体型にはなるでしょうが、綺麗な体系のメリットがいまいち見えませんでした。
例えば、副作用がないというのはメリットとして語られますが、画面やファイルに出力するためには特別な手続きが必要だとかいわれると、「そこまでして副作用がないことを言語仕様の奥底に埋め込まなくても・・・。」と思います。

id:fantakeshi No.7

fantakeshi回答回数1ベストアンサー獲得回数02015/07/16 08:30:22

ポイント125pt

競技プログラミングの問題をたまに解いたりする程度ですが、最初は変数が書き換えられないということに大きな衝撃を受けました。
次にHaskell限定の話ですが、IO周りの仕様が若干面倒でトライ&エラーを繰り返しながらちょこちょこ変数を表示することが難しいので、本当にうまくいっているのかわかりにくいというのもありました。(なので一時期OCamlに浮気していました)

今では他の言語が関数言語のパラダイムを部分的に取り入れてるので(ラムダ式、カリー化等)関数型プログラミング言語ならではのうれしいこと、みたいなのが実感しにくく変数を自由に使えない言語でなんとか再帰を駆使して書かなくてはいけないという印象が未だに強いです。難しいリクエストだとは思いますが、早い段階で関数型プログラミングならではのうれしいこと、みたいな項目があると学習意欲がより湧くのではと思います。

id:schwnnn No.8

schwnnn回答回数84ベストアンサー獲得回数62015/07/19 23:26:53

ポイント125pt

オープンソフトの改良法など

  • id:language_and_engineering
    No.3です。一個書き忘れました。

    ・ちゃんとやろうとすると圏論が必要という悩み。
  • id:deep_one
    実行順序のないプログラミング…はむしろGUI駆動タイプのプログラミングでつまずくポイントかな。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません