こんにちは、maboです。
この記事は夏のアドベントカレンダー2018の9/5の記事です。
結構前に研究室のゼミで教えてもらったことについて書いてみようと思います。
ぽっと聞いてちょいと調べた程度の知識で書く都合上、少し間違った記述があるかもしれませんので、ご注意ください。
前置き
私は東工大にいるのに「教育工学」とかいう理系っぽくない分野の研究をしています。今回の内容も、教育系っぽい話を含んでいます。できる限り噛み砕いて書くつもりですので、気楽に読んでください。
ガニェの9教授事象とは?
今回書こうと思うのは、「ガニェの9教授事象」というものです。これは簡単に説明すると、授業の構成を考える時や自分で勉強する際は「導入→情報提示→学習活動→まとめ・復習」という流れを意識しよう、という教授理論です。
人間には、二重貯蔵モデルという記憶モデルがあります。
まず、目や耳から入った情報は「感覚登録器」に瞬時に記憶されます。これは1秒とかごくわずかな時間しか記憶に残りません。ぼーっとしながら道を歩いていた時に、「今すれ違った人の服の色って何色だった?」と聞かれても思い出せないのがこれです。
「感覚登録器」で得た情報のうち、意識して受容した一部の情報は「短期記憶」(ワーキングメモリとも言います)に記憶されます。「短期記憶」に記憶された情報は数十秒ほどしか記憶を保持できず、記憶できる情報量には制限があります。容量は確か5~9チャンクとかだった気がします。
さて、「短期記憶」だけではたくさんの知識を長いあいだ保持する事はできませんので、覚えておきたい情報は「長期記憶」へ移します。「長期記憶」は、大量の情報を長期間保持できるので、いろいろな事を覚えるのに役立ちます。ただ、「長期記憶」ではすばやい情報の引き出しはできませんので、覚えた知識を使う際は一旦「短期記憶」に読み込んでから使います。
「短期記憶」と「長期記憶」は、コンピュータのメモリとハードディスクの関係と捉えるとわかり易いです。
さて、この記憶モデル従って、効率よく学習するための教授理論が「ガニェの9教授事象」です。学習や授業を以下の9つの流れに沿って行うと良いというものです。
内容 | イメージ | 効果 | ||
---|---|---|---|---|
導入 | 1 | 学習者の注意を喚起する | こんな困ったことがあるんだよなぁ | 感覚登録器から短期記憶に情報が移りやすいようにする。「ぼーっとしてたら聞き逃した!」を防ぐ。 |
2 | 授業の目標を知らせる | 今日の目的って○○なんだなぁ | 目標を提示する事で全体像を見えやすくし、感覚登録器→短期記憶→長期記憶という情報の転移が行われやすくする。「ずっと説明が続くけど、これ何の意味があるの?」を防ぐ。 | |
3 | 前提条件を思い出させる | そういえば○○っていう事を前にやったな | 必要な知識を長期記憶から短期記憶に移す。「前にやった事の応用なんだろうけど、前やった事があやふやだ…」を防ぐ。 | |
情報提示 | 4 | 新しい事項を提示する | ○○っていうことがあるのか | |
5 | 学習の指針を与える | ○○ってこう覚えればいいのか | 短期記憶から長期記憶に移す手伝いをする。多くの人は「定義をペラペラ説明されても覚えられないよ~」となってしまうはず。 | |
学習活動 | 6 | 練習の機会を作る | ○○を使って何かやってみよう | 長期記憶から短期記憶へ情報を移す訓練をする。一般にいう「知識は繰り返し使わないと覚えられないよ」というやつ。 |
7 | フィードバックを与える | やってみたけど上手くいかなかった、なんで? | 理解の間違いを正す。 | |
まとめ | 8 | 学習の成果を評価する | 章末問題やってみた、どれだけできたかな? | 提示された情報をどれだけ長期記憶に記憶して引き出せるようになったかを確認。テストみたいなやつ。 |
9 | 保持と転移を高める | ○○って他にも使えるかな? | 時間を置いてから使う機会を設けることで、記憶を長持ちさせる。「1週間前に書いたソースコードは何書いてるかさっぱりだ」みたいなのを防ぐ。 |
具体例として、「c言語のif文を教える」について考えてみると、次のように教える事ができそうです。
- 例えば、自動で動く車を作っているとして、まっすぐ動くだけだと壁に激突する。壁を見つけたら止まるようにしたい。(どんな時に使えるかの例であればなんでもok)
- if文とは条件分岐。これを書けるようにしよう。
- 前に、変数について学んだはず。printfもscanfも習った。
- if(条件){処理}
- if文を書く際には、条件とやらせたい処理はそれぞれ何かを考えるのがコツだ。例えば、壁までの距離dxと、スピードvをプログラムで分かっているとする。壁までの距離が1くらいに近づいた場合(条件)にスピードを0にする(処理)というプログラムを書くにはどうすればいい?(例えば「if(dx<1){v=0;}」と書ける)
- 参考書の練習問題をやらせてみる。
- プログラムをフィードバック
- 参考書の章末問題をやらせてみる。練習問題の数値を変えた類題でも良い。
- if文の先の概念であるif-else文や似ている概念のswitch文を勉強させてみる。for文を勉強した際に、for文の中にif文で処理を分岐させることをやらせてみる。
これは何の役に立つの?
今回の記事はここまでです。
……と締めたいところですが、全くtraPっぽい内容ではないので、こいつをtraPっぽい話に繋げてから締めようと思います。
traPはゲームを作ったりする他、プログラミング教室を開いたり、内部で講習会をしたりといった「人に物事を教える」という機会があると思います。こういう教育系の知識は、そういった場面で役に立つのではないでしょうか?
そもそも、ゲームを作る際にも役立つ知識だと思います。ほとんどのゲームには、プレイの流れであったりルールがあったりがあります。これらは分かりやすい事も大事ですが、分かりやすく説明する・理解しやすいように提示するというのも大事なのかなと思います。ゲームの分かりやすい例だと、チュートリアルがそうですね。
という事で、今度こそ今回の記事はここまでです。
ここまで読んでくださりありがとうございました。
参考文献
「学習設計マニュアル」(鈴木克明・美馬のゆり 編著)