わさっきhb

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

「Webプログラミング演習」について

2011年になりました.今年もよろしくお願いします.
年末に,現在2年生後期で担当している通信プログラミングを変更して,Webプログラミング演習を実施してくれないかと打診がありました.学科会議で結局,来年度からの実施とはしないという結論になりましたが,この演習,それからプログラミング教育に関して,思うところを述べておきます.今回も何割かは,同僚向けに作成したメモをもとにしています.

これまでの通信プログラミング演習担当について

私はNAISTで1年間の勤務後,1999年4月に今の大学に着任しました.助手の授業担当は年間を通じて演習または実験を1科目担当とのことだったので,TCP/IPを担当することになりました.
最初の科目名は,情報通信システム演習IVで,演習テーマはTCP/IPPrologLispからなっていました.なのですがほどなく,TCP/IPと残り2つは内容的に大きく違うということもあり,分離され,PrologLispは現在,3年後期向けの知識システム演習という科目で実施されています.
私の演習担当については,科目名変更はあったものの,2年後期(4セメ)の週2コマ演習のうち何割か担当というのは変わらず,2003年度より情報ネットワーク演習という科目になって現在に至ります.2人の教員が50-50で担当しています.もう一人の先生のほうが指導が丁寧という評判です.
通信プログラミングに関して,今年度,かなり内容を変えました.手短に言うと,

  1. 通信プログラム(コードを与えて*1デバッグさせる.終了時に面談)
  2. Apacheビルド(手順はシェルスクリプトで記述)
  3. HTTPクライアントまたはサーバアプリケーション(クライアントはC,サーバは任意.企画面談と最終面談)

です.中間で“だれる”ことを防ぐために,課題の達成状況にかかわらず,第5回は学生番号奇数の者,第6回は偶数の者を面談しました.加えて,第2回と第6回終了時のファイルに対してコードレビューを実施し,各受講生にはその次の回までに改善箇所をメールしました.
また両面印刷の進捗シートを初回に配り,随時記入させました.面談終了時に捺印またはサインをし,最終課題の最終面談を終えると,受け取りました.裏面には,「ファイル管理」と「質問」に関する記入欄を設け,svnまたはgitを用いたバージョン管理や,頻繁な質問を,加点要素*2としました.

もし担当するなら

さて,Webプログラミング演習を担当をするとなったら,と少し考えてみました.
条件が付きました.3年後期に実施です.3年前期のデータベース演習と,関連させられないかという意図です.ということは,サーバアプリケーションですね.隣の研究室が企画してうちの学生が乗っかかっている,3年ゼミ(DBゼミ)の縮小版を演習科目として実施すればいいのでしょうか.サーバのデータの持ち方や,画面などの設計(狭義・広義のデザイン)もさることながら,Webプログラミングの技法やツールの習熟も欠かせませんね.
内容に関して,科目担当はまったく問題ありません.これまでどおり,これまでの実績や,学内外の情報をもとに,何年かかけて改善していけばいいのです*3TCP/IPに関しては,現在50-50で担当している,もう一人の先生にお願いすることになります.
教員負担や演習室確保の課題は,解決しないといけません.これですが,現在の情報ネットワーク演習を,2つに切ってしまって,週1コマ(1単位)の演習科目2つにすることを,実際に学科会議で「可能性の一つ」として提案しました.1コマにすれば,見た目の教員負担は変わりませんし,授業時間の設定がうんとしやすくなります.まあ今のままで6セメ移行は,応用実験と重なるんで,こちらが動かないといけないのですけど.
3年後期の実施には,少々魅力というか誘惑もあります.教員の示す課題に従って,仕様どおりに動くプログラムを作るだけでなく,「何を作るか」「なぜ作るか」「どんな着想や手段(開発言語・ライブラリなど)で作るか」を徹底的に考えさせたいものです.調査時間も,とります.KJ法マインドマップなどの発想法を取り入れたり,セキュリティ・アクセシビリティユーザビリティなどに配慮した設計・実装ができたりすると,よさそうです.受講者ごとにWikiを運用して,各自の進捗や調べたことを書けるようにしておき,それも評価対象とすれば,科目限定のラーニングポートフォリオができます.
もう一つ,考えるべきことがあります.必修にすべきかどうかです.やり方次第で,社会に出てから,あるいは研究室でちょっとした管理をするのに,役立ちそうな実践的な演習課題とすることができそうです.
なのですが,3年後期の必修は,卒研着手条件との兼ね合いで,落としたときの損失が大きすぎます.研究室に配属しているので,学生本人だけでなく研究室の先生にも,不合格になりそうなら連絡することはできますが,その種の管理を期間中にするのは手間です.正直なところ,必修としての実施はリスクが大きく,慎重でありたいと考えています.

そもそも,学生に何を身につけてほしいか

それなりにプログラミング教育に携わってきたし,今後も改善を図りたいと考えているのですが,しかし,より大きなレベル,あるいはさまざまなレベルで,学生に何を身につけてほしいのかを,十分に検討すべきときが来たように,思うようになりました.
今すぐに答えは出ません.かわりに,「さまざまなレベル」というのを洗い出しておきますと,各セメスタ終了時*4を基本として,そこに「3年配属時」「卒研着手時」「卒業時」,それと大学院について「修士修了時」「博士終了時」を加えるのがいいのでしょう.
「就職活動前」というカテゴリは,必要でしょうか.いつなのかが明確ではないので,取り入れにくいのですが,そういう種類のものも,あってよさそうです.これから導入されようとしている,キャリア教育も入れるべきでしょうか.大学としてのキャリア教育はより一般的であるのに注意しつつも,学生にとっては,学科で学んだ専門的な内容と結びつけ,個々に未来を見据えて自主的・自律的に行動できるようになるといいのですが.

これからのプログラミング指導に必要なこと

これからのプログラミングの指導,また学習において,必要なことは,「コミュニケーション」,これしかないでしょう.
画面と自分が1対1というのが,プログラミングの全てではありません.時間としてはそれが大きな比率を占めますが,課題達成のための重要度としてみると,決して高くはないのです.対話を通じて,自分の足りないところを埋め,効率良く確実に実施できる方法を探る…直接教えてくれるとは限らない…ことが,必要不可欠です.
誰と誰とのコミュニケーションなのか,言ってみれば,コミュニケーションチャネルは,いろいろあります.教員-学生は基本中の基本.その他にも,TA-学生,学生(受講生)同士,科目内の教員同士,科目外(学科内)の教員同士,などが考えられます.
私が関わっている範囲内で,そのコミュニケーションにより得られる情報を,「消え物」とせずに,担当授業の総括に,あるいは他科目や次年度以降に,使えるようにできないか…たぶん当雑記で綴っていくというのでは不十分であり,ここでも,より良い方法を模索していくべきなのでしょう.

*1:夏休み明けであること,低水準入出力や名前解決といったこれまでにない概念・技法を前提とすることから,プログラムをfrom scratchで書かせることはしません.

*2:プラス何点という単純な加算ではなく,成果物に対する点数付けを,直線的(比例)ではなく少々上に凸にしようかというくらいです.

*3:初年度は,演習としての完成度が低い一方で,受講生にとって本当に面白い課題に取り組めるチャンスが高いと言えます.

*4:4年前期の7セメは,考えなくていいでしょう.