事例247
プログラミング指導、生徒はここで躓いていた。そしてその改善について
川崎市立幸高校 天明大輔先生
今年度、私は情報科としてではなく、商業科に戻って商業科のプログラミング指導を行っていますが、そこから得るものがありましたので、共有させていただきたいと思います。
今年度から「情報I」が始まって、プログラミングが授業に取り入れられていると思います。
本校の情報科の担当者に確認したところ、スライドのような形で授業を行ってきたということでした。7時間分を使って、ここまで来たとのことです。
ただやはり、ソースコードを提示して入力し、実行するのが確認できた段階で止まってしまい、生徒が演習問題等を自分の力で解いていく時間を確保することには、なかなか時間が取れていないということが反省として挙げられていました。
ステップに分けてプログラミングを進め、どこで生徒が躓くかを見極める
一方で、商業科のプログラミングは3単位、1年間をかけてじっくりと勉強ができるので、今年度は私なりに新たな切り口で取り組んでいます。
こちらが基本的な実習課題です。以前の発表(※)でも同じような例題を出しましたが、単価と数量を入力し、そこから金額を自分で計算するという、商業科にありがちな問題です。
売上の合計や、最大の売上金額を出すということになりますが、やってみて分かったのが、苦手な生徒にとっては、いっぺんにここまでのプログラムを作るというのが、かなりの難しい課題になってしまうということです。
ということは、やはり簡単なところからステップに分けて説明をしていけば何とかなるのではないか、ということで実践をしています。
※情報Ⅰにむけて、個人的な「商業科のプログラミング」の振り返りと実践報告
プログラミングのお約束として、単純な順次処理から説明していくかと思いますが、先ほどの例題では、まずTankaとSuryoを入力し、Kingakuを計算する。そして、それを表示する、ということを行います。
この時点で、「プログラミングの基本は、入力があって、計算などの処理、そして最後に結果を出力するという、このステップをまず必ず覚えてほしい」ということを説明します。
このパターンでテストにも出題をするよ、ということ説明した上で、実際にTankaやSuryoの=(イコール)の後ろや、MsgBoxの後ろの部分を隠して出題してみたところ、苦手な生徒は、InputBoxを覚えてくれてもKingakuまでInputBoxを使って入力させようとする、という間違いをするのが、まず発見その1でした。
プログラミングが苦手というよりも、ポイントや税額の算出の仕方がわかっていない
続いて、順次処理の追加で、売上金額を計算した後、8%がポイントとして還元されるというプログラムを作る課題を追加しました。
生徒の答えには、なんと
Point = 8%
で止まってしまい、Kingakuをかける(*Kingaku)という発想に行きつかない、ということがありました。結果的に、この時点で苦手意識のある生徒は百分率の計算自体があやふやなことが多いということが分かってきました。
実際に消費税の計算もさせてみましたが、税込/税別金額を使い分けるということもできない生徒がそれなりにいました。この辺りから、プログラミングが苦手というよりも、小学校の算数の積み残しが、こういったところで影響を与えてしまっているのではないかということを感じます。
For や Next をどこに置いたらよいかわからない→手順の流れが理解できていない
続いて、プログラムを発展させて、ここまでの順次処理に繰り返し処理を組み込みます。基本はあくまでも先ほどの入力・処理・出力の3段階であることを押さえた上で、これを繰り返すことによって、コンピュータが効率的に活用できるようになるということを説明します。
生徒がどのような形でこれを繰り返そうとするのか、というのが次のスライドです。入力が終わった後にループ始端が来てしまう、というプログラムを書くようになっていました。
論理的思考を鍛えるはずのプログラミングですが、そもそも論理的思考自体が苦手ということでしょうか。初歩の段階では、繰り返しの中で入力をしなければデータが入っていかないということも気づかない、わからない、というのも私にとって大きな発見でした。
そして、先ほどの例題に近づけるために、繰り返しの中で一度、総合計を計算することを行います。
お約束の
Sougoukei = Sougoukei + Kingaku
という集計の式の作り方も、なかなか覚えるのが苦手ですので、「こういうところは暗記をしてね」という指示を事前に出してしまう、という形にしました。
ただ、この式は覚えても、ではこれがどこに入ったらよいのか、というところがまたわからなくなってしまう生徒もいて、Kingakuの計算の前にSougoukeiの式を入れてしまうということもあります。
そしてMsgBox(Sougoukei) (実習では途中から出力はDebug.Printに切り替えています)は、本来はループを抜けた後に置けばよいのですが、こちらもありがちなエラーとして、ループ終端の前にSougoukeiの出力を入れて、繰り返すたびに毎回表示してしまう、ということもありました。
条件分岐→ソースコードをどのような形で使ったらよいのかわからない
続いて、繰り返しの後に分岐・判断を加えていくのですが、私としては、「順次処理に対してループの始端と終端、そして集計のための計算とその表示という、たった4行が加わっただけで、コンピュータの処理がとても充実した作業に発展していくよ」ということを伝えました。
しかし実は生徒は、この時点でも既にいっぱいいっぱいで、たった4行でもソースコードをどのような形で使っていったらよいのかがさっぱり整理できないような気配を感じました。
実際の条件分岐のコードです。If文ということでElseも使う形の5行ですね。「If文は5行だよ」ということで、ここもこの5行を暗記してもらって、先ほどのプログラムに組み込んでいきます。
先ほどと同様に、金額は
Kingaku = Tanka * Suryo
Sougokei=Sougokei+Kingaku
の部分で計算されるのですが、この前にIf文が来てしまったり、あるいは
MsgBox (Kingaku & Hantei)
で表示を行いますが、その下にIf文を置いたり、ということも、当たり前のように行われてしまうことに気付きました。
また、処理をしたものを金額の表示とともにHanteiという形で出力しなければいけないのですが、この表示を忘れてしまうということも、ありがちというか、もうお約束のように起きていたところです。
条件をどのように設定したらよいのかが整理しきれない
最終的に、先ほどの問題で、最後に売り上げの最大値が求められるようにするために、またこのスライドのIf文を覚えてもらいます。「ここでもIf文を使うけれども、最大値を求めるIf文は3行で済むよ」と説明すると、「さっきIf文は5行って言ったのに」ということがまた混乱の原因になってしまいました。
また、条件をどのように設定したらよいのかということが、頭の中で整理しきれないのですね。それが成立していたら、最大値を今読み込んだ金額で置き換えるという手順、つまりこの
Max=Kingaku
もひっくり返してしまって、
Kingaku=Max
としてしまう、というエラーが多発します。授業では説明するのですが、いざテストになるとまた思い出せなくなってしまう。せめてプリントにメモしておいてくれればと思うのですが、どうもそれが反映されないということも見受けられました。
プログラミングの演習は選択肢から解答を選ばせるだけではダメ
後期になって、もう一度復習をしながらプログラミングを勉強していくということになったので、改めてこちらに挙げたようなことを意識して指導をしてきました。
まず、ソースコードがたくさんあると混乱してしまうので、例えば繰り返しのFor文のみを使用するようにして(VisualBasicではDo whileも使いますが、そちらは封印した形で)、なるべく少ないコードでプログラムが動くように工夫をしています。
また、先ほどお話ししたように、「プログラムに少しずつソースコードが追加されることで、どんどんいろいろなことができるようになるよ」ということを訴えるつもりでしたが、生徒はなかなかそれだけでは分かってくれない、思考を整理できないところがあることも、今気付いているところです。
そういったことを踏まえて、生徒がひとりでも復習ができるように、重点項目のみのプリントを作ることも行いました。また、プリントはテストに持ち込み可ということにして、授業中にたくさんメモを残させるようにしました。
さらに、テストに出題したものができないというのは、自信を喪失することになってしまいますので、事前に実習課題でテストに出て来るようなパターンを練習した上でテストに臨む、というようなこともしていますが、それでも実習ではプログラムが動いてもテスト本番になると間違った答えを記してしまう、というところがあるのが現実です。
これはまた、過去の商業科の指導での反省ですが、商業科のプログラミングの検定試験では、流れ図の穴埋め問題を選択肢から解答を選んで答えるというパターンになります。問題集等でそのような選択肢からあてはまるものを選ぶという練習をしても、結果的にプログラムが書けるようにならないというのが、私の今までの反省としてあります。
今後、「情報I」でプログラミングを行う際にも、やはりソースコードを書いてこそプログラミングである、ということを改めてお伝えしたいと思います。
今回、生徒が躓いていてしまう点について、私なりに新たに気付いたところをお話ししました。生徒に分かってもらうために、複雑なプログラムを改めてシンプルに分解をしていくことで、彼らの頭の中で整理ができるのではないかとやってみたところ、うれしい誤算というか、前期で躓いた子たちも、後期になってでも「成績は諦めたくない、頑張っていい成績を取りたい」ということを言ってくれました。
そのためには、逆に私のほうも「成績2を確定させたいのならば、もうちょっと頑張って、ループと基本的なIf文までは何とかできるようになろうよ」とか「最大・最小といった考え方についても理解してくれたら、3をあげられると思うよ」というような形で具体的な課題や目標の提示ができました。
このように、こちらも教える目標が明確になって、生徒の望む評価に対する指導が明確にできるようになったということは、私にとって非常に大きな収穫になりました。
神奈川県情報部会実践事例報告会2022オンライン オンデマンド発表より