事例148
プログラミング教育研究推進校が「プログラミング」してみた
神奈川県立相模原総合高校 大里有哉先生
「情報の科学」は1年生で必履修
私が勤務する神奈川県立相模原総合高校は、神奈川県のプログラミング教育研究推進校に指定されており、年度当初に全校生徒に対して「プログラミング教育ガイダンス」を実施しています。今年度も対面式のあと、720人の生徒に対して行いました。そこでドローンを飛ばしたり、最近のプログラミングやAIについての流れについて話したりします。また、情報科だけでなく、その他いろいろな授業の中でプログラミングを勉強するよ、という話をしています。
情報の科目は、1年次に「情報の科学」を必履修で学びます。こうすることで、2年次・3年次になって、「情報の科学」で学習した視点をふまえて活動することができるからです。
3年次には課題研究を設置して、前期の約4か月で研究活動を行い、9月に一人10分間のプレゼンテーションを行います。課題研究とその発表は必修ですので、生徒全員が取り組みます。このような形で、1年次の「情報の科学」で学んだことがそのまま生かせる場を用意しています。
自動販売機を題材に基礎を固める
「情報の科学」でのプログラミング学習では、表計算マクロ言語のVBA(Visual Basic for Applications)を使っています。
ここでは、まずプログラミングの基本的な考え方として、「変数」「値の代入」「=(イコール)の使い方」などについて学習します。例えば「『=』は左辺と右辺が等しいという意味でなく、『右辺を左辺に代入する』という矢印のような意味なんだよ」といった、ごく初歩的なことから解説します。ほとんどの生徒は中学で学習しているはずですが、よく理解できていないのが実情です。また、プログラミングは英語なので、英語が苦手な生徒にとっては、どうしてもとっつきにくい面があります。
こういった基本的なことを理解するために、題材として自動販売機【figure4-1】を使っています。
例えば、初めに1000円札を入れる(1000円札の絵をクリックする)と『投入金額』の欄に「1000」と表示されるプログラムを扱います。これは、「代入」のプログラムで表し、プログラムとしては、ごくシンプルなものです。
その値をもとに、次は硬貨を入れる(各硬貨の絵をクリックする)と、『投入金額』の欄に表示されている金額と比較して、入れた(クリックした)金額が加算されるプログラムを説明します。こちらも非常に簡単なコードです。こういったところから、楽しみながらプログラミングは身近なところで使われているということを確認させています。
その上で、「品物の下の購入ボタンを押すと、『投入金額』から減算される」、「レバーを引くとおつりが出る」といったように、部品一つひとつについてプログラムを書く学習を進めていきます。生徒の作業としては、ほとんどコードを書き写すだけになってしまいますが、代入の考え方や変数の使い方を学ぶきっかけになってくれればと思います。
条件や数値を変えて形や色を変化させるプログラミング実習
それらを踏まえて、教科書の単元に沿って一通りプログラミングの基礎を学習し、今度は「情報のデジタル化」の単元で、プログラミングに取り組みました。
これは、⑤画像の右上にある一覧表の数値をもとに、モノクロの画像を表示するプログラムです。マス目が0か1かを判定して、黒または白に塗り分けて絵を描いていきます。
一からプログラムを書くのは難しい生徒が多いので、今年度はコード【figure5-3】をそのまま与えて、このコードは何をしているのか考えてみようという内容にして、プログラムを実行したりコードを眺めたりを繰り返しながら学習しました。
次にカラー画像に進み、条件分岐を用いてセル内の数値を色の表現ができるRGB(赤・緑・青)の3ビットを用いて8つの色に塗り分けるプログラムに取り組みました。
コード【figure5-6】自体は長いのですが、例えば条件分岐のプログラム文中、数値を入れるべき部分だけを穴埋めの形にして、そこに「<20」「=20」などの条件を入力することで、どのような数値のときにどのような色を出すか決め、カラー画像を作るというものです。
実際は、私が説明しなくても、生徒たちはこの画像を勝手に書き換えることができました。初期状態ではRGB(赤緑青)3ビットによる8色を提示していたのですが、数値の部分をどんどん書き換えて、アニメキャラクターの絵にしたり、さらに、条件やカラーコードを変更して違う色を入れたりと、なかなか絵心のあるものを作る生徒もいました。
こういった活動を通してプログラムそのものを学ぶと同時に、プログラムが身近なところでも使われているということを、理解できたのではないかと思います。
「善」にも「悪」にもなるプログラミング
同じように「情報セキュリティ」でも、VBAを使ってみました。例えば、こういう実習ファイル【figure6-1】を用意します。これを生徒たちに見せると、⑤のプログラミング実習と同様に、勝手にボタンをクリックしてしまいます。
そうするとメッセージボックスが現れて「1万円振り込まないと、このメッセージは消えませんというメッセージ【figure6-3】が出て、「OK」ボタンをクリックすると、「2万円振り込まないとこのメッセージは消えません」、というメッセージ【figure6-4】が出て、と、どんどん加算されていってしまい、散々な目に遭ってしまう生徒もいます(コードは【figure6-6】)。
このような経験をすると、実はランサムウェアやワンクリック詐欺なども、こういう簡単なプログラムをちょっといじるだけでできてしまう、ということがわかるでしょう。こういうものも、プログラムとして提示しています。
それから、シーザー暗号についても説明します。これは、プログラムを書くのではなく、生徒に先にプログラム【figure6-9】を与えておいて、「1行1行のコードが何を表しているのか」を考えるやり方で解説しています。
シーザー暗号は元の文(平文)の各文字を何文字ずらすかを決めることで暗号化して暗号文にしています。現代の暗号はもっと複雑なアルゴリズムで作られていますが、古典的な暗号というのは、こういう方法で作っているんだよ、ということを、プログラム学習を通して手順を追って理解できればと思います。
最終的には自分のやりたいことを実現するためにコードを打てるようになってほしいのですが、まずは、プログラムが読めるようになることが優先です。英語でいうなら、文法がわからなければ書くことができないのと一緒です。プログラムの基本構造を理解できていれば、その分、実践が楽になるはずです。
プログラミングだけが「情報」ではない
プログラミングそのものから少し話がずれますが、この夏、図書館とコラボレーションして情報の授業を行いました。きっかけは、本校の図書館司書が「課題研究をやっているのに、本の探し方がわからない」「表紙がおもしろくなさそうだからもう手にとるのはやめる」「『太陽光発電』について調べたいのに『再生可能エネルギー』という本にたどりつかない」など、とにかく本の探し方がわからない生徒が多いと嘆いていたことです。
そこで、夏期講習で「情報とはそもそも何なのか」というところから、情報の分類の仕方や図書館ではどのように本が並んでいるのか、NDC(Nippon Decimal Classification:日本十進分類法)(※1)についても触れ、学習しました。そして、最後には問いを自分で設定して、その問いについて、自分で百科事典と図書とインターネットを使って検証し、そのあとに、作った問題を他の友達と交換して調べる、という活動を行いました。
(※1) 日本の図書館で使われている図書分類法。分類記号に「0」から「9」のアラビア数字のみを用い、大まかな分類から細かい分類へと、順次10ずつの項目に細分していく[Wikipediaより抜粋]。
課題研究などに取り組む時も、自分で問いを立てるところから始まり、調べ学習を経て問題解決を進めていきます。調べ方やツールがわからないと学習が進まないため、そのことについて知ってもらい、最後は自分の求めるところにたどり着く、これが一連の流れになります。このようなことも、手順を追って一連の流れで考えていくことからプログラミングの一つである、として生徒たちに話しました。
今後は、他の単元でもプログラミングを活用できればと考えています。どのような形で、プログラミングによる学習が進められるかを検討中です。
また、プログラミングの基本的な考え方を理解させるには、どう説明したら一番伝わりやすいかということも考えています。「変数」など、日常使わないプログラミング用語には、生徒たちもなかなか興味を持ちづらいため、この辺りの導入の題材を、もっと検討していかなければならないでしょう。
さらに、この後「ソート」や「探索アルゴリズム」など、次々と難しい用語が出てきますが、生徒たちが学習に対するモチベーションを上げていけるように、工夫する必要もあります。「情報Ⅰ」での学習内容も踏まえて検討していく必要がありそうです。
最後に、本日の発表テーマを見ていても、「情報」の内容が、プログラミングやデザインに偏っているのも気になるところです。「情報」はもっと幅広い概念でとらえる必要があるのではないでしょうか。今一度、「情報」という言葉に立ち返って、情報科の授業について考えるべきなのかなと思っています。
※神奈川県高等学校教科研究会情報部会 情報科実践事例報告会2019 ポスター発表より