事例51

「エイリアンとの交信」を題材とした

プログラミングとアクティブ・ラーニング

神奈川県立津久井高等学校 大里有哉先生

STEP1 プログラミングとアクティブ・ラーニングについて

現在、小学校・中学校・高校と体系的にプログラミングを学習していくことや、次期学習指導要領にはアクティブ・ラーニングが指導方法も含めて提示されるなど、「プログラミング」と「アクティブ・ラーニング」はいろいろなところで話題になっています。情報科では、今後どのようにこれらを取り入れていけばよいのでしょうか。

 

「プログラミング教育」というと、文系出身の私の経験では、大学ではほとんど写経に近く、ほぼ写して課題を出して終わりでした。そういうイメージを持っている方もいらっしゃると思います。けれども、私の授業では、生徒がいかに主体的に学んでいくことができるのかということを考えて実践していきたいと思っています。

 

アクティブ・ラーニングにはいろいろな定義がありますが、生徒がまずアクティブにならなければならないということで、生徒が主体的に活動します。それに加えて教員もアクティブということで、アクティブな生徒たちについていかなければいけないという気持ちでこの単元を構成しました。

 

この授業では、生徒がワクワクして、楽しいと思えること。また、楽しいだけでなく、この先もっとプログラミングを勉強したい、実生活ではこういうふうに使われているのだということを肌で感じられる授業を心がけて実践しました。

 

今回は、「情報の科学」の授業の中でこの単元を設計しました。まず意識したのは『コードの記述』です。プログラミングについては、最終的にはコードに持ち込むということを意識しました。

 

2つ目は『手順化』です。ステップに区切って、スモールステップで学習ができるように心がけました。

 

さらにアクティブ・ラーニングということで、ひたすら一人でプログラムを書くだけでなく、そこに話し合いの場が生まれるような仕掛けを用意しました。

 

コードの記述に関しては、先ほども述べたように最終的にはコードで実際に書いてプログラムを動かすという活動を取り入れようと思いました。

 

使いやすい環境を考えて、どの学校にもある「Excel VBA」を用いて、セルで実行結果を可視化できるように工夫しました。

 

手順化に関しては、まずは『思考の手順化』という点から物事を筋道立てて考えることを行いました。論理的思考力が重要だ!といろいろなところで言われていますが、このプログラムはどういうふうに動いているのかという手順を意識させることで論理的思考力を培うようにしました。

 

さらに単元も手順化しました。今回は「エイリアンとの交信」ということで面白おかしく行いましたが、一気にすべてを学習しようとするのではなく、一貫したストーリーでステップ1から終わりまで学習していくことによって繋がりを持たせました。そして、スモールステップで基礎的・基本的な知識や課題解決方法をどんどん蓄積し、新たな課題を解決できるようにしました。

 

言語活動に関しては、プログラムの設計段階において協働で考えたり、意見を持ち寄ったり、あるいはプログラムが正しく動作するかテストをしたりしました。ただ書いて終わるのではなくお互いに確認し合うことでプログラミング学習を展開していきました。

 

STEP2 授業の設計

本校では、2年生に必履修で「社会と情報」を設置し、3年生の「情報の科学」が必修選択科目になっていますので、「情報の科学」を選択するのはある程度情報に関して興味・関心がある生徒たちですが、プログラミングへの興味はまちまちです。ですから、この授業はプログラミングを学ぶのだ、というイメージではなく、エイリアンとどのように交信するかということを、私が生徒と一緒に考える展開にしました。

 

単にコードを書いてそれを実験するだけではなく、Excel VBAで書いた結果がセルで実際に「ここが変わった」というのが見えることで達成感を得られるようにしました。

 

ここでExcel VBAを使っていますが、実は私自身は今までそれほど学習していません。今回、神奈川県の教育課程研究推進委員(情報部門)のメンバーに加わり、共同で研究する中で、プログラミング学習に使用するプログラム言語はVBAがいいということになり、自分自身がスモールステップで学習し、教材を考えてきました。

 

おおまかな流れはこちらです。基本的な操作があって、セルをどうやって動かして、どのようにしたらセルの中に値が入るのか。こういうことをどんどん蓄積して、最終的に大きな課題が解決できるように単元を組み立てました。

具体的には、最初に「エイリアンと交信するためにはVBAをツールとして使う」ということとして基本的な使い方を学習します。そして、「エイリアンは変な数を使う」と伝えます。つまり「変数」です。この変な数は一体何だ? というところを、実際にプログラムを構成する中で考えていきました。その中で、変数の型によってはうまく計算できなくなってしまったり、おかしな結果になったりという体験もしました。

目標では8時間で、数を色に置き換え、「実は意味があるエイリアンからのメッセージだった…」ということを伝えたかったのですが、昨年度は最終的にここまでたどり着けず、まだスモールステップにはなりきれていないと感じています。

こちらが途中で設定した課題です。エイリアンからのミッションという形で出題されます。例えば、「セルに触れずにA5という場所に数字を代入して中身を表示してください」と、簡単な代入の式とメッセージを表示する。あるいは「エイリアンの送ってくる2つの数字が正しく計算できるかテストせよ」。変数の型によってうまくいく場合もあるし、あきらかに大きな数字を入れるとエラーが返ってきてしまうので、それはダメだよね…というのを意識しながらプログラミングに取り組ませました。

このように、授業の中に設けたミッションを軸として、「今日はこれを解決するために最初にこういうコードを学習しますよ」という形で進めました。

 

私は英語科の教員でもあるので、最初に単語や文法、そのあとに文章…というやり方と同じイメージです。最初に基本的なコードがあり、それを使ったプログラムに落とし込んでいく文を書く。そして、実際にどのようにするかということを考えた後に入力。コードで記述をしてプログラムが正しく動くかどうかのテストまで、という一連の流れを繰り返していきます。

 

プログラムは必ずしも正しく動くとは限りません。ごく簡単なプログラムであっても、生徒は“b”と“d”を逆にしてしまってエラーになったり、ピリオドがカンマになったり、全角文字やスペースが入ったり…、と様々な原因でプログラムが動作しなくなるので、一見簡単そうに見えることでもその都度テストを行って、本当に動くのかということを確認させます。プログラムを書く能力に加えてテストする能力をつけるために、自分のプログラムをテストするだけでなく、隣の人と席を代わり互いにテストすることも行いました。

 

こういったことから、プログラムの見方だけではなく、生徒の身近なスマホやタブレットを題材にバグとは何かを学びます。先日自動改札機が止まって大問題になったことがありました。これもコードのごく一部が間違ったせいで全部止まってしまったんだよ、ということからテストがいかに大事であるかを考えさせました。

 

STEP3 実際にどのように授業を展開したのか。生徒はどのように動いたのか

実際にどのように授業したのかをご紹介します。ミッションで使用する基本コードを学びますが、そのコードは次の学習にも繋がるので、忘れてしまわないように毎時間前回の学習を振り返りながら進めました。

 

例えば特定のセルに値を代入する場合(スライドではB5に”10”)はこうなるよ、というスライドがこちらです。

エイリアンが使う変な数(=変数)の宣言(スライドでは“apple”という名前の変数の宣言)のスライドがこちらです。

 

(学習内容の順番を意識して、ここでは変数の型の一つである“Integer”が何を意味しているかについては触れていません)

 

セルの中身を交換する、というプログラムは実際にこのように行いました。

 

「オーサトリアン(=大里・私です)はアップル100%ジュースが大好きである。イノウエイリアン(=TTの井上先生)はアップル30%のジュースが大好きである。オーサトリアンのお気に入りの赤いコップには30%のジュースが入っている。イノウエイリアンのコップには100%のジュースが入っている。逆に入っているジュースをどうやったら交換できるのか」

 

このミッションに対して、まずステップをいくつか設けて考えていきます。最初は、ミッションの状況が今どのようになっているのか、入れ替えた後はどうなってほしいのか、簡単な絵で表現します。

 

その絵を見ながら、グループ内でどうやったら入れ替えられるのかを考え、それを順番に記述し、最後はコードに落とし込みました。

 

中身をこぼして入れ替えるという案もありました。「宇宙だから無重力だろう」ということで出た案ですが、これは私の設定ミスでした(笑)。

 

生徒が絵で表現したものです。100%のジュースと30%があって、入れ替えた後はこうなっていてほしい。ではどうしたらいいのか?というのを順番に考えていきます。

 

こうして皆が考えた手順を共有した後に、各自コードを書きます。

 

プログラムができたらチェックシートを配布し、隣同士席を交換してチェックし合います。チェック項目だけでなく、コメントやアドバイスも書かせるようにしています。

STEP4 授業後生徒がどのような反応を示したのか

これを実際にやってみた生徒の反応です。

「難しい」

「ゲームとかやっているのがあたりまえになっていたけれど、作っている人はすごいって思った」

「こんなやり方があるんだなと思ったのですが、1つの文字をミスったらどこを直せばいいのかわからなりそうなので、これから使っていこうかな…とかは考えます。プログラミングはどうやって計算をしているのだろうとか疑問がいっぱいです」

「みんないつも『プログラム』の一言でまとめてるけど、ものすごく複雑だということがよくわかった」

「とても簡単とは言えないけどやっていて楽しいし面白い。もっと学びたいと思う」

「プログラミングは難しいけれど、世の中に必要だと思った」

 

いろいろな意見が出ましたが、アンケートを取ったところ、プログラミングを面白いと回答してくれた生徒が9割近くいました。

 

プログラミングについてもっと学んでみたいという生徒も9割近くいますが、もういいという生徒も10%います。なかなか難しいと、改めて思いました。

 

STEP5 今後の課題

今回プログラミングの授業を行ってみて、自分ではいろいろな例を出しながら具体的に授業を展開したつもりではいましたが、具体的な事象を抽象化し、コード化することの難しさを痛感しました。具体的過ぎると生徒が考えすぎてしまい、かと言ってあまりシンプルすぎると、今度は逆に考えられなくなる、そのあたりがなかなか難しいと感じました。とくにヒントをどのように与えるかが難しかったです。

 

コードに入力したり設計したりと様々な活動を行いましたが、それがごちゃごちゃになってしまうと、結局今何をやっている時間なのかがわからなくなり生徒も混乱します。プログラミング学習では生徒が何をする時間なのかを明確に区切る、あるいは見極めることが重要です。

ヒントの提示という点では、生徒は真っ白な状態からプログラムを書くのには抵抗感があります。生徒がなかなか書き出せない場合、コードの最初の1行を書いてあげることで、そのハードルを下げることにつながることもわかりました。

 

今後も、題材の選定、課題の提示方法、ヒントの与え方など、生徒の実態をもとにプログラミング教育の可能性を探っていきたいと思います。

 

※全国高等学校情報教育研究会 第9回神奈川大会 分科会発表より