事例352

生徒自身のペースで進めるプログラミングによるシミュレーションの実践と検討

神奈川県立横浜国際高校 鎌田高徳先生

私は、神奈川県立の高校の教科情報で採用されて、15年目になります。

 

一昨年度(2022年)は、文部科学省が生徒向けの情報科の授業動画を制作した際に、第3章のプログラミングで、「問題解決のためのプログラミング」で出演させていただきました。

 

『ガチャのシミュレーション』や『席替え』など身近な事象を題材にした問題解決を行っています。

 

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

 

また昨年度(2023年)は、「情報Ⅱ」の「コミュニケーションとコンテンツ」や「情報システムとプログラミング」に関する授業動画を作りました。詳しくは、「高等学校情報科授業・研修用コンテンツ」のサイト(※1)をご覧ください。

※1 https://www.nttls-edu.jp/joho/

 

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

 

また、毎年12月に行われる神奈川県情報部会の実践事例報告会運営に携わっています。2024年度は12月26日に実施いたします。ぜひご参加ください。

 

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

 

本日の発表の流れです。

 

初めに、「情報Ⅰ」と「情報Ⅱ」におけるプログラミングによるシミュレーションを整理して、事例を紹介します。

 

授業の実践では、生徒たち自身が事象を見つけて、問題解決のためにシミュレーションするとはどのようなことなのかを考えさせました。そのための仕込みは非常に大切ですので、その話もしていきます。

 

 

前任校の頃から生徒たちに伝えているのは、自分で事象を見つけよう、ということ。そして何か問題解決する時には、授業で学んだことを活用しようということです。

 

そのために、先生が学習活動をすべてコントロールするのではなく、生徒自身のペースで学ぶ時間を増やし、問題解決能力を育成する授業をやってみませんか、ということをお話しします。

 

 

情報Ⅰと情報Ⅱにおけるプログラミングのシミュレーション

私は、情報科で学んだ情報デザインやプログラミング、データの活用といった内容が、授業以外の場面でも役に立つようにしたいと考えています。

 

プログラミングで「順次処理」や「分岐処理」がわかっているだけでは問題解決にはなりません。プログラミングで問題解決するために必要なのは、プログラミングでシミュレーションをする考え方です。そのことを生徒たちにも伝えながら授業を作っていきました。

 

学習指導要領を読むと、「プログラミングやシミュレーションで問題解決をする」と大きな課題が示されていますが、先行事例を見ても、シミュレーションは表計算をして終わり、というものが多く、これをどうにか改善しなくては、という思いから工夫を重ねてきました。

 

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

 

学習指導要領解説には、シミュレーションの例として、インフルエンザが爆発的に増える理由、感染を抑える方法についてなどのほか、天体の動きのシミュレーションや物理シミュレーション、流体シミュレーションなどが挙げられています。

 

ポイントとなるのは、これらをいかにして生徒たちの身近に落とし込むかだと思います。私の授業では、身近な事象をモデル化し、それをPythonのプログラミングで表現することを行いました。

 

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

 

文科省の解説動画のシミュレーションでは、「情報I」では「学業時間と睡眠時間」の単回帰分析を、「情報Ⅱ」では「「学業・通勤通学・休養くつろぎ・趣味娯楽と睡眠時間」の重回帰分析を扱っています。

 

私もこれを参考にして授業をしています。生徒が自分でモデルを見つけることになると、一気に難度が上がってしまうからです。

 

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

 

一方で、シミュレーションの手法やプログラムの考え方を教えることも欠かせない部分であると考えています。

 

知識や技能の習得に偏り、ひたすらコードやプログラムが書けることを目指すよりも、主体的に問題解決をする人を育成したいと考えているからです。そうしないと、Pythonのプログラミングを学んでも、数年後には忘れてしまうことになるでしょう。

 

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

 

こちらは、昨年の神奈川県高等学校情報部会の研究大会で、田﨑調査官が講演された際のスライドです。

 

社会で特に求められる資質は「主体性」、特に求められる能力は「課題設定・解決能力」ということが挙げられています。ですから、さまざまな教科の中で、情報科こそが先陣を切って、生徒が主体的に問題解決を行う授業実践と行い、引っ張っていかないといけない、と思いながら授業をしています。

 

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

 

授業の事例を作るに当たって「情報Ⅱ」の授業動画を見て、気づかされたことがあります。それは、問題解決の授業を実現するためには、4月当初から生徒たちが問題解決に向けて主体的に取り組む授業を始めなければいけない、ということです。

 

問題解決の授業で大切なのは、自分で発見したり、選んだりした問題を取り上げることだからです。1章の最初から取り組むことが大切で、3章のプログラミングでいきなりハードルの高い問題解決をやろうとしても難しく、その意味でもテーマが身近であることはとても重要です。

 

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

 

シミュレーションに関する優れた先行事例

今お話しした観点で、シミュレーションの授業事例についてご紹介します。

 

教科書で表計算のシミュレーションが非常に多いのは、「情報Ⅰ」が始まった直後は、ほとんど教材や事例がなかったからです。

 

小松一智先生(※2)の事例でも、Pythonよりも表計算で行った方が、生徒の理解度も満足度も高いとのことですし、「配列」と「繰り返し」は、Pythonのプログラミングの授業でも、一番苦しいところです。

※2 「感染者数をシミュレーションした実践事例」

 

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

 

春日井優先生の「創造的写経」(※3)には、はっとしました。「写経」とは、プログラミングのいわゆる業界用語で、もともとあるプログラムを模倣することです。

※3 「創造的写経プログラミング授業のすすめ」

 

 

私は1年目にはあまり写経はさせなかったのですが、はじめに写経したものを自分で書き換えたときに、「こう変更したからこうなった」というプロセスと結果を考えさせた方が良かった、と感じました。

 

ただ、一方的に先生が生徒のプログラミング活動の全てをコントロールしようとしてもうまくいかず、バランスの難しさを感じます。

 

プログラミングの指導は、試行錯誤しながら学校に合ったやり方を見つけていくしかないと思います。そのために参考となるようなプログラミングの実践事例の数が増えていくのはとても大切だと感じています。

 

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

 

プログラミング学習で一番重要なことは、スモールステップを設定することです。プロのエンジニアでも、必ずステップを細かく分けて取り組みます。

 

しかし生徒に「モデル化とシミュレーションをやってみよう」というと、いきなりとんでもなく難度の高いことに挑戦したがります。本人たちに「やりたい」と「できる」のレベルギャップが大変でしたので、そこをどのように改善したのかについて、事例をもとにお話しします。

 

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

 

授業の実践と検討

■生徒自身のペースで学習を進めるプログラミング学習教材の作成

今回の改善ポイントについて説明していきます。まず1つ目として、昨年からプログラミングの授業は、全て個別最適化を目指しました。

 

基本的に私は授業中あまり喋りません。出欠確認をして、今日何をするかという主旨の説明を10分から12分、話すだけです。その後はいくつかの材料を用意し、どれでやりたいかを選択させ、1回目と2回目のステップで15分ごとに活動を区切って、全員ができたかを確認します。

 

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

 

教室レイアウトもこのように4人1組のグループで着席するようにしていますが、出欠を取った後は席の移動も自由です。好きなように周りと話しながら取り組んだり、聞きたい相手に聞きに行ったりさせています。

 

資料は紙でも配布していますが、スマホでPDFを見ながらでも構いません。生徒自身に選択させることが重要だと思います。教室内の写真を見ると、生徒たちがとても楽しそうに取り組んでいることがわかります。

 

 

私が手助けすることもありますが、得意な生徒が何人か出てきて助けてくれます。

 

プログラミングの授業は2年間かけてようやく教室をゆっくり見て回れるようになりました。それができると、授業の時間内に各自の取組みをある程度評価することができるので、「働き方改革」という意味でも大事なことであると思います。

 

 

実際のPythonのプログラミングの課題です。100連ガチャで当たりの出る確率をシミュレーションするものです。スモールステップで12の課題を設定して、基本課題(3-1~3-6)と応用課題(3-7~3-12)に分け、各自のペースで進めます。

 

50分の授業2コマで、最後までできた人はオリジナルプログラム制作を行います。こちらの授業の詳しい内容については、下記の記事をご覧ください(※4)。

※4 生徒自身のペースで進める「100連ガチャのプログラミングによるシミュレーション」

  ~「アルゴリズムとプログラミング」の全体設計~

 

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

 

最初のコードだけ写経をさせ、その後はそれをコピペして、少しずつ書き換えています。

 

最初のステップ(3-1)で写経するのは3行くらいの簡単なプログラムで、次の3-2では、3-1で書いたものをコピペして、どこを書き換えるとどう変わったかを意識しながら取り組ませます。このように、自分が書いたコードを書き換えて、スモールステップでどんどん改善していく形をとっています。

 

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

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

 

3-6程度までは資料を見ながらやればできるのですが、3-7から難しくなります。自力でできなくなったら、周りに聞いたり私に聞いたりしながら進めます。

 

3-6でいったん完成したシミュレーションのプログラムの実行結果をスプレッドシートに貼り付けます。この授業の前に「データの活用」を終わらせておくと、グラフの読み取り方やデータの整理の仕方がわかるので、この順番をお勧めしたいと思います。

 

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

 

■プログラミングの題材は身近な事象で。「繰り返し」は後回し

授業改善の2つ目です。micro:bitであれPythonであれ、プログラミングでは題材を身近な事象としました。

 

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

 

私はプログラミングをmicro:bitから始めますが、ここでは「繰り返し」は使用していません。生徒は、「繰り返し」で一番くじけてしまうからです。ですから、まずは「順次」と「分岐」、変数と乱数と関数を扱います。

 

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

 

micro:bitで条件分岐の概念を学んだ後に、Pythonをやります。その後、シミュレーションした問題解決の流れをスライドにまとめて発表してもらいます。

 

プログラムだけ提出するのでなく、どんな事象を見つけて、それをどのように問題だと考えてモデル化し、実行してどのように自分として問題が解決できたかを4枚のスライドに書いてもらいます。

 

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

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

 

生徒が実際に行った例としては、「好きな歴史ゲームのガチャのシミュレーションで、ガチャチケットが1000枚あれば本当に引きたいもの取れるか」とか、「推しのコンサートのアリーナ席が獲得できるのか」、というものがありました。

 

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

 

「クリスマスまでに彼氏ができるか」の期待値をシミュレーションした生徒もいました。この生徒は、クリスマスの日から逆算して、あと何日かでどうすれば付き合えるかを考えています。面白いですよね。

 

もちろん、これは期待値計算であり、ネットで出てきたデータもとに作っているので、正確さという点では危ういところはありますが、やはり身近なこと置き換えて考えられるのは、すごいと思います。学んだ内容を理解しないとできないからです。

 

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

 

このように、身近な事象を生徒たちに見つけさせるのは、1年目はモデルが少な過ぎたため、とても苦労して、2割から3割の生徒しかできませんでした。それでも、2年目以降は先輩のモデルを共有ドライブから見てよいことにしたので、スムーズにできました。こういった活動をされるときは、学校の中で成果物を蓄積し、モデルを増やしていくことをお勧めしますし、それによって活動自体も年々改善できるだろう、という感触を持っています。

 

 

■「情報I」のカリキュラム再編

3つ目の改善です。

 

Pythonのシミュレーションで問題解決をするのであれば、授業は「データの活用」を先にやったほうがよいいと思います。表計算や回帰分析、相関分析、グラフの読み取り方などを学んだ後にシミュレーションをすることで、実行データの結果の読み取りがスムーズになります。

 

 

また、プログラミングの単元の最初に生徒たちに「プログラミングは簡単で楽しい」と思ってほしいので、反復構造は最初からは入れていません。これは私なりに考えたやり方なので、学校によって異なるとは思いますが、比較的好評です。

 

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

 

こちらは定期テストの問題です。

 

文化祭のクッキー屋さんで釣銭がどうなるかを、シミュレーションの結果を基に作問しています。生徒たちにとって身近な問題を、折れ線や箱ひげ図で出題しています。

 

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

 

こちらが1年目と2年目の授業満足度です。

 

シミュレーションの評価は、少しだけ上がっています。1年目があまり良くなかったのは、高校生がやりたい事例のモデルが多くなかったからだと思いますが、今後はこの学校の生徒たちがやりたいモデルを増やし、そこにどのようななシミュレーションの試行錯誤があったのかがわかるよう、どんどん改善していきたいと思っています。

 

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

 

「情報」の授業では、生徒に毎回アンケートをとっています。教師がすべて学習活動をコントロールするのではなく、生徒自身が自分たちでやりたいことを決め、自分たちのペースでやることを続けていきたいと思います。

 

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

 

私のサイト「情報科eポートフォリオ(※5)」には、発表資料やPythonのデータを全てアップしています。ぜひ、これらの事例を授業で使ってみてください。授業が少しでも良くなったり、生徒たちと良い学びになったりすることを願っています。

 

※5 情報eポートフォリオ

 

 

質疑応答

 

Q.私立高校教員

細かいところに気づいてしまったのですが、生徒たちに取り組ませている間に、作業用BGMを流しているというスライドがあったと思います。

実際、どんなものを流されたのか、またそれによる効果はどうだったのか。また、逆に邪魔になる子はいなかったのか。その辺りを教えてください。

 

A.鎌田先生

実は、生徒にアンケートを採ったところ、9割以上の生徒がBGMを流してほしいということだったので流したのですですが、一度流さないで「しゃべりながらやっていいよ。嫌だと思ったら振り返りで書いてね」と声を掛けていますが、やはり皆集中すると黙ってしまうのと、私自身が息苦しいので、小さい音で流しています。

 

特に、プログラミングは本当に集中すると静かですよね。別にそれはそれでよいのですが、リラックスして取り組んでほしいなと思って、流しています。効果までは検証していませんが、また情報共有したいと思います。

 

第17回全国高等学校情報教育研究会全国大会(愛知大会)分科会発表