事例341

プログラミング教育における言語統一型と言語選択型での学習効果の比較

愛知県立旭丘高校 井手広康先生

プログラミングで「主体的・対話的で深い学び」を実現することは可能か

今回の発表は、私の前任の小牧高校での実践になります。

 

初めに皆さんに質問なのですが、どのようなプログラミング教育を実施されているでしょうか。また、プログラミング教育を通してどのような生徒を育てたいと思いながら、授業に臨んでいらっしゃるでしょうか。

 

 

令和3年度に中教審から出された「『令和の日本型学校教育』の構築を目指して」には、「個別最適な学びと協働的な学びの一体的な充実を通して『主体的・対話的で深い学び』を実現する」とあります。

 

もちろん、これはプログラミング教育だけではなく、「全教科を通して、自分で学びを調整しながら、自ら学習していく『自立した学習者』を育成する」ということが書かれています。

 

※クリックすると拡大します。

 

先生方は、いろいろな想いをもって授業に臨まれていると思いますが、やはり立ち返るべきは学習指導要領です。学習指導要領には、どの教科においても「主体的・対話的で深い学び」に重きを置くことが重要であると書かれています。

 

これをプログラミングの学習に置き換えてみると如何でしょうか。

 

目の前の生徒は、「主体的に」プログラミングを学んでいますか?

目の前の生徒は、「対話的に」プログラミングを学んでいますか?

そして、目の前の生徒は、プログラミングが「深い学び」になっているでしょうか?

 

私も、学習指導要領が改訂されてから、プログラミング教育に限らず、これらを常に意識して授業をしています。そして、昨年度はこれら三つのことを念頭に置いたプログラミングの授業を行いました。今回はそのご報告です。

 

 

「主体的に」プログラミングを学ぶために、言語を生徒自身に選ばせる

 

まずは、「生徒は主体的にプログラミングを学んでいるのか」、言い換えると「どうすれば生徒がプログラミングを主体的に学んでくれるのか」ということをいろいろ考えました。

 

一般的なプログラミングの授業では、学年やクラスでプログラミング言語を統一して授業をしていると思います。

 

今回、私は生徒にプログラミング言語を選ばせることにしました。

 

12種類の「情報Ⅰ」の教科書に掲載されているPython、JavaScript、VBA、Scratchの4つの言語の中から、生徒には自身の興味・関心、進路希望、将来の夢などから逆算して言語を選んでもらいます。

 

もちろん、「プログラミングの考え方を学ぶ」というプログラミング教育の到達点は同じですが、そこに至るプロセスはそれぞれ違ってよいと思います。そういったことが「個別最適な学び」につながればと考えました。

 

 

プログラミング言語をどのように選択したかについて説明します。プログラミングの授業は2学期に行いましたが、2学期に入る夏休み前に、プログラミング言語を選ぶための授業を行いました。

 

まず、夏休み明けからプログラミングの授業を行うという旨の説明を10分ほど行い、その後、4つの言語についての簡単な説明を行いました。ここでは、「各言語の特徴」、「各言語が使用されている分野」、「各言語の難易度」、「各言語で書かれたプログラム(試作問題に出題された問題)」について、10分ほどかけて説明しました。

 

その後、20分ほど自由時間を取りました。ここでは、友達と相談したり、インターネットで調べる時間としています。そして、最後の10分で「どのプログラミング言語を選択するか」というアンケートを実施しました。

 

いったん、夏休み前のこのタイミングで希望するプログラミング言語を回答してもらいますが、夏休み中に親や先輩に相談したり、本で調べたりして変わることもあると思うので、後日の修正(改めてアンケートに回答する)もOKということにしています。

 

※クリックすると拡大します。

 

生徒が選択したプログラミング言語の内訳がこちらです。274名中、ちょうど半分の137名がPythonで、JavaScriptとVBAはそれぞれ33名と39名で、ほぼ同数でした。また、Scratchが65名という結果になりました。

 

生徒が自身の興味・関心があるプログラミング言語を選び、その言語を使用してプログラミングを学ぶことで、より主体的に授業に臨めるのではないかと思いました。

 

 

実は2年前(「情報Ⅰ」が始まる1年前)、クラスによって使用するプログラミング言語を変えて授業を行っています。

 

当時、「プログラミングはどの言語で教えるのがよいか」ということがよく言われていたので、プログラミング言語によって理解度が変わるのかということを調査しました。この表の(A)の列が、そのときの人数です。

 

2年前は1組・2組がPython、3組・4組がJavaScript、5・6組がVBA、7組がScratchで、各言語の合計人数は表のとおりです。このとき、最後の授業で大学入学共通テスト「サンプル問題」(第2問)を解かせてみたところ、プログラミング言語による有意差はないことがわかりました。

 

この表の(B)列が、今回の実践で生徒が選択したプログラミング言語の人数です。クラスごとに内訳は全く異なりますが、Pythonはどのクラスも多く、JavaScriptは一番少ないクラスは2人、一番多いクラスは9人でした。また、VBAは一番少ないクラス0人、一番多いクラスは13人で差がありました。Scratchは3人から20人までとかなり大きな差がある結果となりました。

 

 

「対話的に」プログラミングを学ぶために、「協働的な学び」を意識した授業を設計する

 

2つ目に、「どのようにしたら対話的にプログラミングの授業ができるか」ということを考えてみました。

 

まず大前提として、私が話す時間を「10分」を目標になるべく少なくして、あとは生徒たちが話し合いの中で対話的に学習を進めるようにしました。

 

私が説明している時間以外は、生徒同士の会話は自由とし、席も自由に移動してよく、互いに教え合いながら課題に取り組むことで、協働的な学びを意識しながら授業を組み立てました。

 

 

こちらが各クラスの座席表です。座席についてはさまざまなパターンを検討しましたが、結果的にプログラミング言語が近い子同士で席を固めました。分からないところがあれば、自由に異動して周りの人に聞けるようにしています。

 

各クラスの座席表を見ると、やはりPythonが多いという印象を受けます。

 

1組はVBA(緑色)がなくPython(紫色)が多かったり、3組はScratch(水色)が多かったり、5組はJavaScript(赤色)が多くVBA(緑色)が1人だけと、クラスによってバラバラです。

 

※クリックすると拡大します。

 

授業の流れと内容~「配列」と「リスト」は時間をかける配分に。最後に自作プログラムの発表会も

 

こちらが授業の基本的な流れです。

 

まず、私から全体説明として10分、「今日の授業で学習する内容」について簡単に説明をします。今回は一つのクラスに異なるプログラミング言語が混在しているので、全体への説明には「フローチャート」と「共通テスト用プログラム表記」を使用しました。

 

その後、あらかじめ用意したいくつかの例題を20分ぐらいかけて各自で演習していきます。例題が早く終わった生徒は、残りの時間(20分ぐらい)をかけて発展課題に取り組みます。このような流れと時間配分でプログラミングの授業を行いました。

 

※クリックすると拡大します。

 

実は授業準備に大変苦労しました。

 

1回の授業で大体7スライドを用意しています。このスライドが4言語分あり、全部で10回の授業分用意する訳ですから、スライドを計280枚くらい作りました。

 

2年前にクラスごとにプログラミング言語を分けたときは、授業の前日にそのクラスで使う言語のスライドだけ作ればよかったのですが、今回は4種類作らなければいけなかったので、毎日寝不足になりながら作っていました。

 

こちらに実際の授業で使用したPowerPointのスライド資料を上げておきましたので、ご自由にお使いください(※)。

 

https://drive.google.com/drive/folders/1hOeC6sS4UR2bQPdS6ukulgbAxR9cuB5u

 

※クリックすると拡大します。

 

プログラミングの授業の内容がこちらです。左側(言語統一型)が、2年前にクラスごとにプログラミング言語を分けたときのものです。このときに全8回で実践した内容を、今回は右側(言語選択型)の全10回に修正しました。

 

今回、大きく変えた内容が以下の3つです。

 

まず、2年前は『メッセージ』と『変数』を1回で行っていましたが、これを2回に分割しました。これは授業の内容云々というよりも、1つのクラスに4つの実行環境があると、恐らく設定にかなり時間を取られるだろうと思ったので、ある程度の余裕を持たせて2回にしています。

 

次に『配列/リスト』です。2年前に模試の結果や授業中の反応を見ても、ここはどうしても理解が弱かったと感じたので、ここも2回に分けました。

 

最後の『総合演習』は、2年前は全員が共通のプログラム(High & Low Game)を作成することにしていましたが、今回は自分で自由にプログラムを作って発表するという内容に変更しました。

 

 

周りの人に教える/教えてもらう場面が自然に発生。自作プログラムの発表会は、予想以上に意欲的

 

こちらは事後アンケートの結果です。協働的な学びができているかを確認するために、毎時間アンケートを実施しています。

 

「周りの生徒に教えることができたか/教えてもらったか」のアンケート結果では、プログラミング言語によって多少の差はありますが、概ね30~40%の生徒が「誰かに教えることができた」と回答しています。プログラミングが得意な子は課題をさっと終わらせて、先生役として他の生徒に分からないことを教えている場面が目立っていました。

 

※クリックすると拡大します。

 

一方、概ね50~60%の生徒が「誰かに教えてもらった」と回答しています。授業の内容が分からなくても、席を移動して誰かに聞きに行くといった場面がたくさん見られました。このように、生徒同士で学び合うという意味で、「協働的な学び」ができていたと思います。

 

※クリックすると拡大します。

 

最後にプログラミングが「深い学び」になっているかということです。これは何で判断するかが難しいところではありますが、自分で好きなプログラムを作成し、それを発表する活動を通して、プログラミングが「深い学び」につながるのではないかと考えました。

 

こちらは最後の授業に行ったプログラム制作発表会の様子です。発表は、ランダムに席替えして、1人5分で発表させました。これを2~3回繰り返します。そのため、ペアになった生徒が同じプログラミング言語いうこともありますが、たいていは違う言語の人にプログラムについて説明しなければいけません。

 

自分のプログラムを初めて見る人に説明をしなければいけないので、生半可な知識では教えられません。プログラムを動かしながら、「このコードはどういう意味で、どうなっていて、こんなふうに動く」ということを相手に伝えてもらいました。この発表会を通じて、プログラミングの「楽しさ」を味わい、「深い学び」につなげることを目指しました。

 

 

生徒がプログラムの制作にかけた時間がこちらです。「0~1時間」というのは授業の時間内(9回目の授業)だけで終わった人ですが、「1~2時間」というのは、授業外に業後や自宅で作業した生徒になります。「5時間以上」かけた人も数名いて、自分で「学び」を調整しながら、やれる子はどんどんレベルの高いプログラム作っていくことができました。この作業を通して、一定数の生徒は「自立した学習者」になることができたのではないかと思っています。

 

発表する生徒たちは本当に楽しそうで、生き生きと自分が作成したプログラムについて説明していました。実は、今回取り組んだ「自分でプログラムを作成して発表する」ことは前々からやろうと思っていたのですが、授業に取り入れることまではしていませんでした。

 

ただ、思い切って実際やらせてみたら、生徒はこちらの想像以上に楽しく取り組んでいました。自由にプログラムを作成させることを躊躇されている先生方は、ぜひ一度やらせてみてください。

 

 

プログラミングは難しいと感じながらも、「楽しい」と感じる人は有意に増加

 

事後アンケートの結果をいくつかご紹介します。

 

このグラフの(A)は2021年に実践したプログラミング言語をクラス単位で固定した授業の結果、(B)が今回の自由にプログラミング言語を選ばせた授業の結果です。

 

まず、「授業は楽しかったか」の結果については、(A)と比較して(B)が大きく向上しました。検定をかけましたが、有意な差が出ています。

 

一方、「あまり楽しくなかった」と回答した生徒は246人中3人、「全く楽しくなかった」と回答した生徒は0人でした。

 

ほぼ全ての生徒が「とても楽しかった」または「やや楽しかった」という肯定的な感想でした。「楽しい」と思えることがプログラミングを効果的に学ぶ第一歩だと思っているので、非常に良い実践ができたと思っています。

 

※クリックすると拡大します。

 

「プログラミングを難しく思うかどうか」ということも聞いてみました。これも2年前の結果(B)と比較してみましたが、今回の結果(A)との有意差は出ませんでした。

 

私の中では、こんなに「楽しい」と言ってくれているのなら、「プログラミングってこんなに簡単なんだ」と思ってもらえるかと期待しましたが、これは2年前と変わっていない結果した。「大変難しい」または「難しい」と回答した生徒が8割以上であったため、今後の課題だと思っています。

 

※クリックすると拡大します。

 

最後に生徒の感想例をいくつかご紹介します。

 

1つ目の感想の「隣の席の子と教え合いながら」という記述から、協働的な学びができていたと思います。続く「なぜこうなるのかと疑問になりながら、違う数字を入れて理解を深めれた」というのは、プログラムを単なる模写ではなく、自分でいろいろ試してみることができたという意味で大事なことだと感じました。

 

2つ目の感想では、「共通テストまでの範囲なら意外にわかりやすかったし楽しくできた」、「プログラミングに対する意識やイメージが変わりました」と言っています。これは非常に嬉しい感想です。

 

3つ目の感想では、「家や学校で自分の入力したプログラミングを一つひとつ確認して」とあるように、これは自宅でもプログラミングに取り組んだ生徒です。最後には、「いくつかのプログラミング要素を組み合わせたプログラムを組むことができた」と言っています。

 

プログラミングの授業では、プログラミングに対する「気づき」が生まれることが重要だと思います。この生徒のように、なぜ上手くいかないのか、なぜエラーになるのか、いろいろ試しながら新しい発見や「学び」が生まれた人がいるというのが本当に嬉しかったです。

 

※クリックすると拡大します。

 

授業のまとめです。今回はプログラミング教育に「言語選択」と「発表会」を導入して、生徒同士が主体的かつ対話的に学び合う環境を最優先して授業を組み立てました。

 

生徒全員がこの目標を達成できたとは思っていませんが、少なくとも、「主体的・対話的で深い学び」への一歩を踏み出した授業ができたと思っています。

 

 

[質疑応答]

 

Q1-1.公立高校教員

どうしても言語は1つにしてしまいたくなるので、4つの言語の中から選べるというのは素晴らしいと思いました。この4つの言語の中で、選び方のポイントのようなもの、あるいは向いている生徒の傾向のようなものはあるのでしょうか。例えば進路によってはこれを選ぶとよいとか、どうしても決められない人にはこれを勧めるとよい、というものがあれば教えていただきたいと思います。

 

A1-1.井手先生

私から説明したのは、その言語がどのような分野で使われているかということと、あとは簡単なプログラムの内容を見せることくらいですが、生徒によっては自分でインターネットや書籍で調べたり、親や先輩に聞いたりした人もありました。

 

進路希望と関係があるかどうかと思って調べてみましたが、小牧高校の場合、「情報系の大学」を進路希望に考えている生徒はJavaScriptを選択したケースが多かったです。しかし、他の項目では特に有意差はありませんでした。

 

好きな教科で違いがあるかについても見てみましたが、ここもまた有意差が出ませんでした。さらに、小・中学校のプログラミングの経験の有無についても、有意差は出ませんでした。

 

また、プログラミング言語を選択した理由として「友達と一緒にやりたかった」を挙げていた生徒も多かったです。きっかけはそのような理由でもいいと思っています。

 

 

Q1-2.公立高校教員

クラスで1人だけVBAの子がいましたが、あの子はどうしてもやりたいことがあったのですか。

 

A1-2.井手先生

そうですね。実際、授業の前にその生徒を呼んで「VBAを選択したのは、クラスで1人だけなんだ。誰にも聞けないけど、いいかな?」と聞いたら、「いいです。僕はVBAやりたいです」と言っていました。もともとプログラミングに対する志が強かったのですね。

 

その子は黙々とプログラミングに取り組んで、最後は「簡易電卓のプログラム」を作って発表していました。この生徒のように、プログラミングが好きな生徒がどんどん伸びていく様子が見られたので、自分で好きなプログラミング言語を選択する取り組みは本当によかったと思います。

 

 

Q2-1国立大学附属高校教員

生徒の感想で、難易度を聞かれた帯グラフがありましたよね。

 

先生は「難しいと感じる生徒が多いのが課題」だとおっしゃっていましたが、私は逆で「難しいけど楽しい」と思っている子がこんなにいるというのは、授業としては大成功ではないかと思いました。

 

プログラムって、はまりこむとなかなか思っていることが実現できない、ということが出てきます。それを諦めてしまうのではなく、「難しいけど楽しい」と感じるまでできたというのは素晴らしいと思いました。

 

※クリックすると拡大します。

 

A2-1 井手先生

確かに、自分なりにやりたいことを見つけて、プログラミングについて深いところまで学ぶことができているからこそ、いい意味で「難しい」と感じている生徒も多いと思います。アンケート結果こそ変わりませんでしたが、もしかしたら(A)と(B)では「難しい」の種類が違うのかもしれませんね。

 

 

Q2-2国立大学附属高校教員

質問としては、「それぞれの子が家でもできるように環境を整えました」とおっしゃっていましたが、具体的にそれぞれの言語でとのような環境でされたのでしょうか。

 

A2-2. 井手先生

いろいろなオンラインの実行環境があったので悩みましたが、まずPythonとJavaScriptはブラウザで実行できるpaiza.IOを使いました。アカウントを作成することで、自宅でもプログラムの続きから作業することができます。

 

VBAはオンラインでは実行できませんが、小牧高校はTeamsを入れていたので、Teamsでファイルを同期させ、自宅でも実行できるようにしました。Scratchはオンライン版Scratchを使用しています。

 

ちなみに、2019年には実行環境によって学習効果に差が出るのではないかと思い、全クラスでPythonを使用して、7クラス全部で実行環境を変えて実行しました。この結果、実行環境によって学習効果に大きな差が生じないことがわかっています。そのため、プログラミングの実行環境については、先生がたが使いやすいもの、あるいは何を重視するかで決めていただいてよいと思っています。

 

第17回全国高等学校情報教育研究会全国大会(愛知大会)分科会発表