edX で Introduction to Functinal Programming を受けた感想です.
Introduction to Functional Programming | edX
今年の 2 月ごろに Ruby のブロックというものを知った. これは, いわゆる無名関数なのだが, その概念がとても新鮮だった.
それは, 関数型言語でよく利用されるということを知ったので, もっと関数型言語に触れようというのが今年の目標だった.
今年も終わりに近づく 11 月, edX で純関数型言語の Haskell の講座が開講された.
関数型言語を身につける絶好の機会だと思った.
内容
講座の内容は, 以下の本をはじめから終わりまで解説していくもの.
- プログラミングHaskell - Graham Hutton: https://amzn.to/3xE0Doz
- Programming in Haskell
毎週の課題も 各章の練習問題そのものだった.
講座のスライドは github で公開されている.
感想
難しかった..でも, 学ぶことが多かった
難しかった. 1 日ずっと Haskell 漬けになったりした.
内容はさらっと解説されるのだが, 関数型言語という世界が, 今までいた世界とは異なる考え方を もっているので, 概念を理解するのに時間がかかる.
しかし, 知らない概念は刺激にもなって, おもしろい
- モナド
- 代数データ型
- 遅延評価…
関数プログラミング実践入門
副読本として, 最近出版された以下の本を購入した.
この本はとても分かりやすいのておすすめ.
ボイントは, Haskell の文法に限定していないところ.
題名どおり, 関数型言語とはなにかということについてかかれている. その手段として, Haskell が解説されている.
C や Java と Haskell の比較がかかれているところがよい.
手続き型言語の世界にいるプログラマを関数型言語の世界へ 引っ張ってきたいという, 著者の意図を感じる.
数学とプログラミングの結びつきが見えた気がした
関数型言語における関数や型の概念から, プログラミングのベースには, 数学があることを強く感じた.
以下のような記事を書いている.
- 数学での関数とプログラミングでの関数 | Futurismo
- データ抽象と抽象データ型 (ADT) について調べたまとめ (Java) | Futurismo
- Haskell で Hello World! しようとしたらモナドでドナドナした | Futurismo
数学との関係性.
関数型言語のベースには数学がある.
- 群論
- 圏論
代数はプログラミング/ モデリングの数学的な基礎理論. 型とは代数学がベースになっている.
これからどうするか?
講座の終わりで, なんと次回予告の動画が流れた?!
Haskell の次は, 圏論 (Category Theory) の講座を予定しているらしい.
大学のとき群環体で心折れた自分としては, 代数学にやや引け目を感じるもの, 数学とプログラミングのつながりをもっ と知るためにこれも受けてみたい.
そのためには, Haskell の学習をここで終わらせることなく, 継続させたい.
AtCoder に挑戦
なにか, 計画をたてとかないと, 自分は勉強しないだろう.
継続的に学習する仕組みとして, 競技プログラミングの問題をといてみる. atcoder と, codeforces が Haskell に対応しているようだ.
Codeforces は, 海外なので深夜に開催されるが, Atcoder は日本時間に合わせて開催されているので, AtCoder をやろうと思う.AtCoder の問題を月 1 回, Haskell でとくぞ.