Processing Advent Calendar 2014 参加記事

私は現在、大学院の修士1年なのですが、
大学院生になるとティーチングアシスタントといって、
先生の補助として仕事を請け負うという活動を行います。
テストの監督や答案の採点、あるいは実験の補助などが主な内容なのですが、
私の指導教官がプログラミングの授業の担当ということで、
その授業で教壇に立つことになりました。
授業内容はもちろんProcessing(+α)です。
対象は、学部2年生のプログラミング演習の授業と、
学部1年生の情報リテラシー実習という授業です。
この記事では、授業の内容や、受講生の反応、
Processingによる教育的効果についての考察を述べます。

学部2年生の授業について
授業の目的と内容
学部2年生前期に「プログラミング演習」という必修授業が行われます。
別枠でアルゴリズムに関する授業が開かれているので、
そちらで学習したことを実際にコードに落としこんで理解を深めるというのが目的です。
演習に利用される言語はC言語です。
これは私たちの学科が「情報電気電子工学科」という多分野について研究を行うものであるため、
共通の言語として扱えるよう、カリキュラムに組み込まれています。
2年生を80名ずつ2クラスに分け、それぞれを別の先生が担当します。

授業の内容としては、アルゴリズムの授業で学習した各種ソートを実装するというものです。
毎週課題が5問ほど提示されるので、それを授業時間を利用して実装を行います。
時間内に終わらなかった場合は締め切りまでの宿題となります。
課題はWeb上に提出し、合否はシステムが判断します。
この辺りのしくみは競技プログラミングやCTFに近いです。
なお、提出は何度でも可とされていました。

また、受講生は1年生後期にC言語の基本的な使い方に関する授業を受けています。
その中でProcessingについても説明を受けています。

Processingをどのように取り入れたか
毎週の授業の冒頭に、Processingについての説明を行いました。
その時に配布した資料を以下に掲載します。
Processing資料(1) Processingの基本
Processing資料(2) 再帰
Processing資料(3) 色の指定
Processing資料(4) アニメーション
Processing資料(5) 正弦波と極座標
Processing資料(6) 様々な図形
Processing資料(7) マウスとキーボード
Processing資料(8) 文字
Processing資料(9) モード
Processing資料(10) リファレンス
私が教壇に立ち、上記のスライドを見せつつ解説を行いました。
解説では、受講生にProcessing上でコードを実際に動かしてもらったり、
時間があれば演習問題に取り組んでもらいました。
この解説は毎回10分〜15分程度でした。
その後は上で述べたC言語の課題に取り組んでもらいました。
なお、解説の内容や順番は指導教官と相談し、
場合によってはC言語の課題と関わりのあるもの(再帰など)を選択しました。

学期末の試験のかわりとして、Processingの課題に取り組んでもらいました。
テーマは「独創性のある作品」でした。これは指導教官が出したものです。
個人、もしくは適当な人数のグループを自由に組み、制作してもらいました。

受講生の取り組み
受講生はProcessingの解説について真剣に聞いてくれたと思います。
スライドを配布しているにも関わらず、ノートにメモをとっている受講生もいました。

学期末の課題では、ゲームを制作した受講生が多かったように思います。
タイピングゲームやテトリス、シューティングゲームなど、力作揃いでした。
こういった力作はたいてい、プログラミングに関心のある受講生が中心になり、
グループで制作していたようです。
また、授業では解説していないオブジェクト指向プログラミングについて自主的に学習を行い、
実装している受講生もいました。

Processingの活用
「データの可視化」についてProcessingを試験的に利用しました。
ひとつはC言語の課題の提出時間の可視化です。
1128210924
縦軸に日付、横軸に時間を取り、提出回数を記載しました。
空欄になっている箇所は提出がなかったということです。
また、提出回数の値にあわせて、円の大きさで示しました。
回数が多いところはある程度大きめの円で色を分けることで示しました。
(円が大きくなりすぎると不格好なためです…この辺りのまとめ方は統計に詳しい方に一度相談してみたいです)
この図を見てみると、授業が行われた5月23日金曜日の14時〜17時の提出が多いことがわかります。
(2クラスが別々に入れかわりで授業を受けているため。)
また、課題の提出締め切りは火曜までとしていたのですが、
その火曜日の夕方〜夜にかけても提出回数が多く、ぎりぎりまで粘っていることがわかります。
特に、4限の授業は16時に終わるため、それ以降にどっと増えています。
さらに、遅れて提出している人もいることがわかります。
土日は提出回数が少ないということもわかりますが、これはどの課題でも共通していました。

また、提出された課題の合否についても可視化しました。1128211135
左に並んでいる数字は問題番号で、緑の領域は合格した回数、赤の領域は不合格だった回数を示しています。
課題は何度でも提出できるため、受講生の人数よりも多い数字が出ています。
2問目が最も不合格の回数が多く、それが関係してか、
3問目以降の合格数が少し減少しています。
また、5問目は感想を書けという設問だったのですが、
問題を解くだけで提出している受講生が多いことがわかります。

学部1年生の授業について
授業の目的と内容
学部1年生前期で「情報リテラシー実習」という必修授業が開かれます。
主にLinuxの基本的な操作についての授業です。

学期末に、プログラミング学習の導入としてProcessingを紹介しました。
90分一コマで、こちらも80名の受講生に解説を行いました。
資料については指導教官が用意してくださったものを使用しました。

大学に入学して初めてのプログラミングの授業ということで、
まずはPDE(Processing開発環境)の導入から行い、
プログラミングの基本的な要素(分岐、繰り返し等)や
Processing独自の文法や関数について解説しました。
この一連の内容が90分以内に収まりました。
かなりコンパクトに収まったことに私自身、驚いています。

受講生の反応
「プログラミング」とはいえ、最初は地味なものになりがちなため、
わざと「これはゲームではこのような場面で使われています」という説明を多めに行いました。
例えばif文の解説の時は、
「ゲームだと、『このダンジョンは鍵を持っていれば入れます。持っていなければ入れません』というような条件分岐がありますよね?そういったしくみがまさしくこれです」
といったような感じです。
やはり「ゲーム」という言葉を出すと、解説を聞く態度が変わったように思います。
よそ見をしていた受講生が、こっちを向いて話を聞いてくれるようになった気がしました。

また、Processingで実際に図形を描いたり動かしたりした時には、
積極的に変数の中身を変えたり、文を入れ替えたりといった操作を行う受講生が多く見られました。
こういった試行錯誤からプログラムのしくみが見えてくるわけですが、
このように気軽に操作できるのはやはりProcessingの強みであると感じました。

指導教官からのコメント
このように授業に取り入れたことに対し、指導教官にもお話を伺いました。

まず、授業に取り入れたきっかけについては、
私からProcessingを推されたことと、
従来のC言語による学習はコンソールのみに留まってしまうことで受講生にとって面白みがないだろうということからでした。

実際に授業に取り入れたところ、
学期末に提出された課題がどれもいきいきとした作品ばかりだったので、
取り入れて良かったと思われたそうです。
特に、ゲームを制作した受講生が多かったので、
これは従来のC言語のみの授業ではできなかったことだと関心されたそうです。
しかし、そういった複雑なプログラムに対しては、
むしろネットからのコピペが気になってしまうといった不安もあるそうです。

従来の授業と比較すると、受講生が楽しそうに学習に取り組んでいたので、
モチベーションの向上が見込めるとのことでした。
従来のC言語のみの学習の場合は、
計算機の構造をよく理解していないままC言語に入門することから、
かなりの数の受講生がどこかで一度はつまずいてしまい、
最悪の場合、モチベーションの低下を招いてしまうという問題がありました。
しかし、まずはProcessingのような簡単な内容から入門することで、
プログラミングを好きになってもらうことから始める方が効率が良くなるのではないか、というのが結論だそうです。
また、計算機の構造をみっちりと詰め込んだ上でC言語を教えるのは、
時間やカリキュラムの編成上難しいこと、
そして何より、受講生のモチベーションが心配であるということでした。

学科の方針として、「デザイン能力」「他人と協調的に制作や作業をやり遂げる能力」「発表や討論ができる能力」という3つの能力の養成を目指しているそうですが、
Processingの学習はこれら全てをカバーできる良い教材であるとおっしゃっていました。
ちなみに、デザイン能力というのは定義があいまいで、
「設計」という意味も「配色や情報の配置の最適化」という意味も、両方含んでいるのだそうです。
また、こうして広い分野からざっくりと学習することにより、
自分の興味関心や適性に気づき、そこから将来を考えるきっかけにもなるだろうとのことでした。

Processingは導入から基本的なことを教えるまで、時間的に非常にコンパクトにできるので、
つまずいている受講生のフォローに時間を取りやすいという利点もあると思われたそうです。
興味関心を持って自分から学習に取り組める受講生についてはどんな内容であれ放っておいても良いのですが、
つまずいている受講生についてはフォローをしないと心が離れてしまうという危険性があります。
そういった面では、Processingは楽しみながら学習できることもあって、
非常に有効であるとのことでした。

今後については、今回行ったように、
どんどんコードを書かせるという方針で行きたいそうです。
Processingの特性であるプロトタイピングな考え方で、
受講生にどんどん学習を深めていってほしい、とのことでした。
ただし、「ツールの使い方」に終始することなく、
プログラミングの本質についてしっかりと理解してほしいということでした。

プログラミング教育に携わってみて
こうしてProcessingを大勢の受講生の前で教えることができ、とても嬉しかったです。
特に、意欲的に制作を行ったり、コードのしくみを理解しようと試行錯誤している受講生を見ると、
こちらも手応えを感じ、やる気がわきました。
「Processingは教育的にどういった面で効果があるのか」を実際に観察することができ、
また、その効果について指導教官にお墨付きをいただけたことについても、
Processingを愛し研究している人間にとっては非常に喜ばしいことでした。
今後も、こういった「Processingと教育」については考えることが多々あると思っています。
学習者に対してより充実した教育を行うにはどうしたらよいか、
これからも考察を続けていきたいと思います。