事例118
高等学校共通教科情報の授業事例
神奈川県立柏陽高校 間辺広樹先生
高校教科「情報」のプログラミング必修までの流れ

私は、教科「情報」が始まる結構前から情報科学コースという課程がある学校に配属になったため、とにかく情報教育をやらざるを得ないということになり、そこから自分で勉強を始めました。以来かれこれ25年、情報教育に携わっています。
高校では小学校・中学校とは違って、プログラミングに関する科目と学習目標があり、実際に教科書があって、方向性が整備されているので、それに沿ってどのような授業をしてきたかという例をお話しします。

先ほどの兼宗先生のお話にもありましたが、今から16年前、平成15年(2003年)に教科「情報」が立ち上がりました。当時は「情報A」「情報B」「情報C」いう三つの科目の中からどれか一つを選択して学ぶという形でした。その中では、「情報B」というのが『情報の科学的な理解』を主とした科目でプログラミングが入っていましたが、「情報A」や「情報C」ではほとんど触れられていないという状況でした。ですので、最初から「情報B」を採用した学校はあまりなかったと記憶しています。
その後平成25年(2013年)の学習指導要領の改訂で、「社会と情報」「情報の科学」2科目に再編され、「情報の科学」の中にはプログラミングがありましたが、「社会と情報」にはありませんでした。そして次の2022年の改訂では「情報I」に一本化され、そこでプログラミングが必修の項目として入ってくるということになります。

新しい学習指導要領「情報I」の解説書を見てみましょう。内容は四つの柱の中に「コンピュータとプログラミング」があります。そして、「コンピュータで情報が処理される仕組みに着目し、プログラミングやシミュレーションによって問題を発見・解決する活動を通して、次の事項を身に付けるよう、これこれについて指導しなさい」ということが書かれています。

さらに、コンピュータを効率よく活用するために、ということでプログラミングの指導に求められる「~する力」が列挙されています。プログラムを作成する力だけでなく、いろいろな力が求められていることがわかります。これはこれですばらしいですが、実際に全部やるとなると大変だろうなとも思います。
プログラミング教育は知識・技術とアイデアの両輪で

私自身は生徒に説明するときに、「プログラミングって何がいいかっていうと、世の中にないものを作り出すことができること。それがプログラミングの醍醐味なんだよ」と話しています。
車の両輪のようなもので、一つは知識や技術、プログラムを作るために必要なスキルがありますが、それだけではなくて、やはりアイデアが必要です。その二つが一つになったとき、世界に一つだけのものをつくれるかもしれない、ということなのですね。そして、知識や技術は授業の中で指導できますが、アイデアを出すということはなかなか指導できない。このアイデアは君たち自身の感性で出してほしい、というところからスタートします。

ここで柏陽高校についてご紹介します。本校は、神奈川県で4校指定されている「学力向上進学重点校」、いわゆる進学校です。スローガンが、『授業の柏陽』といって、1コマ65分、通常45分の1.3倍の授業で1.5倍の効果を出すということを目指しています。
ほとんど全ての生徒がスマートフォンを所有していて、今年度からクラウドのClassiという授業管理システムを導入したり、BYODを提唱をしたりということで、情報化にも柔軟な姿勢を取っています。珍しく「情報の科学」を必修として、1・2年で分割履修という形で実施しています。
生徒は、休み時間になるとスマホのゲームに熱中する、今どきの高校生です。しかし、これだけ使っていても、仕組みには全然興味がないのですね。パソコンなんていらない、スマホで十分じゃないかという意識を持っている生徒も少なからずいます。ですので、いわゆるパソコンのタイピング、特に記号の入力が困難なので、ここはきちんと指導しなければならないと思っています。
先日、学年末テストがあって、「ICTのCとは何ですか」という問題を出したのですが、40%の生徒が「コンピュータ」と答えていました。正しく「コミュニケーション」と答えることができたのは6パーセントしかなく、中にはクラウドのClassiというような生徒もそこそこいました。

そういう状況の中で、プログラミングを指導するとなると、英語のコード記述を指導しなければならないわけです。右側が、私が使っている教科書に載っているプログラムの一部分です。
わかる人にとっては、大して難しくない内容ですが、実際にこれを理解させるためには、下図にあるような、これだけの概念を理解していないと、何をしているのかわからないわけです。これら一つひとつを非常に丁寧に説明していかないと、生徒の方はなかなか理解してくれないというのが現状です。

本校は、先ほどお話ししたようにけっこう論理的思考力が高い子が多いのですが、プログラミングは生徒にとっては初めての概念です。そのため、例えば「なぜc=aなのか」ということを理解させるのは非常に難しい。その中でも特に難しいのは反復の構造です。forの中にいろいろあって、いきなり「a=a+1」と書いてあるのが、まず生徒はこれを理解できないです。教科書に書いてあってもお手上げ、というのが現実です。
なるべく教えず、自分でできた気持ちを味わいながら段階的に進める

私自身が授業で意識しているのは、基本的になるべく教えないということです。生徒にできるだけ考えさせたり、気付かせたり、あるいは生徒同士で考えさせるようにして、その中でちょっとこだわっているのは、段階的にヒントを出しながら、生徒に「自分でできた感」をなるべく味わわせています。
今年私が実際に行った授業の内容がこちらです。全体で8時間ですが、最初の2時間は、ドリトルったお絵描きと、音楽の先生とコラボして、校歌をリズムを入力させるというのを行いました。このリズム入力は非常に面白いし、生徒に校歌のリズムをきちんと理解させられるということでやってみました。

私は東海大学で非常勤講師しているのですが、そこに非常に優秀な学生がいて、私が「こういうプログラム言語があったらいいよね」と言ったら、それに答えるものを作ってくれました。『Progress』というC言語に近いものですが、それを使って3時間導入的なプログラミングをして、最後の3時間でC言語を使った演習をした、というのが全体の流れです。
ドリトルで導入。音楽とのコラボも

それぞれの具体的な内容を見ていきましょう。まずドリトルでは、最初の10分から15分で、「歩く」とか「左(右)回り」「繰り返す」という命令を説明します。最初の時間に私が伝えるのはこれだけで、あとは生徒に自由にやらせます。これだけでいろいろな図形が書けてしまいます。これによって、ルールに従わなければいけないとか、単純な命令の組み合わせでいろいろなものを作ることができる、いうことを体感させるのが1時間目です。
2時間目は、先ほどお話しした音楽とのコラボです。音を鳴らせられる状況を作っておいて、真ん中の空いたところに楽譜を見ながら音符に合わせたコードを入れていきました。これは、音楽の先生からも「よかった」と言っていただくことができました。

C言語の導入になる言語でステップアップ
3時間目からは、Progressを行いました。これは簡易版とExtra版があって、簡易版は、、Loopというごく単純な命令だけですが、Extra版は、命令はセミコロン(;)で終わらなければいけないといった、少しC言語っぽいルールが入って来ます。こうして段階的にC言語に近づけていきます。
左側が簡易版で描いた図形ですが、MoveとTurnだけでこのような幾何学模様を作ることができます。右側のExta版では、C言語のように変数を使ったりしてさらに複雑なものが作れます。こういうグラフィックなものは、生徒は非常に一生懸命取り組めるので、素材としても適していると思います。

さて、それでは生徒がどれくらい理解できているのかっていうことについて、ちょっとしたテストをやってみました。右側が生徒の回答ですが、「for」の使い方というのは生徒には本当に難しくて、forの中を三つに分けてそこに何かを書いていくということが全然できていません。そういうところが大きくつまずくポイントであることがわかってきました。

BitArrowでC言語の演習課題
その上でC言語を行いました。C言語は、兼宗先生のところで開発されているBitArrowというオンラインのプログラミングの学習環境があって、現在はドリトルとJavaScriptとC言語とDNCLが使えるので、そちらを使って行いました。

下図の左上が1時間目の実習1です。最初にHellow Worldから始めて、複数forを使って表示します。実習2は入力した数字が奇数か偶数かを判定させます。実習3は、1から100までの総和を計算させるプログラムを作ります。これもなるべく大事なところは生徒自身に考えさせるようにしています。特にこの6~8行目のforの部分が一番肝になるので、「forの形を作りなさい」と支持したり、この部分を「?」で空けておいて、「ここにどういう式を入れたらいいのか」といった形で考えさせたりしました。

最後に行ったのが、データの交換と、右側の配列を使って最大値・最小値を求プログラムです。正味60分の授業で、生徒にできるだけ考えさせると、この二つが精いっぱいかなというところでした。

もう一度プログラミングに関して流れをまとめると、まずドリトルで基礎をやって、プログレスの簡易版、それからExtra版をやって、最後に教科書レベルに至ったということになります。

難しいと感じても、達成感の有無によって授業への満足度が変わる
一連の授業が終わってから、生徒にアンケートを取って、プログラミングへの肯定感を聞いてみました。こちらは150人ほどのデータで、1人分の回答が横の帯で、青が肯定感が強く、赤が否定感が強いというものです。肯定感が強い順番に並べています。

左から「(1)プログラミングの能力を身に付けたいと思いますか」、「(2)授業時間はもっとあったほうがよいと思いますか」、「(3) 授業は楽しかったですか」、「(4)満足しましたか」の順です。真ん中部分、「楽しかった」という回答が多いのがわかります。
このちょっと離れているのが、「(5)難しかったですか」です。これを見ると、皆が難しいと感じながら授業をしていても、その中でも肯定的な生徒と、そうではない生徒に分かれているということがわかります。
ですので、基本的には全員にとって難しいのですが、この結果の違いの原因を見てみると、やはり自分でできた・できないというところが大きいようです。最後までできなかった生徒は否定な評価(グラフの右側列)になり、それを乗り越えることができた生徒は左側の方に来ているようです。
中には、内容が難しくなかったという人が4人くらいいます。この人たちはプログラミングの経験があるので、簡単だったのでちょっと肯定感が低くなっています。今後小学校・中学校で学んできた子が増えるということは、こういった生徒が増えていくことになりますので、もしかするともっと授業がやりにくくなるのかもしれないと感じています。
生徒の感想を読んでみると、「難しかったけど面白かった」というものもあれば、「うまくいかなかったときに挫折感を感じた」というものもあります。中には「プログラミングなんかやるんだったら家で数学を勉強したほうがいい」といった意見もあり、今後現実的なところとして出てくると思った次第です。


今日は主に情報Iの内容についてお話ししましたが、情報IIについても、非常に高いハードルとか高い目標が立てられています。
こういう科目は大変かもしれませんが、同時に面白い内容ができるだろうなと感じています。
情報処理学会第81回全国大会 シンポジウム
「小中高で必修化されたプログラミング教育 〜高校は「情報I」「情報II」が新設へ」より