大学院生以来のTAを筑波大学でやってきた!
運営スタッフをやっているPyCon JP( https://pycon.jp/2018/ )がPythonを教えるBootCamp「PyCamp」を筑波大学で開催するということでTAとして参加してきた。
TAをやるのはM2夏以来なので、4年前ぶり…(時の流れが早すぎて涙が止まらない)
始まりました! #pycamp pic.twitter.com/7Fh1Opum6D
— 船坂拓海 (@bouncing_cat) July 21, 2018
手前にちょっとだけ写ってる。船坂くんは大学のときにちょっとだけ関わりがあって、今回、感染に偶然に数年ぶりの再開を果たした。人生ってなんて面白い…!
教材はこちら→ Python Boot Camp(初心者向けPythonチュートリアル) — PyCon JP 。 無料でPythonの勉強ができるので勉強したい人は触ってみても良いかも。
印象に残った質問
何年かプログラミングをやっていると「プログラマーとしてはあまりに当たり前になってしまって説明できない」ことが増えるのはあるあるだけど、それは思考が凝り固まってしまっているということだしエンジニア以外の人への説明力が落ちていることに他ならないと思うので、こういう場で予想していなかったような質問をされるのは思考が刺激されてとてもいい経験になった。せっかくなのでここにもメモしておく。
質問1. 「配列ってなんですか?for...in...で何が起こっているんですか?」
聞かれたコードは↓のようなものだった。
ret = [] for animal in animals: ret.appned(animal) print(ret) # => [cat, dog, ...]
一応チュートリアル内でも記載があって、講師の方も説明していたのだけど、その説明がたしか「配列は数字や文字列などの要素が集まったものです。forは要素ごとに処理を行うものです」というもので、それがあまりピンと来なかったよう。普段だったら自分も正直それ以上の説明は浮かばないのだけど、なんと幸運に先週fukabori.fmに出ていたkakakakakkuさんの話を聞いていたのでその通りに「レジに人が並んでます」、「catさんから順番に処理していきます」、(appendだったので)「今度は隣のレジに並んでもらいます」的な質問してくれたら理解してくれたよう。メタファー大事。kakakakakkuさん半端ないっす。
今日pycampで初心者の方にpythonを教える機会があったのだけど、#fukabori .fmでkakakakakkuさんが話していた「変数は箱です」「配列&forはレジに並んでいる列です」をそのまま使わせてもらったら、とても納得してもらってkakakakakkuさん半端ないって、と心の中で思ってた。
— ikedaosushi (@ikedaosushi) July 21, 2018
この回、超オススメです。
質問2. 「配列使うと何が便利なんですか?」
上の流れで聞かれた。ウワー本質的な質問だ、となって正直難しかったけど、Twitterを例に上げて『お腹空いた』とか『眠い』などのTweetが100個くらい配列に入っていて、それを一気にforとかで回して表示してるから、タイムラインで見れるんだよ、的な話をして一応わかってくれたみたいだった。これに関してはいい例があったら教えてください!
質問3. 「 res = requests.get(url)
が何をやっているか全然わからないです。resには何が入っているんですか」
これはスクレイピングの課題で質問された。これは、質問されたあとに色々考えて、そういえば自分もエンジニア始めたばかりのころ、「URL」と「アクセスしたサイトの中身」の違いがピンと来なかったのを思い出してハッとした。最終的には↓のような図を書いてわかってくれた(気がする)。
「なんでDNSだけフィーチャーしたの???」というツッコミはしないでください。。(笑) 色々しているというのを伝えたかったのです。
難易度と頻度の関係性について
人に教えるのは内容の選抜がとにかく難しい
ずっと講師の方の説明を聞いていて「これは発展的すぎるかも?」とか「これはそんなに使わないかも?」と思ったり、逆に途中から「生徒が中級者多め」という実感が湧いてきて、「これは簡単すぎるのかも?」とか勝手なことを思っていたのだが、最終的にこれ主観で「この内容は合ってない」とか議論してもなんの生産性もないやつだと気付き、習熟度に応じた優先度マップが必要なのでは?という結論に達した。
Pythonで教える内容の難易度と頻度の関係性
というわけでまとめてみた。教える内容としてこういう項目があるよね、というやつ。 網羅性は全然なくて、今日授業を聞いていて思いついたやつをメモっただけ。
習熟度ごとの優先度マップ
そして初心者、中級者、上級者という対象者ごとの優先度マップ。
対象者: 初心者
もちろん難易度は低く、頻度が高いものが最優先。
次が悩みどころだけど、個人的には頻度が低いものより、頻度が高く、もうちょっと難しいものを優先した方が良いイメージ。
対象者: 中級者
中級者は中くらいの難易度で頻度が高いものが最優先、その次が頻度が低い中くらいの難易度、低い難易度のもの。そろそろ頻度が低いものも抑えておこう的なイメージ。
対象者: 上級者
上級者は高難易度で頻度が高いもの=>低いものの順でその後は、より頻度が低く、難易度が高いものをやっていけばいいと思う。
優先度マップについて
議論もしてないし、熟考もしてないので、最初のたたき台というくらいの温度感。 使い方としては、教えるコンテンツを考えるときに優先度が高いものを残し、低いものはできるだけバッサリ切っていくのがいいと思う。できるだけ頭に入れる内容は少ないほうがインプットしやすい気がするので。
まとめ
不特定の誰かに教えるというのもあまりない経験だったし、最近、自分が忘れていた発想にも気付かせてくれたし、参加してよかったと思った。 PyCampでの懇親会でも面白い話がたくさん聞けたし、貴重な繋がりもたくさんできた。また機会があればぜひ!参加したい。