memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

プログラミング課題の昔と今、そしてこれから(私見)

これまで

学生のときに、プログラミング課題といえば、問題が出されて期日までに書いて出すというものだったと思います。私はずーっとこの体験をもとに自分の担当授業でも同様にやってきました。課題の提出期間はだいたい1週間としてきました。

教員から見れば内容的には1週間もかかるようなボリュームではありません。演習授業内で終わればそのまま出して終われる内容のはずですが、完成できなかった学生を考えて1週間としてきました。その後は受け取らないと宣言してきました。もっと昔は1週間経過した後もずーっと提出を許可していて1週遅れるごとに減点していくなどもしていました。結局、延ばしたところで、試験の直前にまとめてレポートを出すという学生が出てくるだけでした(←ちなみにこういう学生はほんの数名です)。

20年近く、プログラミングを指導していますが、結局わかったことは、やる人は言われなくてもやるし、やらない人はどんな手を使っても逃げ道を探す、ということです。これは学生(社会人も?)の本質ということです。対象に興味がある、あるいは意義を感じている人以外は、できるだけ効率的に通過したい、人として当然の行動といえるでしょう。

今期の計画

結局、色々な思いをもつ学生を相手に1つの方法で教育するのは無理があるということなんじゃないかなと思い至っています。そこで、単位取得のために最低限やってほしいことといえば、せめて理解していないとしても自分でプログラムを入力し実行し結果を出すところまではやってほしい(それが少なくとも経験にはなるはず)ということです。

そこで、これまでは実技試験70点、課題30点としていたところを、実技試験30点、課題70点に変更してみました。以下にも書きました。

memorandums.hatenablog.com

これで課題をやって期限までに提出することで単位取得が保証されます。課題をやればとりあえず単位取得できる。レポート作成までの体験は少なからず「演習科目」としては意味があるだろう。ただし、それを100点にしてしまっては評価していないのとほとんど同じなので、授業評価アンケートで「他人のレポートをコピーして出して高得点取っているのは納得行かない」というコメントをもらったりしたことがあります。そこで30点分の実技試験では、ちゃんと理解していないと解けない問題を出し、そこで評価しようという流れにしてみました。

そして今

そんな計画を立てて4週間が過ぎました。前期はプログラミング演習科目を2科目担当しています。2年生と3年生です。2年生はAtCoderの問題を90分で2問くらい解いてもらうものです。解答も事前に公開しています。わからない人はそれを見ながらでいいので取り組み、最終的に解答をみないで解けるようになってください、と伝えてやっています。演習中は学生はそれぞれのペースで問題に取り組んでいます。昨年までは解説してから取り組んでもらっていましたが、今期は僕はしゃべりません。つまずいた学生をフォローするだけです。ただ、後日、解説動画をアップして見れるようにしています。先週、授業アンケートを取りました。以下、いくつか画像を示します。概ね、期待した回答だったと思います。ちなみに2年生は少人数ですが、3年生は80名くらいいます。どちらも回答内容は似たような感じでした。

2年生は解答をつけていますが、面白いことに、ほとんどの学生が解答をあまり見ずに自分で解こうとしてくれるんですね。。。これって何なんでしょう?ちなみにこの授業者はエンジニアリングコースの学生で他コースより必修科目が多いコースに所属している学生さんです。興味がある、あるいは身につけたいという意識が高い学生さんが多いのだと思います。

一方、3年生の授業では、今のところ解答をつけずに、課題提出締切後に解説動画(解答)を公開してきました。こちらは全コースの学生が受講できるため意識にはばらつきが見られます。一生懸命やろうとする学生とそうではない学生がいます。そうではない学生の方がなぜか課題提出が早かったりします。過去問が出回っているのか、もしくは、優秀な子が解答をばらまいているのか?わかりません。

これから

そういうことをするくらいなら、問題文に正解もつけておいた方がいいんじゃないかな。。。と思いました。ぐぐって意図しない解答を導くくらいなら、正解を参考にしながらでも演習時間にレポートを自分で完成させる行動をしてもらった方がよっぽど本人のためになるでしょう。大学あるあるかもしれませんが、変な解答が裏で回る(回っているかどうかもわかりませんけどね)ことを常態化するのもどうかと思います。

上記の通りで、自分で解きたいという学生は解答があっても自分でやるでしょうし、もし、つまずいてちょっとわからない。。。というときに、正解を見ながら「なるほど」と思ってもらえばいいでしょうし。

そう考えるとですね。

プログラミング課題って、問題とセットで解答も置いておくってもしかするとありなんじゃないかな。。。と思います。解答を見ながらでも(最初は自分の頭で考えなくても)プログラムを作ることで形として覚える可能性があるのかもしれません。わかりませんけどね。

これまでの考え方では、教員が学生のレベルを考えて問題の難易度を決定してきましたが、解答を事前に配布して課題に取り組む環境に変えることで、受講者自身が自分の感覚で負荷調整するようになるだろうということです。理解度の低い学生は答えを見ながらやるのでしょうし、理解している学生は答えを見ないで自分でやろうとするでしょう。

私がやりたいことは、90分という演習時間をいかに本人らにとって有意義な時間にしたい、です。そのためには、個々の学生にとって適度なストレスを感じつつ、個人のレベルに合わせた内容の教育を実現する方法が必要になります。それが何であるかはわかっていません。

ちょっと前に何かの機会に「学習の個別化」をキーワードとして挙げているということを知りました。図らずも同じことを考えていたんだな。。。と思います。15回目に授業アンケートを再びとりどう変化したか見たいと思います。機会があれば論文にします。

僕としてはもっと単純で「プログラミング、難しいけど、できるとオモシレーなぁ」って声に出して反応して欲しい、それだけなんですけどね。。。そう思えるためには、学生ごとの事情に合わせた適切な負荷コントロールが必須だという考えに至りました。でも、これって簡単なようで難しいんですよ。。。

ということでオシマイ。