研究室に新しくB4のメンバーが二人加わることになった。計算機科学をやっているとはいえ、重い計算はソフトウェアパッケージに丸投げしようと思えばできる研究室である。そのため、研究室メンバー全員が必要になるのは、解析やグラフ化といった、Pythonがすごく得意なことができる技能である。
自主性を重んじてはいるものの、それを尊重することと、放任することは、紙一重な感じがしてならない。こういうのは最初にとりあえず叩き込まれたほうが、その後自分で走り出すための強力なツールになる、という気持ちがこの1年で高まったので、後輩にはいい資料と課題を少しずつ出していき、わからないところや難しいところは隣で教えるスタイルにしようと思った。
そこで、前からちょっと気になっていたゼロから学ぶPythonという、CC-BY 4.0で公開されていて、kaityo256さんが作った講義資料を使おうかなと思った。こういう資料をとりあえず渡すだけだと、思わぬトラップが潜んでいたりするので、実際に自分も取り組むことにした。
この記事は手を動かしたときの感想と、これを教本として使用するときの注意ポイントを、自分のメモとして記録する。
「はじめに」
「プログラマ的な感覚」。いい。
これを身につけるというだけでも価値があるし、これさえ身につけば、あとは自走できるかなと思ったので、この資料を教本にしようと思った。
「Pythonの概要とGoogle Colabの使い方」
pythonが遮蔽する(動的型付け言語がユーザーから隠す)ことについて説明していて、さすがぁとなった。僕ならしっかりこういう大事な話を忘れるので、さっそく、とりあえず教本を決めておくのがいいなと思った。
課題のパートでは、五芒星をPILで描くタスクが与えられた。課題2-2まではコピペでOK。cx
やcy
といった、ちょっとコメントがないと意味のわかりにくい変数があるのが気になった。cognitive load が大きいので、center_of_x
やcenter_of_y
といったものにフォークして直すか、または、不便だなと感じてもらって、こういったわかりやすい変数名を使おうという動機づけに活かすか、なんにせよなにかしらの工夫を入れるポイントだと感じた。
課題2-3とは初心者にはちょっとキツめ?かも。たぶん手元に紙とペンを用意して数式を書く動作ができるようになればいいかな。
発展課題も同じ。
「条件分岐と繰り返し処理」
変数の説明が講義パートで続く。やりがちなミスにも触れていてすごくいい。オイラー法を理論と数式、直感的な理解、最後に離散化したものまで示すという、素晴らしいお膳立てのあとに課題が出てきていて、いい流れだなと思った。
課題1はコピペで動く。
課題2はforの中のif文を書く問題だが、実質if文を書く問題になっている。ifの条件分岐も自然言語で与えれていて、講義パートとにらめっこすれば、問題なく解けそう。ヒントも的確でいい。(複素数の実部と虚部へのアクセス方法がすっと書いてあるのが親切でいい)
ここで画像がパッと出て、直感的な予想とだいぶ違う画が得られたのが、やっていて楽しかった。
発展課題は、それまでのコードをコピペして、次数をいじる、条件分岐を少し追加すればよかった。初学者にはちょうどいいくらいの挑戦具合なのかな?心が折れるより、ちょっと頑張ってちゃんとできる、はモチベにつながっていいよなと思った。
「Pythonの概要とGoogle Colabの使い方」と「条件分岐と繰り返し処理」をやるときは隣で見て、ここでその人の力量を計り、その後の課題調整の参考にできそうだなと思った。
関数とスコープ
お恥ずかしながら、ネストを浅くするために条件が外れたときにループから出る処理のことを、ガード節というのを初めて知った。
しれっと
while 0 < money < 10:
money += random.randint(0, 1)*2-1
条件を二つ分けずに書ける、python特有さを出してる。
リーダブルコードをさっと示しているの、好感。自分のやつだけど、研究室に置いとこうかしら。