わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

300人のためのCプログラミング授業

いきなりですが問題です.

学部300人を対象とした1年後期のCプログラミング授業を設計してください.

さっそくですが考えてみます.教育効果を考慮すると座学というわけにはいかず,演習室で実施するものとしてプランを立てます.300人同時というわけにもいきませんので,60人を1クラスとして,5クラス別々に授業をすることにします.それと,1年前期に,演習室のPCを使った情報リテラシーは履修済みなのを前提とします.
授業内容について,ベースにしたいのは,現在,2年前期で学科向けに実施しているプログラミング補習です.そこにアレンジを加えます.
学生から見た「1問」は,こんな感じです.

  1. 「課題のWebページ」にアクセスします.ブラウザ上には,プログラムを打ち込む課題が表示されます.テキストエディタとシェルを起動して,打ち込みます.動作確認が終わるまで行います.操作方法やデバッグについては,巡回するスタッフ(教員・TA)の手助けを得ることもあります.
  2. プログラムの打ち込みを終えると,そのプログラム内容,またはその回の授業テーマに関する「共通問題」を解きます.多肢選択式または空欄適語形式です.教室にいる受講者全員が,その共通問題を解きます.プログラミングやバグ取りに手間取った場合でも,ある時刻になるとブラウザの表示が変わり,共通問題を解く時間となります.
  3. その後,教員が共通問題の答えを言い,プログラムの主要部について解説します.
  4. 課題のWebページには,いくつか小問が表示されます.「★」のついた小問は,試験で問う可能性が高いものです.次の課題の時間になるか,授業終了まで,小問を解いていきます.ただし,動作確認を終えていない場合には,それを優先します.
  5. 1回の授業につき,2つの課題が,標準的な90分の授業内容です.

プログラムを打ち込んで,コンパイルと実行(ときにはデバッグも)を行い,小問を解きながら,Cのプログラムの構成を学習していくのは,現在担当のプログラミング補習と同じです.そこに,一斉授業ならではの要素として,共通問題を入れてみた次第です.共通問題を解くにあたり,周囲の学生と話し合ってもよいことにします.
上のやり方でうまく“回す”ためには,課題の準備が必要です.ソースファイルや小問は,これまでの授業を通じて資産がある*1とはいえ,それでも一つ一つ,見直さないといけません.
個々の課題のほか,全体を通じて重要事項を学習しているかのチェックも,大事になってきます.活用できそうなのは,マトリックスです---課題を行,学習事項(演算子,ポインタ,など)を列とし,該当箇所に●を打ちます.そうして授業の全課題に取り組んだら,各事項を適当な回数,学習するかを,点検できるようにしておきたいものです.
小問の出題パターンには,プログラミングの用語を調査して説明(例:「再帰」について説明しなさい),ソースファイルの特定行を説明(例:*p *= 2;によりどんな処理が行われるか説明しなさい),書き換え(例:x行目のbreak;をコメントにしたら,動作がどうなるか説明しなさい/例:受講者全員ではなく合格者(60点以上)の平均点を求めるよう書き換えなさい),等価書き換え(例:y―z行目のif文をswitch〜caseに置き換えて,同じ動作になるようにしなさい),が思い浮かびます.
Webで解答を書いてもらう場合,次のような出題も,実施したいと考えています.まずは単純に,解答を書きます(説明問題がいいでしょう).サーバに送ったらただちに,「この問題に対して,ある学生は次のように答えました.あなたの答えと比較しましょう」と表示されます.自分のほうがいいか,対案のほうがいいか,あるいは2つを組み合わせる(自分の答えを修正する)のがいいか,判断します.こういった出題により,解いたら終わりではないのに加えて,他の学生の意見と照らし合わせる機会ができるわけです.なお,「最初の解答者には『ある学生は次のように答えました』の答えがないのでは?」という疑問については,TAまたは教員があらかじめ作っておくのでいいのではないかと思っています.
まあ準備は自分ひとりではなく(そもそも300人のプログラミング授業を自分ひとりで実施するというのが無茶というか傲慢です),分担の先生方としっかり議論したり,関連する授業の先生方からニーズなどについてアドバイスを受けたりしながら,1年目はそれなりのものを作り,毎年,改良をしていくべきなのでしょう.
改良をスムーズに行っていくためには,動作確認までに要した時間や,共通問題の解答類型の,集計や可視化もしておきたいところです.欠席した学生や,2年以降になって復習したい学生などに向けての配慮も,欠かせません.
本日の授業設計を書くにあたり,プログラミングだけでなく,大学の英語教育や,小学校の算数教育に関して読んできた本も,活用しました.代表して次の2冊を紹介しておきます.

これが東大の授業ですか。

これが東大の授業ですか。

*1:補習科目の最初の課題は,コンパイルのコマンドまで細かく指示し,2番目以降の課題では簡潔にしています.数学関数を使用する課題についても,gccでは-lmオプションを要することを,初回に限り明記しています.それでも演習では,それまでと異なるエラーが続出で,戸惑う学生には「問題文を読み直しましょうね」とアドバイスしています.