事例249

身近な題材を例に繰り返し学ぶ プログラミング

世田谷学園中学校・高等学校 神藤健朗先生

プログラミング指導法の大転換! 「順次処理・条件分岐・繰り返しを順番に説明」→「基本構造は同じものを何回も繰り返す」

神奈川県情報部会実践事例報告会2018より
神奈川県情報部会実践事例報告会2018より

今回プログラミングの授業を行ったのは、合計6時間です。ポイントとしては、小さなステップに分けて同じことを繰り返しながら授業を構成しているということです。

 

例えば1時間目は、あたりが1%の100連ガチャを200回回した結果を集計するプログラムを作る、という流れで50分間の授業を構成しています。

次の2時間目は、効率の良い硬貨の使い方のプログラムで、これは2022年11月公開の共通テスト試作問題の「情報I」第3問をそのまま流用して、それを8つのスモールステップに分けてプログラムを入力しました。

 

こういった身近な題材を例にして、プログラミングの基本構造である「順次処理」「繰り返し」「条件分岐」の練習を繰り返すとともに、題材によっては配列や関数などの解説を繰り返し入れながら、だんだん理解を深めていける仕掛けを用意して、授業を構成しました。

 

 

今回作成しているプログラムは、いずれも基本構造は一緒で、何度も繰り返して作成しながら身に付けられるような仕掛けになっています。

 

ですので、共通して順次処理・条件分岐・繰り返しが入っていて、ガチャとおみくじについては乱数が入っている、というように、それぞれによって多少の違いはありますが、繰り返しの中に条件分岐が入っている、といったプログラミングのパターンを繰り返して操作を経験する、という流れになっています。このような構成にしたのは、順次処理・条件分岐・繰り返しを順番に説明するよりも、さまざまなプログラムを何度も作成した方が、学習効率が高いのではないか、と考えたからです。

 

※クリックすると拡大します

 

今回のプログラミングの環境は、前半はPyTry(パイトライ※)を使いました。その大きな理由としては、エラーメッセージが日本語と英語で併記されているということです。それに合わせてプログラムも自動整形してくれるので、多少ガチャガチャとした形になっていたとしても、実行するときれいに整形してくれるという特長があります。

https://pro-ktmr.github.io/pytry/

 

画面は、このスライドのようになっています。左側にプログラムを入力しますが、プログラムに入力する値に関しては、あらかじめ別のエリアに書かなければいけない、というのが、ちょっと癖のある特徴です。実行すると、右下のエリアに実行結果が出力されます。

 

また、このスライドの例ではエラーは発生させていませんが、エラーが出ると、はじめに日本語でエラーメッセージが表現されて、エラーの原文の英語の表記も同じように表示されます。プログラミングの初歩の段階で、いきなり英語のエラーメッセージが出てくると、それだけで心が萎えてしまう生徒も多いのではないかと思います。それに対応する意味でも、PyTryから入ったことは、大きなメリットだったかなと思っています。

 

 

「あたり1%ガチャのプログラム」~順次処理・条件分岐・繰り返し+乱数

1時間目の「ガチャのプログラミング」についてご紹介します。ここでは、第1段階から第6段階のステップに分けてプログラムを作成しました。実際に子どもたちの入力したプログラムに関しては、下記をご参照ください。

 

「あたり1%ガチャのプログラム」

 

 

これを実際に1時間でやってみましたが、リフレクションを見ると、やはり「難しい」と回答している生徒が、約200人中53人と、けっこういました。

 

※クリックすると拡大します 

 

具体的な記述から「難しい」という内容を見てみると、「プログラミングを初めて行ったので難しい」とか、「未知の記号が多くて難しかった」、「大文字、小文字を間違えただけでも実行できないので難しかった」と書いているものが非常に多く見受けられました。

 

※クリックすると拡大します

 

共通テスト試作問題:第3問コインの枚数のプログラム~順次処理・条件分岐・繰り返し+関数

2時間目は、コインの枚数のプログラミングを、共通テスト試作問題「情報I」の第3問を使って行いました。これも、順を追って作成すれば難しくないプログラムですので、ステップを踏みながらプログラムを作成できるように進めました。

 

「共通テスト試作問題:第3問コインの枚数のプログラム」

 

※クリックすると拡大します

 

こちらも「難しい」という感想を書いた生徒が34人いました。2回目になると、難しいと感じる生徒が多少減ってきたというのが特徴的かなと思います。

 

※クリックすると拡大します

 

ただ、この課題では後半に関数の話が入ってきたので、一気に難易度が上がってしまったというのもあり、「やはり難しかった」と書いている生徒が見受けられてしまったのかなと思います。

 

※クリックすると拡大します

 

おみくじのプログラム~順次処理・条件分岐・繰り返し+乱数

3時間目は、おみくじのプログラムを作成しました。第1段階、第2段階までは、前の2時間の内容、特に「当たり1%ガチャ」の内容を改造するだけで作ることができますので、この条件を満たしていればどのように改造してもよい、という条件で作成してもらいました。

 

「おみくじのプログラム」

 

 

ヒントがない状態で作るのは、先ほどまでと比べても、さすがに「難しい」と感じてしまう生徒が増えてしまったという感はあります。

 

しかし、「一見難しく見えたが、やってみると意外と簡単だった」と書いている生徒もおり、やはりプログラムの初学者にとっては、いきなり自分で作れというのはハードルが高かったかもしれません。ただ、一気に難しくなっていないところを見ると、繰り返しやってきたことの効果は、多少なりともあったのではないかなと考えられます。

 

※クリックすると拡大します

※クリックすると拡大します

 

じゃんけんのプログラム~ここまで学んだことを総動員して戦略的に考えるプログラムを作る

その後、3時間を使ってじゃんけんのプログラムを作りました。

 

1時間目はスライドの第1~第4段階辺りまでを進め、残りの2時間で第5段階の「コンピュータが戦略的に手を考えるプログラム」を作成する、という流れを取りました。

 

じゃんけんのプログラム①

 

 

生徒の感想で、まず基本形の作成のところを見ると、「難しい」と書いている生徒50名ほどですので、このプログラミングの授業を通して、特に大きく変わっていないのかなと思います。

 

※クリックすると拡大します

 

細かい作業が多かったということもありますが、実はこの課題の第3段階の途中からGoogle Colaboratoryを使い始めています。これに切り替わって、エラーメッセージが英語で表示されることになったところで、ハードルを感じてしまう生徒が多少なりともあったのかなと思います。

 

ですので、Google Colaboratoryが使いにくい場合は、PyTryでプログラムを入力して、うまく実行できるようになったら、Google Colaboratoryに貼り付けて実行する、ということを行っている生徒もいました。

 

※クリックすると拡大します

 

最後の2時間が、基本形を改造してじゃんけんを作成するという課題です。

 

じゃんけんのプログラム②③

 

こちらも「難しい」と回答している生徒が101件となっています。これは5回目・6回目の2回の回答を合わせたものですので、「難しい」と感じている生徒の数は、大きくは変わらないのかなと思います。

 

※クリックすると拡大します

 

また、じゃんけんの改造をすること、戦略を考えることが難しいと答えている生徒も、多少なりともいました。難しいと感じている生徒が200名前後のうちの50名ぐらいですので、4分の1ぐらいの生徒は難しいと感じてしまったというのが反省点になるかなと思います。

 

※クリックすると拡大します

 

説明の部分は解説動画を使って自分のペースで進んだ方が、結果的に理解が深まるか

最後に今回の実践について振り返っておきます。

 

正直なところ、全体的にはやはり失敗かなと思うのですが、次に生かすヒントを多く得ることができたのではないかと思います。

 

 

例えば解説動画について言えば、前半に実施したクラスでは、ちょっと忙しくて解説動画が追い付かなかったのですが、後半に実施したクラスは、解説動画を完全に準備した上で授業に臨むことができました。

 

解説動画はこちらから

 

リフレクションを見てみると、最初1時間目にガチャのプログラミングを、一斉説明(一斉型)で行ったクラスと、動画教材を使って実施したクラス(各生徒数約40名)を比べると、「難しい」と書いている生徒の数が約半数に減ったという結果になりました。

 

ただ、次の2時間目、3時間目になると、一斉型のクラスも動画を使ったクラスも、「難しい」と回答している生徒の数は同数に近くなっていましたので、リフレクション自体では大きな差はありませんが、肌感覚としては理解度に差がありそうな印象を持ちました。

 

というのも、ガチャのプログラミングでは、一斉型のクラスの到達度合いは第3段階から第4段階までですので、ちょうど半分くらいまでしか進めることができなかったのですが、動画教材を使ったクラスでは、最後の方まで進む生徒が出ています。一斉型だと、後半の解説が十分追いつかないような状況にもなりますので、やはり解説動画を使って生徒自身のペースで学んだ方が、理解が進むのではないか、という印象を持っています。

 

※クリックすると拡大します

※クリックすると拡大します

 

基本構文のポイントを振り返って定着するための時間も必要

また、どちらにも共通して言えることとしては、変数の理解に苦しんでいる生徒が多く見受けられました。特に、自分で自由にプログラムを作るときには、変数を作らなければ情報を記録することができませんが、変数をどのように作ればよいのか、また何について変数を作ればよいのか、ということが理解できていない生徒が見受けられました。どのような場面で変数を作成すればよいのかということを、しっかりと伝える必要があると感じました。

 

また、Pythonは繰り返しや条件分岐ではインデントを付けてプログラムを記述しなければなりませんが、そもそも何をしたいのかというのが分からず、インデントをどのように付けたらよいか分からない生徒が、多少なりとも見受けられました。

 

ただ、おみくじのプログラムを作成するときには、「ここからここまでを表示したい」、あるいは「ここからここまでの作業を繰り返したい」というように、自分が作ろうとするプログラムについて、何をしたいのかというのが明確になっていました。その意味でも、各時間に基本構文に関しては、しっかりと復習をする時間をあらかじめ用意しておけばよかったかな、というところが反省点です。

 

ですので、最後にも書いたように、解説動画に任せきりにするのではなくて、繰り返し・条件分岐の演習の時間、演習を通しての復習の時間を、どこかのタイミング(例えば、じゃんけんのプログラミングをする前、おみくじのプログラムを作る前)で簡単に入れて、理解を深めるための時間を確保する必要があったかなと思います。

 

この授業実践は、2学期の後半、ほぼ期末試験の直前に行ったので、なかなか復習の演習時間を確保する余裕がお互いになかった、というのも大きな反省点です。3学期に、また別の内容を実施するとき、もう一度復習の時間を設けて、再度理解を深められるようなきっかけや仕掛けを入れられればと思っています。

 

神奈川県情報部会実践事例報告会2022オンライン オンデマンド発表より