Archive for the ‘プログラミング1’ Category

(大学案内原稿) 誌上講義: ペアプロ

金曜日, 12月 9th, 2016

何か去年書いたようなと思って探したら、データマイニング班で誌上講義を作文してたらしい。今年は「ペアプロで書いて」というリクエストが届いたので作文してみました。今回は2パターン用意してねという話で、少し長めに書くこともできるらしい。

450字版。

授業名: [プログラミング1 | プログラミング2 ]

 【N君は戸惑っていた。隣の人と一緒に演習するのは良いが、相手の作業を眺める観察者をやれと指示されたのだ。相手は経験者なのか淀みなくキーボードを操作して一人頷いている。一方のN君は眺めていても今何をしているのか分からない。何をやってるのかサッパリだ。焦ったN君は尋ねることにした。「今、何やってるの?」】
 上記はペア・プログラミングの様子を伝える創作文です。この作文で伝えたいことは2つ、(1)プログラミングに必要な素養は国語、特に伝えたい事を文章や言葉できちんと表現する力、(2)手を動かさないと技術は身につかないということです。
 そこで本科目では「そもそも何を実現しようとしているのか?」を言葉で説明できるレベルまで理解し、その上でプログラミング言語に翻訳するという過程を重視しています。加えて、二人で作業して貰うことで必然的に「今何を考えているのか、やろうとしているのか」を伝え合い、相手の思考を理解しながら歩みます。これにより翻訳過程と思考方法を表現できるプログラマ育成を目指しています。

300字版。

授業名: [プログラミング1 | プログラミング2 ]

一般的なプログラミングの授業形式は従来の英語に似ており、文法中心で話す力は後回しになりがちです。これに対して本科目では「そもそも実現しようとしている対象は何なのか?」を言葉で説明できるレベルまで理解し、その上でプログラミング言語に翻訳するという過程を重視しています。この過程を頭の中だけでやらず、表に出すために「ペア・プログラミング」と呼ばれる手法を導入しました。ペア、つまり二人で作業することになるため、必然的に「今何を考えているのか、やろうとしているのか」を伝え合い、相手の思考を理解しながら歩むことになります。このように過程と思考の表現方法を学ぶことで、応用の効く開発能力養成を目指しています。

(プログラミング1) 授業評価結果

水曜日, 8月 31st, 2016

情報工学科では学生による授業評価結果がweb公開されてます。プログラミング1を初担当したこともあって、純粋な授業そのものへの評価というだけでなく、前年度と較べて大きく違う点があるのかが気になります。英語教科書指定したり、ペアプロ導入したりしてるし。

上記の比較対象が2015年度ではなく2年前の2014年度になってるのは、システムトラブルか何かで参照できなかったため。後で報告しておこう。

Q2のシラバスの効果に関する設問では、「役に立った」が2014年度は29名(約67%)に対し、2016年度は46名(約80%)と大きく向上。実際シラバスや授業ページはかなり細かく準備しており、学生にも受けが良かったようで一安心。一方で、「どこに何があるか」を探すのが辛かったりはするかも。ちょっと整理が必要だよなと思いつつ、整理するのは学生自身のタスクだろうという気持ちも。どうしようかな。

Q3のテキストの役立ち度合いに関する設問では、「とても効果的だった+まあまあ効果的だった」の2つを合わせた数値で比較すると、2014年度は21名(約48%)に対し、2016年度は29名(約50%)。ほぼ一緒ですね。英語でも問題なし、と。一方で、最終課題の取組状況を考慮すると、この29名は恐らく好成績を残した上位陣で英語でも読んでた層。残りの学生は読まずに理解不足(未だに関数やインデントがよく分かってない学生もいる)な層だと想像。教科書読めば一発で分かることが多いですが、読まないのだよな。

Q4の補助教材の役立ち度合いに関する設問は、Q3と類似の傾向。ちなみに、シラバスや教科書、補助教材が「なかった」と回答する学生が例年いますが、正直言ってどうしようもないですね。

Q5の教員説明の分かりやすさに関する設問は、「とても分かりやすかった+まあまあ分かりやすかった」の2つを合わせた数値で比較すると、2014年度は10名(約30%)に対し、2016年度は45名(約78%)と大きく向上。これは説明が分かりやすかったというよりは、ペアプロ演習を増やした点と、C言語よりはPythonの方が取っ付きやすいよね、という2点の影響が大きい気がします。

Q6の板書やスライドの見やすさに関する設問は、「見やすかった」が大きく増えてるか。拡大するようにしてるし。

Q7の教員の声の聞きやすさに関する設問では、誤差ぐらいの改善。

Q8,9の演習中の教員指導のわかりやすさに関する設問ではほぼ同じ。

Q10の講義難易度に関する設問では、「難しすぎた+難しかった」の2つを合わせた数値で比較すると、2014年度は37名(約86%)に対し、2016年度も46名(約80%)とおぼ同じ。最終課題は難しかったしね。

Q11の課題難易度に関する設問は、Q10とほぼ同じ。切り分けにくいよね。

Q12の週平均自習時間に関する設問では、「3時間以上+5時間以上」の2つを合わせた数値で比較すると、2014年度は28名(約70%)に対し、2016年度は18名(約31%)に激減。最終レポートの出来具合からみても「ちゃんとやってるな」と感じるのはこのぐらいの人数なので割と実感にも合ってます。

その他、講義がためになったか(Q19)、講義の理解度(Q20)、あたりはほぼ同じ。

自由記述回答の設問については、
日本語教科書欲しかったとか書いてる人いますが来年も英語のままにします。

ペアプロについて、「ペアプログラミングはコミュニケーションが極度に苦手な人にとっては,休学や中退に至るほどの危険性を伴うものだと,私個人の経験から思っている。そういった人を早期に発見し,何かしらのフォローが出来る体制を整えるべきだろう。」「 ペアの人が予習や復習をしていないと、演習が止まるので、どうしたらいいのか困った。」と指摘してる点については把握しつつも、良い対応が思いついていません。試行的に、後期授業(プログラミング2)で冒頭数週間のペアプロでは「学生自身がパートナーを選ぶ」形にしようかと思ってます。「できる人に習う」よりも「話しやすい人とやる」方が良いかもしれない、という可能性もあるので。

話し方について「少しだけゆっくり話してほしい わからなくなった瞬間に置いていかれて、どこやってるのか全くわからなくなる」という指摘は、そうかも。意識してゆっくり話さないと、かなり早口になっちゃうのだよな。

その他、「助け合わないと単位を落とすと思う」「一番力がついたのは課題の時だと思う。」あたりは狙い通りになったようで、良かった。

(プログラミング1) 最終課題の難易度

木曜日, 7月 28th, 2016

授業最後の週はバージョン管理入門+軽い振り返りと、ペアプロでの演習という塩梅。振り返りがあること以外は普段通りですね。

最終課題「力技で解く巡回セールスマン問題」で学生が相当悩んでるらしく、今週に入ってからちらほら相談に来る学生が出てきました。考え方をあれこれ提示してみたり、具体例で少しほぐしてみたり。問題の分割してみたり、分割した後に機能としてどう設計するか一緒に検討してみたり。

ちなみに、授業で課題提示した時から繰り返し伝えてたつもりなんですが、「(初学者にとっては)相当難しい」です。友人なり先輩なり協力し合って取り組むのを推奨してます。あと、「100%なレポートは求めてない。サブ問題に取り組むも良し、途中段階まででの報告でも構わないからできたところまでで報告してくれ」という話をしたら少しは安心してくれた、かな?

正直、2年次の学生でも「一人では解決できない人」って結構いると思うぐらいの難易度です。でも、問題そのものは理解しやすいので、これをどうコードに落としこむかという過程を見るには良い問題だとも思ってます。これまでに教えた物だけで実現できる問題でもあるし。

来週は期末試験期間ですが、レポート出し切れてない人は集まるようにと指示。ただし、他の科目優先したい等の選択は学生に任せす。取り敢えず来い。

(プログラミング1) 例外とアサーション

木曜日, 7月 21st, 2016

残り少ない授業で何を扱うかと悩みつつ、今日の本題はテキストでも触れてる例外とアサーション。おまけでiris dataset さんにご登場頂きつつPandas + Matplotlibなデモをすることに。途中でポリモーフィズムな話も少し出ましたが、今は「聞いたこともある」ぐらいで十分。まだクラスの話も出してないし。続きは後期にやりましょう。

ペアプロ演習中の質問対応してると、「引数」という用語を理解してない学生がいたりしてシクシクだったりしますが、ま、少しずつ共通辞書作っていこう。どの科目でも一緒なんだろうけど、やる学生とそうでない学生との差は半年間で大きく開くなぁ。

来週15回目最後の日はバージョン管理を触る予定です!これで授業としては一段落かな。最終レポートの対応は置いといて。

P.S.
8/5(金) にスタートアップチャンプルーPROXIMOなるイベントがあるらしい。キーノートも含めてあれこれメンバー凄いな! 「内外の専門家とクリエイターを集め、ライブホールで音楽などのカルチャーとスタートアップが融合したイベント」という謎の融合具合ですが、遠藤先生もスピーカー登場する模様。(皆で押しかけようw)

(プログラミング) 先輩とペアプロ?

水曜日, 7月 20th, 2016

1年次のプログラミング1でペアプロ導入してますが、本来とは異なり、素人同士で組んでるペアが大半です。一部には高校時代に経験のある人も混じってますが、割合的には少数ですね。できれば先輩と組ませてあげたいなと思っていたのですが、何やらやれる可能性はゼロではないらしい。

想像してた方向は、例えば院生がやってるPMのように(別の)授業の一環という形でのペアプロ参加。単に聞かれた質問に答えるような立ち位置ではなく、例えばコーチングなりオブザーバー教育をした上で望んでもらい、1〜2週間に一度サポーター等による報告・問題共有・対策検討を行う場の用意して、教員フォローを含む形での先輩参加を考えていました。実現できるかどうかは置いといて、別の授業を立ち上げる、と。

そんなところに遠藤先生からの情報で、学習サポートを活用する方向はないか、という話が。予算の都合を把握してないですが、やれるんだろうか。

(プログラミング1) テストとデバッグ周りのTips+関数設計Tips

木曜日, 7月 14th, 2016

しつこく繰り返してるミニテストの方は、どうにか正答率8割〜9割にまでたどり着いたらしい。自作モジュールの使い方とか順序付きシーケンスに該当するオブジェクトを選べとかその類の設問ですが、相当繰り返してます。それでもまだ1割強が間違ってるわけですが。

13回目の授業はユニットテストとデバッグ周りの話をしつつ、関数設計というデザイン寄りの一日でした。解説自体は50分ぐらいで終えて、残りの時間はペアプロ演習。演習風景を眺めてると未だに関数実行するところで躓いてる人もいます。関数もオブジェクト同様に扱えるという話をしたせいで逆に混乱させてるという節はあるかも。

関数設計の話は、問題が目の前に提示された時に「いきなりコーディングし始める」のではなくて、タスクを理解・整理してからプログラミング言語に翻訳する必要があるよと。どんな機能が必要になりそうかを列挙するにあたり、各々の機能を「タスクを知らない人間にやってもらうにはどう伝えればよいか」を考えてみよう。まずは日本語で伝えるとしてどう伝えればよいか。相手に教えられるぐらい言語化・整理できたら、それを変数・制御文・関数なりに置き換えてみよう。といった話をしつつ、具体例で学生に質問当てたりしてみるものの、応答が「分かりません」も少なくなくて。うーん。

もっとじっくり時間かけてやっても良いのかもしれないが、うまいやり方ないかなぁ。個々の関数をどう実装するかというレベルの話ではなくて、どういう関数を用意したら良いかというレベルの話。唯一の正解があるわけではないし、間違ってもいいから歩き出すための土台(設計書)を作ろうという話なんですが。

そういうことを求めるレポート課題を出せ、という話でもあるのだろうけど、レポート書けても理解出来てるわけではないからなぁ。(課題の出し方が悪いという話はあるか)

(プログラミング1) 新たなペアで気分一新

木曜日, 7月 7th, 2016

12回目の授業は、dictオブジェクトとfunctionオブジェクトについての用途や事例の解説。おまけでNumpyで線形代数授業のサポートというか手計算の結果確認にどうぞと紹介。個々の機能を教え尽くしても無意味なので事例紹介ぐらいに留めて、残りの時間をペアプロに。時間的にはミニテスト+解説で45分、残り45分でペアプロ演習ぐらいのバランス。

前回までの成績や話し下手具合(?)あたりを考慮して、今日から新しいパートナーに入れ替えました。これで3度目。2度目の調整時には成績(主にレポートの良し悪し)だけを考慮しましたが、どうにもペアプロにならないペア(何度指導してもドライバー・オブザーバー共に機能しないペア)がでてたのですが、3回目のペア初回を見る限りでは何とかなってるようです。相性といえばそうなのかもしれませんが、もう少し卒なく調整したいな。(指導した)先輩に入ってもらうのが一番やりやすそう&効果高そうなんだけど、うまいこと仕組み作れるかしら。

ペアプロ時にやる内容として「(レポートとは切り口が異なる)演習」を用意してあって、例えば今やってもらってるのは簡易ガチャ・シミュレータ。細かくサブ問題にしてありますが1演習の中では一連の流れを想定してタスク化してあるので、やるタイミングが1,2週間空けると思い出す時間が必要で。そこで前回は90分丸々演習の時間にしてみたのですが、これはこれで集中力が続かないようで中だるみがやや出てる雰囲気を感じました。もしくは、「喋りながらやる」こと自体が大きいエネルギーを必要としてるという話?。どんな要因にせよ、ペアプロ90分連続は無謀っぽいか。何かしら休憩挟むのが良いのかも。

(プログラミング1) ペアプロ演習な日

火曜日, 7月 5th, 2016

昨日終わった11回目のお話。

前回の「先生役やらせて解説させる」の実習版ということで、11回目は演習だけをやることに。ペアごとに進捗の差が大きいのは仕方ないとして、余裕のある(進展の早い)ペア用に演習8まで用意してたんですが、90分ではどこもそこにはたどり着かなかったらしい。ま、良いか。

進捗確認する限りではこんな分布でした。

  • 7.2まで終了: 16人 (約25.8%)
  • 7.3まで終了: 12人 (約19.3%), ~7.3まで: 約45.1%
  • 7.4まで終了: 7人 (約11.2%), ~7.4まで: 約56.4%
  • 7.5まで終了: 17人 (約27.4%), ~7.5まで: 約83.8%
  • 7.6まで終了: 2人 (約3.2%), ~7.6まで: 約87.1%
  • 7.7まで終了: 4人 (約6.4%), ~7.7まで: 約93.5%
  • 7.8まで終了: 4人 (約6.4%), ~7.8まで: 100%

ペア単位での報告ではなく個々人で報告してもらってるからか、奇数になってる報告があるのはやや謎ですが、些細な差ということでひとまず無視。

若干問題なのは、90分時間かけてたにも関わらず7.2までしか逐われなかったペアが45%もいること。ユニットテスト書けという演習なんですが、ここで詰まる学生が物凄く多いらしい。ユニットテストを書くレポートも終えてるのを考えると、ここで詰まりまくるのはちょっととても大分悲しい。ちなみに、いくつか対話に耳を傾けたり質問対応してた限りでは「そもそも書いてあることを読んでない」ケースが多いように感じました。「乱数をどうやってテストするの?予知するの?たまに当たれば良いの?」で悩むという。補足書いてあるのに。。(補足を読んだ上で「範囲内に収まってるってどう書くの??」で詰まるペアもいたけど、この詰まり方は想定内。)

別の詰まり方あるあるは、関数で return 書かずに print させてるケース。何故か実行結果が変数に代入されてないとか、Noneになってる理由がわからないとかで悩みまくるという。うん、1歩ずつ前に進もう。

大きな問題点としては、2回目のペア作成時点での成績からは順位の入れ替わりもそこそこあって、特に「成績とは無関係に自分からはしゃべらない人たち(聞かれたら応える)」同士でのペアがにっちもさっちも進まない状態になってます。何度も指導してみてましたが改善せず。うーん。

ということでそろそろ3回目のペア交換時期かなーと、ペア調整を始めています。残り数回のみですが、考えてることを言葉にして、分からないことは質問できるようになって欲しいのだけど。

レポートとペアプロとで「違う側面を見れてるな」という実感はあるのだけど、やっぱり本来のやり方(経験者にobserverしてもらう)とか、書いたコードを対面でレビューするとかの方が効果は高そうだなー。(対面レビューは少人数の実験ではやってます)

(プログラミング1) 学び方を学ぼうということで調べ方を整理

木曜日, 6月 30th, 2016

10回目はリストと文字列操作をざっくりと眺めるぐらいに留めるか悩みましたが、結果としては解説することにしました。「失敗ケースあるある」の一つ、リストをfor文で回してる間にそのリスト自体を追加削除してしまうという事例について。

後は「細かいリスト操作・文字列操作の類は調べて使えるようになろう」ということで、help(), リファレンス、インタプリタ上での補完を利用した調べ方をやることに。

これらと、レポート3の「先生役やらせて解説させる」の時間とでほぼ授業終了。残った時間は自習にイベント紹介(by いんぱるす先輩)に、シラバス振り返りを通して達成目標の再確認して終わり。

解説させる件は、それなりに意味があったように思います。準備させてスタートしたら時間カウントダウンするぐらいですが、割とまじめに取り組んでくれてたので。ただし一部にはどうしても準備不足な学生もいて、そっちへの対応が難しく。授業とは別の時間なら個別対応するんですが、授業中には「レポート準備できてないなら教科書開いて、はい、ここで説明して」と指導するぐらいしかやれず。準備できてないならそこで止まるわけで、にんともかんとも。

欠席・レポート未提出具合からすると1割ぐらいは単位でない可能性もありえるのだけど、大丈夫かしらん。

プログラミング1サポートありがとうございますおやつタイムのご報告

木曜日, 6月 23rd, 2016

呼びかけの結果、参加希望8名のところ7名参加で美味しく頂きました。

プログラミング1の成績はレポートの比重が高いのだけど「テストはしないの?」という話題が。やってみるのも一興ではあるなw シラバスには書いてないので、成績とは無関係ということを伝えた上でやる分には面白そう。課題理解含めて90分で終わらせる分量のテストってどんな感じかなぁ。