事例298

コンピュータとプログラミングに関する授業実践報告

埼玉県高等学校情報教育研究会 富田平先生

本日は、埼玉県高等学校情報教育研究会の活動概要、今年度のテーマ決定のいきさつ、授業案のご紹介をします。授業案の紹介では7つの高校の授業実践をご報告します。

 

初めに、研究会の活動紹介です。埼玉県内の情報科教員10名程度で、毎年共通のテーマを決めて授業実践について共有しています。

 


 

これまで16年間、全国大会分科会やポスターセッションなどを通じて、毎年さまざまなテーマで発表を行ってきました。近年では、「情報Ⅰ」が始まったということで、プログラミング教育や情報デザインについての発表や、オンライン学習に向けて埼玉県が行った活動のご報告、共通テストの対策の予想問題の作成などの活動も行っています。

 

この研究会の活動に関しては、埼玉県高等学校情報教育研究会のサイト(※1)で紹介されていますので、こちらをご確認いただければと思います。

※1 https://www.saikojoken.net/

 


今年は、昨年2022年度に「情報Ⅰ」がスタートしたこともあり、「コンピュータとプログラミング」をテーマに発表をすることになりました。「情報Ⅰ」の単元の中でも、とりわけプログラミングの授業で悩まれている先生が多かったので、授業実践事例を共有して、授業をブラッシュアップしていくことを目指しています。

 


では、7校の授業実績をご報告します。

 

まず、各学校での言語の選択は、JavaScriptが2件、Python3が4件、VBAが1件です。学校によって使用言語は異なりますが、それぞれの高校で狙いを持って授業を行っています。

 

なお、1学年に「情報Ⅰ」が設置されていないため、2022年には「情報Ⅰ」を実施していない学校もあります。また、旧課程の「社会と情報」での2021年度の実践事例を報告している学校もありますので、あらかじめご了承ください。

 


■実践事例1  Java Scriptを用いたプログラミング体験

最初は「社会と情報」(旧課程)で実施したプログラミングの実践事例で、『JavaScriptを用いたプログラミング体験』です。こちらの高校は進学校なのですが、「情報」は3年生に置かれていますので、「情報Ⅰ」の実施は来年度になります。

 


「社会と情報」ではプログラミングにあまり時間が取れないため、この高校では「1時間で授業のプログラミングの面白さに触れさせたい」ということで、授業の導入として「ソースコードを改変しながらプログラミングを体験させる」という実践を行いました。

 


 

htmlファイルの中でJavaScriptの記述を行い、おみくじを作りました。

 

秒(byou)の所に時刻を取り、そのボタンを押したときの秒を記録して、それを60で割った余りを配列の数値として使う、というものです。かなり簡易的なプログラミングですが、おみくじのボタンを押した時刻によって「吉」「凶」など様々な結果が出るというものになっています。

 

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

 

教材ファイルにこのデータを置いておいて、完成したものをちょっとずつ改変させることによって、プログラミングの動きを理解する。1時間の導入として、このような授業実践を行いました。

 

この活動の良い点としては、プログラム自体は完成したものなので、エラーが起きにくいということです。また、アルゴリズムを「このボタンを押せばこうなるんじゃないか」といった具合に、構造的に理解できるという利点もあります。

 

例えば、「何か間違えて押しちゃった。それでコードが変わっちゃった」という場合でも、教材ファイルのデータを再度コピーすることでやり直すことができます。こういう形で、簡易的にプログラミングに触れることができる事例になっています。

 

 

■事例2  p5. jsを利用したプログラミング入門

 

JavaScriptの実践事例その2として、p5.js(※2)を利用したプログラミング入門を紹介します。

 

p5.jsというのは、Processingというプログラミング言語をJavaScriptで使用できるようにしたライブラリで、これを使うことによって視覚的にプログラミングを理解できるというメリットがあります。

 

2021年度「社会と情報」で実施しました。

 

※2 https://p5js.org/

 


実践への思いは、「視覚的にプログラミングに触れさせたい」ということです。p5.jsを利用して描画を行うことで、プログラムのいろいろな構造を理解できるようにしたいという思いがあります。

 


 

スライドのように左側にプログラム、右側に描画が出てきます。記述を行うことによって、ぱっと右側にプレビューが出てくるので、指示された通りに動いて楽しい、という意見が多かったです。

 

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

 

数値を変えて拡大・縮小してみたり、色を変えたり、位置を変えてみたり、条件分岐や反復による図形の描画を体験してみたりしながら、基本構造を押さえることができるようになっています。

 

結果を視覚的に反映させることによって、理解度の向上につながるということがメリットとして上げられました。

 

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

 

授業の流れがこちらです。まず「プログラミングとは」から始まり、p5.jsで命令がコンピュータに伝わっていることを体験させます。そこから「順次」「分岐」「反復」などを説明し、その後変数などについて簡単に説明をしてから、実際にp5.jsで、条件分岐や反復を使って描画をします。

 

尚、スライド資料は下記で公開していますので(※3)、よろしければぜひご覧ください。

 

※3  https://drive.google.com/file/d/1IsThaXa_a_A1K16en35V-vvTp-Du_4rn/view

 

このような形で、図形を描画してみるところから始めて、基本的な構造を理解した上で、自分で新しく作る経験をすることによって、理解を深めることができるというものになっています。

 

 

■実践事例3  paizaラーニングを使用した授業実践

 

次にPythonの事例について紹介します。Pythonの事例は4つ上がりましたが、そのうちのpaizaラ-ニング(※4)を使用した事例を紹介します。こちらは昨年度の「情報I」の事例です。

 

※4 https://paiza.jp/works

 


この学校は共通テストの受験率がほぼ100%という進学校で、9クラス、360人を1人の教員が担当しています。計18単位の「情報I」の授業に加えて生徒の個別対応や入試対策など、多くの課題が上がっていました。

 

特に評価に関しては、360人分を採点するとなると大変な負担になるため、外部の学習サービスを活用しようということになりました。以下はその実践の報告になります。 


 

paizaラーニングは、画面が4つに分割されています。左上では動画で学習することができ、右上でプログラムを打ち込むことができます。分からない場合は左下にあるヒントを参照できます。打ち込んだプログラムを実行すると、右下に実行結果が出てくるといった形です。

 

動画やヒントを使って理解を促すというファシリテート的な役割を担うことができるだけでなく、自動採点なので、教員の大きな負担軽減にもなります。

 

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

 

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

 

さらに、paizaラーニングにはキャラクターが登場しますが、このキャラクターは使えば使うほど育てることができます。生徒は「もっとキャラを強くしたい」と張り切って取り組むため、モチベーションのアップにつながるという報告もありました。

 

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

 

授業の基本的な流れは、動画の内容を解説しながら入力し、それを演習課題で教え合いながら進めるという形です。

 

 

共通テストでの出題が考えられる「変数」「順次構造」「反復」「選択」に加えて、「ユーザー定義関数」や「組み込み関数」なども網羅するようなものを、外部学習サービスできないかということで考えられたのが、今回の実践事例になっています。

 

 

授業の流れは、先ほどご紹介した埼玉県情報教育のサイトに載っていますので、ぜひご覧ください。

 

入試での出題が考えられる内容を網羅できるように、12時間で行うという形です。時間をかけないとなかなかできない部分もあるんですけれども、なるべく教員が教える時間を少なくすることを心掛けて組んだ授業案になっています。

 

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

 

また、プログラミング学習サービスを活用すると、ブラウザ単位でできるので環境設定が必要ありません。自動採点もでき、共通テスト対策もできて、能力差があっても教え合うことができる。動画教材もあるので自宅学習もできるということで、メリットはたくさんあるという報告がありました。

 

 

■実践事例4 Google Colabを利用したプログラミング演習

 

続いてGoogle Colaboratoryを利用したプログラミング演習です。これも昨年度の1年生の「情報Ⅰ」で実践した事例で、自作教材の解説と演習問題を生徒主体で取り組ませるという内容です。

 


授業の基本的な流れは、10~15分で理解のポイントを伝える要点スライドを1枚提示し、その後35~40分で演習課題を行います。スライドのような形でGoogle Colaboratoryに解説とサンプルコードを載せておき、その下にサンプルコードを読めば簡単にできるような演習問題を用意しておきます。

 


 

基本的に生徒が自分でできるようにセッティングされており、教員はそのサポートをしていくという授業設計になっています。時間が余った生徒が終わっていない生徒のサポートにまわることもできます。

 

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

 

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

 

8時間の授業の流れは、まずコンピュータの仕組みから始めて、基本的なプログラミングの内容を押さえていきます。以前に神奈川県の鎌田高徳先生が「10連ガチャ」の実装についての発表をされていましたが、最後にここに落とし込むことによって、実際に自分で使っているものと結びつける形にすることを目指しました。

 

最終的には「条件分岐」や「繰り返し」などを組み合わせて、自分でプログラムを作っていくという体験が必要になると思いましたので、このような授業案になっています。

 

ちなみにこの10連ガチャは生徒たちが自分で完成させたもので、実際に100回行った結果がどうなったのかをGoogle フォームに提出してもらっています。

 

 

これはあるクラスの結果です。統計上「1回は当たる確率」は63%ですが、クラス40人のデータを取ってみると、1回以上当たった人の割合は72%でした。ではこのデータをかなり多くしたらどうなるかということで、他クラスのデータも集めてやっていくと、実際に63%に近づいていきました。こうしたことを確認させて、「モデル化とシミュレーション」に繋げる授業を行っています。

 

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

 

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

 

■実践事例5・6  アルゴリズムとBitt Arrowを用いた授業実践

 

次に、アルゴリズムとBit Arrow(※6)を用いた授業実践の紹介です。1年生の「情報Ⅰ」で行ったものになります。

 

※5 Bit Arrow Pythonのページ

 


生徒たちには、「プログラミングは難しい」というイメージが先行しているので、アルゴリズムを理解してプログラミングを楽しんでもらいたいということで、Bit Arrowを使って、Pythonでコーディングしたという事例になっています。

 

Bit Arrowは環境設定が不要で、ユーザー登録をすることでオンライン上で様々な言語の学習ができ、生徒の進捗を確認することができます。

 


まずは、プログラミングを書かせる前に、アルゴリズムをしっかりとフローチャートによって理解させた上で、このアルゴリズムに基づいてコーディングをしていくという形を徹底させた事例になっています。

 

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

 

この基本構造自体を理解した上でプログラミングを実際に行うことによって、流れが理解できます。例題を幾つか用意しておいて、それを繰り返し行うことを通してプログラミング的な思考が身につく、という報告がありました。

 

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

 

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

 

授業の流れです。2人の先生がBit Arrowを使った授業を行いました。一人の先生は例題や課題に多くの時間を割いて、10時間で授業を組んでいます。もう一人の先生は、分岐構造や反復構造の説明から始めて、それらを組み合わせて使用していくところまでを6時間で組んだ授業を行いました。

 

 

■実践事例7  表計算ソフトウェアを活用したプログラミング学習

 

最後にVisual Basic(VBA)を使った事例です。こちらも目標としては「プログラミングの授業を通して問題解決をさせたい」ということで、自分の力でプログラミングして実行するまでを体験させる授業になっています。

 


MS-Excelを使用して計算式を作成する考え方を基本として、プログラミングのハードルを下げたいと考え、VBAを使用しています。様々な場面で解決の手順を考えられるよう実習を行っています。

 


 

授業の流れは、5時間でExcelのシートを使ってプログラミングをさせる形です。操作をしながらアルゴリズムの検討やプログラミングを行うという内容になっています。

 

 

■7つの事例から見えてきたこと

 

最後に、今回の7校の事例から見えてきたことについてまとめたいと思います。

 

限られた時間内でどのように教えるかという点において、アプローチの仕方には違いが多く見られましたが、自分で何かを生み出すという経験が大事であることが分かってきました。

 

 

生徒が夢中で取り組むためには、習ったことを組み合わせて何かを作る過程で、例えば周りの生徒から自然に拍手が起こったり、皆で共有したりといった形でいろいろな経験をする必要があると思います。協働して問題解決を体験することが大事だということです。

 

もう一つは、生徒間の能力差に配慮することが重要であるということです。プログラミングが得意な生徒もいれば苦手な生徒もいます。いろいろな生徒に配慮して授業を考えていくことが大切だと思います。

 

以上、このような形で日々の授業を発表させていただきました。参考にしていただければ幸いです。ありがとうございました。

 

■質疑応答

 

Q-1.公立高校教員

報告資料の中に、ペーパーテストで知識や思考力を評価したとあるのですが、実際にテストを行った結果についてのデータはありますか。

 

A-1.富田先生

これは非常に難しい問題で、データとしてはないんですけれども、評価に関しては、基本的に各校ともルーブリックを使用しています。主体性、知識・技能、思考力・判断力・表現力についてA、B、Cで基準を設けておいて、それに付随するテストを作っていきました。

 

実際にテストをしてみた結果ですが、基本的な構造はできるようにはなるんですけれども、繰り返しと分岐、それから関数といった形をどんどん組み合わせていくと正答率が落ちていく傾向にあるかなと感じています。特に、繰り返しの中に繰り返しや条件分岐がある場合は、生徒が追えなくなってしまって、点数が下がって行く傾向があります。

 

個人的な感覚としては、自分で物を作る経験がもう少しあると、それができるようになるのかなと感じています。ですので、試行錯誤しながら問題解決をする経験を積ませることによって、問題も解けるようになっていくだろうと思っています。

 

第16回全国高等学校情報教育研究会全国大会(東京大会) 口頭発表より