データが主食

データエンジニアのぽえむ。分析だったり、読んだ本のメモだったり。

Coursera「Functional Program Design in Scala」修了

はじめに

ktr89.hateblo.jp

の続編講座Functional Program Design in Scalaを修了したので、内容のメモです。

概要

前回受講したFunctional Programming Principles in Scalaは関数プログラミングの初歩として理論的な話が多かったです。今回受講したFunctional Program Design in Scalaはそこからの応用ということで、もう少し実践的な講座です。

とはいえ、いきなりアプリケーションを実装しようみたいな実務的な話ではなくデザインパターンなどの内容が多いです。

内容

Week 1 For Expressions and Monads

環境のセットアップが大半です。Windows/Linux/MacOSXそれぞれでのIDEのセットアップ動画があります。前回の講義を受講している方は不要な内容です。 ちなみに、課題は小規模なのでIDEがなくてもvimだけで乗り切れます。

その後は、評判の悪いモナドの話です。全然わかんないです。この動画だけを見て分かる人は少ないでしょう。モナド関連記事がネット上にたくさんあるので、それを参考にしつつ進めました。

課題はありません。

Week2 Lazy Evaluation

遅延評価や無限リストに関する講義です。 Haskellを勉強していたのでなんとなく理解していましたが、Streamを使うことで綺麗に実装していて面白かったです。

先生がthe Water Pouring Problemのソルバーコードをライブコーディングしているのを見るのが面白いです。書いたり消したりして最終的に整理されていく様は勉強になります。録画なのでライブではないですが笑

課題は、解空間を探索するだけの問題で特に難しくはないです。

Week 3 Functions and State

これまでは純粋関数ばかり扱ってきたわけですが、実際のアプリケーションを作る上で状態が必要になってきますよね?っていう内容です。 銀行口座を例に実装を進めていきます。

課題はヒープのテストコード記述です。 ScalaCheckを使って、正しい実装と誤った実装を切り分けできるテストケースを記述します。

Week 4 Timely Effects

重い処理を実行したいときの設計方法に関する話です。 典型的なオブザーバーパターンの話から始まり、Futureをつかった実装に進んでいきます。 ここだけ、Odersky先生ではない先生による講義です。

課題は、ウェブアプリでスプレッドシートを作るというお題です。 Scala.jsをつかってウェブアプリケーションを作成します。

受講環境

ktr89.hateblo.jp で説明した環境でだいたいは受講できました。

しかし、Week4 の課題は生成したhtmlファイルをブラウザで開いて動作確認する必要があり、仕方なくMacを起動して進めました。

所感

  • Scalaではボイラープレートが少ない代わりにいろんなクラスを頭に叩き込んでおく必要がありそう。
  • ScalaCheckやScala.jsなどを使う課題があり、実務に徐々に近づいてることを感じられる。
  • Week4の先生の英語は聞き取りづらい。
  • まだまだヨチヨチレベルで実務で使えるイメージは湧かない。