読者です 読者をやめる 読者になる 読者になる

歩いたら休め

If the implementation is easy to explain, it may be a good idea.

【雑記】Haskell(で|と)数学を割と真面目に勉強しようと思います

雑記 Haskell

Python3の型注釈が目指す世界をきちんと理解したいと思い、 2年越しくらいですごいHaskellたのしく学ぼう!をようやく読み終わりました。

型クラスの話あたりから、動的型言語(まともに書ける言語がPython, Ruby, R)にとっては感覚をつかみにくかったのですが、 「型クラスは型がもつ共通の性質をモデリングするためのもの(そしてそれは代数学の概念が元になっているらしい)」という感覚をつかむとと受け入れられました。

Elixirの本に「(関数型)プログラミングはデータの変換をするものだ」という、 関数型プログラミングの特徴を分かりやすく説明した記述があります。 Haskellはそこから一歩進んで、「関数の引数や戻り値がどんな性質を持っているか、つまりどんな型や型クラスなのかを意識しろ」と言っているようです。

話はやや逸れるのですが、数理最適化が好きな同僚(なんかもう後輩って呼べないですw)が「問題を関係者にヒアリングして、プログラミング可能な状態に定式化する」という羨ましい能力を持っているのですが、Haskellを学んでいるうちに、それが数学の鍛錬(もっと具体的には論理と集合で問題を表現すること)によって得られたものなんじゃないかと感じ始めました。

www.orecoli.com

数学にもともと興味があって数学科に進学した学生でも、大学以降で学ぶ数学についていけなくて挫折してしまう人は多いようです。

(中略)

具体的には以下の能力、

  • 証明するべきことを正しく論理式として表現する能力
  • 許された演繹規則のみを用いて、正しい証明を構成する能力

の二つが身についていないと、今からあげる書籍を100回読んでも理解できるようにはならないと思います。

というわけで今は「論理と集合」を学ぶために、本屋で見かけて良さそうだったこの本を読んでいます。 写像の記述方法がHaskellの関数と型注釈そのものでビックリだし、Haskellを学んだ後だと数式がプログラミング言語にも見えます。

論理と集合から始める数学の基礎

論理と集合から始める数学の基礎

また、Haskellで実用的なプログラムも書いてみたいです。この記事とか参考になりそうですが、過去の資産もあるので今はPythonで書いてしまっています。

syocy.hatenablog.com

純粋関数型データ構造

純粋関数型データ構造

「何の役に立つのか」という応用先を考えずに勉強しちゃってますが、仕事で必要な勉強とは別に身につけようと思います。 少なくとも、汎用的に役に立つ分野ではあるはずなので。

とりあえず、『達人プログラマー』的には2017年は数学の基礎とHaskellを学ぶ年にします。