事例310
「プログラミングわからん!」のパターン調査
大阪府立八尾高校 阿多悠生先生
初めに、今回の発表で取り扱った授業の概要です。
これまでの授業を基に、生徒が苦手としていそうな内容を問い、生徒が自分の苦手パターンを知ることを目的としています。
自己紹介と学校の概要
初めに自己紹介と学校の概要です。大阪府立八尾高等学校で、情報科を担当しています。情報科教員は2年目です。全体的にどのような授業をしているかは、昨年度の実践事例報告会で、夕陽丘高校の勝山衿佳先生とオンデマンド発表をいたしました。
こちらのQRコード(※1)から動画をご覧いただければと思います。
※1 https://www.youtube.com/watch?app=desktop&v=LJ731KhMfYE
八尾高校は、大阪府八尾市にある全日制普通科の高校で、1学年7クラスで約280名、全校で約840名の生徒が在籍しています。学年の約4分の1が国公立大学に進学する高校で、共通テストを受験する生徒が多くいます。情報科に関しては、「情報Ⅰ」を1年次に履修し、その後選択科目はありません。
本題材に至った経緯と生徒の様子~「何がわからないのかわからない」→「プログラミングわからん!」
本題材に至った経緯と、生徒の様子についてお話しします。
今回の発表は、「コンピューターとプログラミング」の単元で行った授業の中で、「C9 実力問題」の回を扱っています。
実行環境はGoogle Colaboratoryで、Pythonを用いて授業を行っています。
基本的な文法事項を確認した後に、C12・13の「レポート準備」に入る予定でしたが、文法事項の授業が終わった頃の生徒の様子を見て、この授業を追加することに決めました。
この単元では、レポート内容として、生徒自身で「日常生活の中でプログラムやアルゴリズムを用いている場面」をテーマに、各個人でプログラムを考えてもらいました。ソースコード自体やプログラムの用途、意図や工夫点を評価対象としています。
「レポート準備」の回では、「レジ」「洗濯機」のように具体的なテーマ・用途を考えた後、プログラム完成後の実行結果に出力したい表示を考え、その実行結果に繋がるようにソースコードを書くように、指示しました。
プログラミングの授業時の生徒の様子がこちらです。他の単元よりも集中して取り組めているように感じています。答えが正しいか・正しくないかを気にして、自分で終着点を考えることが苦手な生徒が多いのですが、この単元では、「実行結果」という答え(=終着点)が提示された状態で過程を考えることが多かったので、取り組みやすかったのではないかと考えています。
また、生徒の得意、不得意について言えば、タイピングなどで大きく躓くことは少ないです。また、数値替え問題のように、文法構造を真似したり、フローチャートのように決まったルールに従って、コードを書いたりすることもできています。
一方で、説明文からコードを書き起こすなど、ルールではなく、意味を考えて考えるレベルには至っていないと感じています。また、「反復」や「(変数への)再代入」を具体的にイメージするのは、今ひとつです。
他にもさまざまなエラーを発生させながら、プログラミングをしていますが、生徒たちは「何がわからない」とは言わず、『プログラミングわからん!』と、抽象的な言葉がよく聞かれます。
これを私なりに考えてみた結果、生徒には考える原因が多くあり過ぎる、もしくは原因を突き詰めるまでには至らず、言語化ができずに手が出せない状態ではないか、ということになりました。
授業内で発生する分には一緒に考えられますが、これが重なると、レポート作成や、いずれ行う共通テストの自学自習が行えない状態につながることが懸念されます。
そこで、今回ご紹介する授業を「レポート準備」の前に挟むことにしました。生徒は何が分かっていないのかを自覚すること、また、その日の授業内では解答を出さず、1コマの授業の間ずっと考え続けることを目標にしました。
教員は、解答結果や生徒の様子を観察することで、他の躓きポイントがないかを探すことに専念する、ということにしました。
具体的には、問1から問3の計18問(クラスによっては19問)を出題してGoogleフォームで解答します。生徒同士の相談はOKですが、教員からの補助はナシで、補足するのは問題の意味に関することだけ、ということにしました。
本授業で扱った問い~生徒がどこで躓くかを、出題条件を変えて確認する
今回の授業で扱った問題をご紹介します。
問1は、文法構造をルールではなく意味で捉えられているかを確認するために、途中まで書かれたコードの続きを説明文に沿って書く。またその過程で、どのように反復や変数の再代入が進んでいるかを理解できているかを問う問題です。
※クリックすると拡大します。
この問1は、クラスによって、出力結果やフローチャートを提示するタイミングを変えて、AからDの4つのグループで行ってみました。
グループAは出力結果・フローチャートとも解答時には提示せず、解説時に提示しました。
当初、コードの最終的な出力結果は提示せず、設問として設定していましたが(グループA)、普段の解答形式と違い過ぎて次の問いまで進まない生徒が多く発生したため、3クラス目からは、解答を始める前に、実行結果を提示するように変更し、設問から外しました。
問2は、既に完成しているコード、決まった出力結果に合わせて、「反復」と、それによる「変数の再代入」の理解を問いました。自分でコードを作れなくても、読み取れることを重視した問題となっています。
また、出力された実行結果を変更するには、どのコードを削除すればよいかという質問もしました。
※クリックすると拡大します。
問3は、提示された出力結果から最大公約数を求めるプログラムを自分で作成し、フォーム内で指定された数字の最小公倍数を答える質問を設定しました。
授業内で解答まで至った生徒はいませんでしたので、こちらは割愛します。
分析結果~出力結果を提示するタイミングによって、正答数は大きく変わる
正解数から見たグループごとの分析を紹介します。各グループの正解数やデータ数、平均値、中央値、最頻値はスライドのとおりです。
※クリックすると拡大します。
まず、全グループ通して正解数ゼロが多かったです。
※クリックすると拡大します。
出力結果とフローチャートを事前に提示しなかったAグループに関しては、ほとんどが正解数ゼロでした。
次に多い正解数1は、問1で出力結果を問う質問に答えられている場合が半分ほどで、他はいずれかの質問で解答できたものになっています。
※クリックすると拡大します。
出力結果を解く前に提示したグルーブBは、正解数が1~7と広がり、正解数ゼロは減りました。
問1で、解く前に出力結果が提示された状態でコードを作成したことで、正解数が上がったと考えられます。このグループだけ、母数が1クラス分少ないので、母数が多ければ、何かしら変化があったかもしれません。
※クリックすると拡大します。
出力結果を解く前に提示、フローチャートは解き始めてから提示したグループCは、正解数1から5まで満遍なく広がり、特に正解数6と7に集中しています。
※クリックすると拡大します。
出力結果・フローチャートとも解答前に提示したグループDも正解数6、7に集中していますが、正解数3も多くなっています。
※クリックすると拡大します。
グループCとDに関しては、問1ではフローチャートをコード作成中に提示されているか、作成前に提示されているという違いがありますが、平均値や中央値には大きな差はありません。
※クリックすると拡大します。
最頻値で見ると、グループDの方が正解数が多いように見えますが、正解数ゼロや、正解数7の人数まで比較すると、こちらも大差はないと考えました。
グループA・Bと比較すると、正解数6や7に到達している生徒が多いので、問1を答えられた生徒が多くいたと考えられます。
※クリックすると拡大します。
また、どのグループにも共通して正解数8以上が少ないので、問1と問2の両方に答えられた生徒はほとんどいなかったことがわかります。
これは、問1で時間を使ってしまったり、考えてはいても解答には至らなかったりしたものと考えられます。
※クリックすると拡大します。
理解できていなかったことを「解説」で押さえることで、以降の理解度がアップ
続いて、授業中の生徒の様子の観察から読み取れたこととして、生徒たちは、変数・関数の違いをあまり理解していないようです。bubble[0]と言われたらわかりますが、bubble[a]と言われたらわからない。print関数があるからこそ出力されている、ということに気付いていないことが強く感じられました。
この授業の後の生徒の様子を観察すると、「再代入」の理解度は上がっているように思われました。特に、解説しながら途中まで一緒に解いて、残りを解かせる形にすると、正答率が上がっていました。
またこの授業の後に行った「レポート作成」では、自分でプログラムを考えてもらいましたが、過去に紹介したコードを参考に、自分たちで作り上げることができていたので、かなり理解が進んでいるように思いました。
文法的な「ルール」と「意味」の関連付けの指導の工夫が必要
最後にまとめです。生徒達は、文法的な「ルール」と「意味」の関連付けができておらず、この点のアプローチが必要なことが分かりました。
また、この題材より後の様子からですが、何度も経験を重ねたり、生徒自身が目的意識を持ったりすることが理解につながると感じました。
自分のプログラムを作ると、「ここをこうしたい」という気持ちが芽生え、言語化できるようになることが進化につながるように見えました。
反省点や今後の展望です。
今回、いわゆるトレースの問題を初めて解かせたので、本当に実力を測ることができているかどうかは文法的な「ルール」と「意味」の関連付けは怪しいかな、と思いました。また、生徒が解いている途中に、問題自体に補足を超えた場面も多かったので、問い方自体を改善するべきとも思いました。
今回、コードの「ルール」と「意味」の関連付けをうまくすることが必要なのは分かったのですが、そのための指導の工夫については、今後考えていきたいと思います。
神奈川県情報部会実践事例報告会2023オンライン オンデマンド発表より