去年に引き続き、東京都立大学の非常勤講師の依頼をid:mamorukさん(小町先生)からして頂いたので、今年も講義を担当してきました。講義の内容としては
- Mackerelでのロール内異常検知を題材に、機械学習をプロダクトに取り込んでいく際、どういった視点が必要になるのか
- 実際の開発はどういった形式やツールで行なわれているのか、擬似的に体験してもらう
といった内容(講義 & 演習)で行ないました。内容としては昨年とほぼ一緒ですが、新型コロナウイルスの影響で演習パートがオフラインの対面ではなく、オンラインで行なう点が一番違いました。演習系のサポートは学生さんの手元の環境がそれぞれ違う、などあって去年も苦戦しました。今年は同じ感じでいくとさらに大変そう(というか見切れない...)だろうなと思って、やり方を考えてみました。
他にいいやり方があったら誰か教えて & 自分用の今後*1のメモという感じのエントリです。
演習パートの前提
- 学生さんは人によってはカメラやマイクをオンにするのが厳しい人が多い
- ネットワーク環境だったり、ハードウェア的なものだったり
- ネットワーク環境によっては画面共有も厳しい、という人もいる
- 学生さんの手元環境は様々。プログラミングへの慣れ方もかなり幅はある
- 普段から慣れている人は勝手に進んでもらえるとよいが、講義の主旨的には環境設定で脱落者をなるべく出したくない
- 講師1名 + TAさん2名のサポート体制
- TAさんは去年の講義の履修者で内容はある程度把握してもらってる
- 演習時間は2.5~3時間程度
- 夏の集中講義の中の1日分の担当
実行環境はGoogle Colab
これはすでに割とやられているところ多そうですね。学生さんの手元の環境はMac / Windows / Linuxだったりするわけですが、それぞれのトラブルシューティングはかなり大変。昨今の話題的には、コンテナを使った開発も体験して欲しくてdocker上での実行も考えたのですが、この人数をリモートで対応するのはちょっと厳しい...ということで今年は採用を見送りました...(ちなみに去年はdocker上で作業をしてもらっていました)。Google Colabだと、Pythonのコードがしゅっと動く環境が手に入りますし、shellが動いてjq
などちょっとしたツールのインストールも楽、ということもあり採用しました。
雛形のColabのNotebookを用意しておいて、自分のアカウントにコピーしてもらってそこで各自実行してもらう、という形を取りました。Colabは「リンクを知っている全員に共有」ということが簡単にできるので、うまく動かない場合はNotebookを共有してもらって様子を見るということができました。これはリモートならでは感がありますね。
あと、採点するときにメールがzipファイル地獄にならずに済むというメリットもあります...。
課題のリポジトリはGitHubで管理、Google DriveでマウントしてColab上で修正
ちょっとしたデータ分析するだけであればColabだけで十分なのですが、今回の演習では
- テストを書く
- テストこける
- プログラム修正する
- テスト通る
- プログラムを改良する
- テスト通す
- ...
といった一般的な開発のフロー(の一部)を学生さんに体験してもらうのが主目的でした。そのため、Colabだけでは不十分*2。そこで、以下のやり方を採用しました。
- Colab上でGoogle Driveをマウント
- マウントしたパス上にGithubの演習課題リポジトリを
git clone
- Colabは何の追加インストールもせずに
git clone
が動いて助かる...
- Colabは何の追加インストールもせずに
- Colab上からマウントしたファイルを編集
- Google Drive上のファイルも編集されるので、変更が永続化される
- Colabではセッションストレージも使えるが、ランタイムのリセットなどで消えてしまうため、今回の目的に適さない
- VSCodeなどみたいにリッチな補完が効くわけではないが、最低限のコードのシンタックスハイライトなどはColabがやってくれる
- 演習で使うリポジトリはコードサイズは大きくないので、これで十分ではある
- Google Drive上のファイルも編集されるので、変更が永続化される
- Colab上のマウントしたディレクトリで
make test
を実施- ブラウザ上だけでテストを体験してもらえる環境が完成
- 修正してもらったGoogle Driveのディレクトリを採点者やTAの方に共有してもらう
- 学生さんがはまったときの手元の様子がリモート越しでも分かる
- 実際、演習中に結構な人数の方の手元の様子をこれで一緒に見ることができました
学生さんによってはZoomの画面共有も環境的に厳しいという方もいらっしゃいましたが、Google Driveの共有リンクを共有してもらうことで何とか最低限のサポートはできたかなと思います。演習課題の提出時に講義の感想も一緒に送ってもらいましたが、Colab & Google Driveを使ったやり方はまあまあ満足してもらえたようでした。
実際のColab上の編集風景は↓のような感じ。右側でコードを書いて、左側でテストを実行します。IDEっぽさがありますね。
難しかったこと
受講者がありがたいことに40名近くいらっしゃったのですが、オンラインで学生さんの顔の様子もなかなか分からないこともあり、みんなスムーズに行っているのか、はまっているのか、最初は様子を掴みかねました。オフラインの講義の場合、教室をうろついて画面の様子を後ろから見てコメントしたり、といったことで様子を把握していましたが、オンラインだとそういうことが気軽にはできない。
40人の前では学生さんもなかなか質問しにくいところもあるかも、ということで途中からZoomのブレークアウトルームの機能を使って3チームに分かれ質疑を行なうようにしました。その結果、結構質問をしてもらって、それはそれでよかったのです。ただ、ブレークアウトルームが違うと、他の部屋でどういった質問が出たかが聞けない、などの悩ましさがありました。
演習系の講義を担当されている先生で「自分はこういう感じにしたところ、リモートでもある程度うまくいった!」というのがあったら是非教えて欲しいです。
昨日今日とで大学院の集中授業が半分終わり。明日と明後日で残りの半分。今日からは演習なのだが、午後に質問を受けるブレイクアウトルームを使ったらブレイクアウトルームが大盛況だった。しかしブレイクアウトルームの中に入ると外のことが分からなくなるので、複数ホストがいないと難しいな。
— Mamoru Komachi (@mamoruk) 2020年9月15日
これ、学外から非常勤講師の方々をお招きして実践的な内容を教えていただくという授業で、44人の履修登録者がいて40人出席しているので、大学院の科目にしてはすごい出席率。情報科学の学生ほぼ全員くらい。他学域の履修が少なかったのは、日時の連絡が情報科学の中でしか回っていなかったせいかも。。
— Mamoru Komachi (@mamoruk) 2020年9月15日