事例200

共通テストに対応したプログラミングの単元案とその評価について

神奈川県立横浜翠嵐高校 三井栄慶先生

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

まず初めに自己紹介をいたします。

 

私は、ここ1、2年で教員研修用教材を執筆したり、教科書の執筆に携わったりと、さまざまな経験をしました。多様な知見で教科「情報」というものをとらえる機会が多かった、この1、2年でした。

 

私の自己紹介のところで必ず使っているスライドがこちらです。「何が特徴か」と言えば、特徴がないこと。「何が個性か」と言えば、個性がないこと。好きな関数はAVERAGEという、いわゆる普通の教員です。

 


 

学校現場が揺れた大学入学共通テスト「情報」の「サンプル問題」

そんな普通の教員がびっくりしたニュースが、今年3月に大学入試センターから公表された大学入学共通テスト「情報」の「サンプル問題」です。たぶん、先生がたも気にして見ていらっしゃったと思いますが、こちらの問題が出てきたとき、現場は揺れました。

 


まず「実際に生徒はこの問題に対応できるのか」と。さらに、「この問題に対応するためには、どう授業をすりゃいいんだ」という声が出てきて、つまりまとめると、「我々は受験に対応できるのか?」ということになるのです。これについては、「情報Ⅰ」の不透明さも手伝って、不安に思われる先生が多いのではないかと思います。

 


私も、やはり不安な部分は感じますが、実際に「サンプル問題」を解くには、ということを考えていくと、できれば授業のスタイル崩さずして、その普段の授業で身に付いた力を使って、「サンプル問題」、もしくは共通テストのような問題に対応できることが、一番負担感なくできるのではないかなと思います。

 


そもそも共通テストというのは、授業の中で「必要な資質能力」というのをきっちり意識して伸ばして、それが高大接続、大学入試につながるということが望ましいのであって、受験テクニックだけを叩き込んで、それで点数を取るような科目を目指すために、「情報」の入試を始めようということを検討したわけではないと思います。

 

プログラミング演習をこなしながら、共通テストに対応できるようにするために 

では、実際にどんな授業をしていけばよいのか、というのが今回の私の報告です。

 

プログラミング演習をこなしながら、こういったテストに対応できるようにするには、どのようなことを授業の中で扱っていかなければならないのかを、授業の実践を通して考えてみました。

 


最初に、やはり「サンプル問題」がどんな問題かというのを、もう少し丁寧に見ていく。それに基づいて単元指導計画を立てて、実際に授業を行う。そして生徒がどんな力が身に付いたかということを評価する、という形で回すことにしました。

 


初めに「plan」の段階として、「サンプル問題」を詳細に分析します。どんな問題が出てきて、どんな知識が必要になるのかというところをしっかり整理するというところが最初です。それに基づいて、「単元指導計画」という形で、その知識を獲得するためには応用や演習が必要だというところで立案したいと思います。

 

「サンプル問題」第2問(プログラミング)の分析 

まず出題内容です。今回は、第2問のプログラミングの領域の部分だけを取り上げました。

 

この問題には、問1、問2、問3という形で3つの問題が入っています。まず問1では、配列の添え字、配列の要素ごとの計算という形で、配列操作の基本が取り上げられています。

 


問2は、手順が明記してあって、手順を進めるとスイッチがどのように変化するかといったようなトレースのような問題です。そして問3は、条件による繰り返し、最大値を求める、論理積を使って二つの条件を比較するといったような、少しプログラミングの中身に突っ込んだ内容となっています。

 

プログラミングの知識項目ごとにまとめる~あまり複雑な知識は求められていない 

これを、プログラミングの知識の項目ごとにまとめました。「変数」と「表示」の辺りはおおむね問題ないと思いますが、問題が「条件分岐」です。「条件分岐」のところは、数値での分岐で、実はelseがなくて一択のみ、という形になります。「繰り返し」の部分については、ループカウンタを0からnまで回すといった基本的なループの扱いです。

 


さらに、「配列」についても取り上げられていますが、0から順番にアクセスするという比較的基本的な内容で、あまり複雑なプログラミングの知識は求められていないのかな、と思います。少なくともサンプル問題のこの内容は、現行の「情報の科学」のプログラミングの単元で、しっかりと対応できるのではないかと思います。ですので、まずそこをしっかり教える、しっかり身に付けさせるというところが求められるのではないかと考えました。

 


単元指導に落とし込む~「繰り返し処理」は丁寧に時間をかける 

これを単元指導計画に落とし込みました。後ほど説明しますが、「繰り返し処理」については複数回に分けて設定しました。また、条件分岐もifだけというよりは、elseなどを使ったような形で、複数選択でも回せるようなものを授業で取り上げたいと思っています。

 

 

「繰り返し」の発展として、数学の数値計算によく使われるニュートン法を題材としました。「配列」については、逐次探索、最大値探索等々から始めて、「サンプル問題」には入っていませんが、授業では「選択ソート」と「バブルソート」についても取り上げました。最後に、実際にサンプル問題を何も見ないで解いてみて、単元でどんなことを学んだかをまとめる、という時間にしました。

 

 

授業の環境はGoogle Colaboratoryを使用 

実際の授業の実践について説明します。

 


授業対象にした生徒は、特別にプログラムを学んだ人たちではありません。過去にプログラミング教室に行ったことがある人もいないと聞いています。

 


学習環境については、神奈川県がGoogleのアカウントを生徒全員に配布していますので、そちらに乗った形で、Google ColaboratoryとGoogle Classroomを使っています。

 

重点指導ポイントとしては、やはり「繰り返し」処理にしっかり力を入れることを計画しました。本校のカリキュラムの関係で、「情報」が3学年に設置されていますので、実際に問題を解いたのは3年生の生徒です。9クラス、333名に対して行いました。

 


学習環境のGoogle Colaboratoryは、アカウントを持っていれば使えるというところと、グラフィカルなものがノーアクションで可能です。実際に授業をやってみて特に問題がなかったので、しばらくはこれでやっていこうかなと思っています。

 


 

本校では、Google Classroomを情報の授業だけではなく、国語、数学、英語など全ての教科で、資料や課題の配信などに使っています。

 

情報科でも、授業の資料などを事前に配布して、生徒は先に確認しておくといった、反転学習に近い仕組みを作っておいて、実際の授業では演習の時間を多めに取る、ということをしています。こうすることによって、欠席したり提出漏れしたりしてもスムーズに移行しやすい、という生徒からの声もありますので、教える側としても非常にありがたいと思っています。

 

 

Google Classroomで先に資料を配布。教え合い・学び合いの演習時間を確保する

 

1時間の授業の流れがこちらです。よくあるプログラミングの授業は、最初に文法事項をしっかり教えて、その後演習をさせて、最後に確認するといったようなスタイルが多いのではないかと思いますが、本校ではGoogle Classroomで先に資料を配信しておき、冒頭の説明の時間を圧縮して短くしています。そしてその分、生徒同士が教え合う・学び合う時間を設定しています。こうすることによって、演習時間を多めに確保できるのです。

 

グラフの緑の演習時間と、赤の学び合いの時間は何が違うのかと言いますと、緑の演習時間は生徒が1人で取り組みます。とにかく自分自身でどこまでできるかというところを、緑の時間帯でしっかりやった上で、赤の時間帯では、それぞれ近い人と確認をし合うようにしています。本校は1コマの授業を45分で設定していますので、大体ここにあるような時間帯で授業を進めています。

 

 

先ほど「繰り返し処理に十分時間をかけたい」と言った理由がこちらです。これは別の年度でプログラムの授業をした時に、生徒が何を「難しい」と思ったかというものですが、「リストを使って繰り返しながら最大値を求める」という作業を「難しかった」と答えた生徒が47.5%いました。

 

やはり躓きやすいポイントは「繰り返し」処理にあるのかと思ったので、今回の授業では、繰り返しについては4コマ取り、何度も演習できるような計画にしました。

 

やはり「繰り返し」のところは躓きやすく、概念としても難しい部分になるので、十二分に演習をやったほうが、後々の理解につながるかなと思っています。

 

 

課題の提出率、「サンプル問題」の正答率、単元振り返りの要約の3点から生徒の学びを分析 

実際に授業をしてみての振り返りです。まず今回の授業の評価の指標としては、課題の提出率、「サンプル問題」の正答率、単元振り返りの全体の要約という、この3つで見ていきたいと思います。

 


まず課題の提出率です。学び合いの時間を設定したためか、比較的高めになっています。

 

若干、応用問題のところについては少し低い部分がありますが、それでも8割を超えているというところで、提出率についてはおおむね良い学習状況であったと思います。

 


こちらがサンプル問題の正答率になりますが、問1、問2、問3をそれぞれ全問正解したという、全問正答率について表示しました。

 

問1、問2については、全問正解した人が65%ということで、ここまでは問題なかったと思うのですが、最後の問3は、いろいろ引っかかる要素があって、正答率がガクンと落ちたというところがありました。

 


したがってこの第2問のプログラミングの問題が全問正解できたのは13.9%ということで、30~40名程度ということになりました。

 

単元振り返りを文章で入力をしてもらったものを、ユーザーローカルのテキストマイニングで要約を行った結果がこちらです。

 

「基本構造でさまざまなことが使える」という回答と、「覚えるだけでは応用がきかない」というものが多かったです。あと、「今回のテストで、プログラムの実用的な使い方がわかった」ということも見えたようで、単元で伝えたかったことについては伝わったのかな、と考えています。

 


 

「プログラムが動いたらOK」ではなく自分の作ったものをじっくり見直す仕組みが必要 

最後に改善点です。やはり、この問3の正答率の低さが引っかかりました。これについては、正直なところ生徒たちには申し訳なく思うのですが、自分自身ちょっとうまくいかなかったかな、と思っています。

 


その要因を考えてみたのですが、プログラミングの授業は、課題があってプログラムを作ったら完成です、という段取りになりますが、その時にプログラムが動いたらOK、と考えている生徒が少なからずいたのではないか、と反省しています。

 

言ってみれば、「どう動いているか」という細かいところまでは追えていないけれども、何となく動いている気がするからOK、といった提出の仕方も透けて見えるというような状況でした。

 


これを改善するためには、未完成のプログラムを載せておいて、そのプログラムがなぜうまく動かないのか、というところをしっかり考えて、どのように改良したらよいか、という形の課題の出し方にすると、幾つか改善できるかな、と思っています。

 


こうすることによって、この部分がなぜ動かないか、完成したものはどうして動くようになったのか、というところを強く意識させることができるようになります。単純に課題を出題するというよりは、自分の作った成果物についてじっくり見直すということを、仕組みとして取り入れることが可能になるのではないかと思っています。

 

「揺れる現場」から「高めあえる現場」へ 

最後に、今回は「揺れる現場」ということで紹介をさせていただきましたが、「どんな授業をすればよいか」ということについては、私はプログラムの過程を考えさせるような授業設計にすれば、少なくとも対応はできるのではないか、と考えています。

 


「受験に対応できるのか」ということについては、「できる」ということにさせてください。これについては、これからの授業改善にもよりますが、ただ課題を与えるというだけでなく、「作ったものに対して、どう動くのかということを考えさせる」というところが、学習のポイントとして十分必要なのではないかと思っています。

 

したがって、これを「揺れる現場」ではなく、できれば「高め合える現場」という形で、先生がた同士で、さまざまな実践例をどんどん挙げて、お互いにいいものを公開し合うことによって、より良い授業改善という形で結んでいければと思っています。 

 


 

私が今回の授業で使った教材も、基本的には公開をしていますので、そちらを自由に使っていただいて結構です。参考にしていただけるところはどんどん使ってもらってかまいません。プログラミングの授業と、「サンプル問題」のようなテスト問題を、どのようにつなげるかというところを考えるきっかけにしていただければ、と思います。

 

[三井先生の資料掲載サイトはこちら]

 

第14回全国高等学校情報教育研究会全国大会(大阪大会) オンデマンド発表 より