プログラミング教育入門(1/3)

プログラミング経験の浅い小学校の先生をターゲットとしたプログラミング教育の入門的講座です.


秋田県内の学校でプログラミング教育が円滑に実施できるようサポートを行っています.普段,市町村教育委員会や小学校からの依頼で実施しているプログラミングの入門的な研修の内容をウェブで公開することにいたしました.ご活用いただければうれしく思います.



はじめにプログラミング教育全般について抑えるべきポイントを説明し,その後,3つのプログラムを題材に,プログラミング教育について考えていきます.



それでは,はじめていきましょう.



2020年度まではプログラミング教育の話題で持ち切りでしたが,2021年度に入るとプログラミング教育の話題はどこにいったのかというくらいに影を潜め,世の中,GIGAスクールの話題で一色となったと感じます.プログラミング教育はもう忘れてしまっていいのでしょうか.プログラミング教育とかGIGAスクールという枠組みで捉えるのは得策ではないと感じます.新学習指導要領では学習の基盤となる資質・能力として情報活用能力を挙げています.情報活用能力はスライドにある通りで,「コンピュータ等の情報手段を適切に用いること」といったGIGAスクールに関わる記述だけでなく,プログラミング教育に関わる記述として「学習活動を遂行する上で必要なる(中略)プログラミング的思考(中略)も含む」と書かれています.単に,ICTを活用すればよいとか,プログラミングすればよいということではなく,情報活用能力を育成するために,ICTを活用し,プログラミング的思考も育てていく必要があります.



さて,本ページをお読みくださっている皆様は現時点でプログラミングを授業に取り入れることについてどのように感じておられるでしょうか.簡単なアンケートにご協力ください.本講座の最後に,受講した皆さんの振り返りとして利用します.
アンケートフォーム:https://forms.gle/29saa9tc73ehtkSHA



プログラミング教育と検索すれば,いろいろなものがひっかかります.「プログラムでロボットを動かす」とか,「プログラムでドローンを飛ばす」とか,いろいろ.みんなプログラミングを教えているのでプログラミング教育といえると思いますが,私の考えはちょっと異なっています.


文部科学省が発行している文書を読むと小学校で期待されているプログラミング教育は前のスライドにあったようなプログラミングそのものを学ぶ教育ではないことがわかります.私自身,この考えと同じ考えをもっており,小学生が特定のプログラミング言語を学んでも,大きくなった時にその言語が現役である保証はないため,特定の言語を学ぶのではなく,プログラムの考え方を学ぶことが大事だと考えています.
文部科学省が発行している文書の中に,「プログラミング教育のねらい」が記載されており,それはスライドに書いた通りで,プログラミングそのものよりも,「プログラミングの考え方を身に付けること」や「コンピュータがいろいろなところに使われていることに気づくこと」,「コンピュータを使ってよりよい社会を築こうとする態度を育てること」.「コンピュータやプログラミングの考え方を用いて,各教科等の学びをより確実なものにすること」が重視されています.
小学校ではこのねらいに即した内容を教える必要があると思います.



さて,「プログラミング的思考」とはなんでしょうか.ちゃんとした定義とは言いにくいですが,「小学校プログラミング教育の手引き」には,スライドのように書かれています.
よく読むといくつかわかることがあります.「自分が意図する一連の活動を実現するために」と書かれているので,なにか目標があって,その目標に向けてプログラムを作っていく必要があるということがわかります.ただ「プログラムを作りました」というのではプログラミング的思考を使っているという意味では弱い感じがします.
次に「記号を,どのように組み合わせたらいいのか(中略)論理的に考えていく」と書かれていますので,Scratchのようなビジュアルプログラミング言語で考えれば,プログラムの要素であるブロックをどのように組み合わせたらよいのか考えさせることが重要だということがわかります.
最後に,「どのように改善していけば,より意図した活動に近づくのか(中略)論理的に考えていく」と書かれており,試行錯誤をさせることそのものも重要であることがうかがえます.



プログラミングを教える際に必ずいうことが2つあります.一つ目は「1度も間違わずにプログラムが完成することはない」ということで,よほど短いプログラムでない限り,1度も間違わずにプログラムが完成することはありません.間違うことで学ぶことも多いのですが,間違うと恥ずかしいという風潮があり,普段はなかなか間違えないという状況があるように感じます.一方プログラミングでは,間違うのが普通なので,間違ってもいいという雰囲気を作りやすいと思います.ぜひ,そういう雰囲気を作ってください.間違ったあと,試行錯誤してより答えに近づいていくことが重要です.それから,先生も間違ってよく,ぜひ率先して間違ってください.間違っていいという雰囲気づくりに役立つと思います.
もう一つは「どんなプログラムを作ってもパソコンが壊れることはない」ということです.理科の実験で,「電圧を2倍にしたらどうなるだろうか」と思っても,それを実行するわけにはいきません.実験機器が壊れる可能性がありますし,ひどい場合には児童が怪我をする可能性もあります.一方で,プログラミングの場合は,「こうやったらどうなるだろう」と疑問に思ったとき,実際にやってみて問題がありません.パソコンが壊れることはありませんし,児童が怪我をすることもありません.児童の好奇心のままにどんどんトライさせましょう.
プログラムについてもう一つ大事なことがあります.それは同じことをするプログラムが一通りではなく,いろいろ作れるということ,すなわち答えは一つではないということです.完成したプログラムを児童同士で見比べさせることもよい学習になります.



さぁ,いよいよプログラミングしてみましょう.児童がScratchを初めて使うという場合には,「ねこあるき」と呼ばれるプログラムを作ることから始めるとよいです.いきなり高い目標のプログラムを作らせようとしても,児童がプログラミングの操作に慣れていないと,本来の目的以外のところに時間が取られ,うまく授業が進みません.まずは操作に慣れるための時間を取ってください.



ねこが左右にに動く簡単なプログラムを作成することによって,Scratchの使い方の基本を学びましょう.
プログラミング的思考を養うことを意識すると,目標があることが前提となるので,最初にお手本のプログラムを確認してください.
お手本プログラム:https://scratch.mit.edu/projects/547012845/
猫がずっと歩き続けています.この猫はプログラムの機能でいうとスプライトと呼ばれます.多くのゲームでは背景は変化せず,スプライトだけが動くという場合が多いため,背景の上にスプライトを重ねるという描画方法をとることで,画面の表示を速くしています.細かいことは気にせず,スプライトという言葉だけ覚えて先に進んでください.猫は端に来ると方向転換(跳ね返る)します.また手足を振って歩いています.手足を振るリズムはどのくらいでしょうか.あと,猫をクリックすると,「こんにちは」をしゃべります.
さて,このプログラムを作っていくのですが,一気にすべてを作ろうとせず,段階に分けて作っていくとよいと思います.探求的な学習でも役に立つ考え方だと思いますが,大きな問題は小さな問題に分割して考えていくことが解決の秘訣だと思います.


Scratchのページの「作る」ボタンからScratchのプログラミング画面を開いてください.プログラミング画面の左側にあるブロックを真ん中の部分に組み上げていくことでプログラムができます.作成したプログラムは右上の実行画面で確認することができ,緑色の旗を押せばプログラムが動き出し,途中でプログラムを止めたい場合は赤いボタンを押すことで中断することができます.



「ねこあるき」のステップ1のお手本プログラムを確認してください.
お手本プログラム:https://scratch.mit.edu/projects/547008298/
猫がずっとすべるように進みます.端に着いたら跳ね返ります.
利用するブロックはスライドにある通りです.
「旗が押されたとき」はプログラム開始の緑の旗が押された時に動作するブロックで,どんなプログラムを作ったとしても1つは利用するブロックです.
「10歩動かす」のブロックは猫の絵(スプライトと呼ばれます)を移動するブロックです.向いている方向に10歩動きます.このブロックだけ実行してみるとわかりますが,10歩というのは猫の絵のスケールで10歩ということではなく,小さなマス目で10マス進みます.マス目について確認したい場合には背景として「Xy-grid」というものがありますので,そちらを開いてみるとよくわかります.
「ずっと」というブロックは繰り返しをするときに利用するブロックです.繰り返したいブロックを「ずっと」ブロックで囲んで使います.
「もし端に着いたら,跳ね返る」は読んで字のごとくですが,スプライトが端に着いたときに跳ね返ってほしいときに利用します.一度,このブロックを使わないとどうなるか見せてから利用するとよいと思います.
「回転を左右のみにする」ブロックは利用すると端に着いて跳ね返ったときに上下が反転してしまうことを防ぎます.このブロックも一度,使わずに実行してみて,使うとどう変化するのか確認させるとよいと思います.
さて,以上のブロックを取り出して,組み合わせを考えてみてください.



うまくできたでしょうか.解答例をスライドに載せました.「ずっと」の中にある「10歩動かす」と「もし端に着いたら,跳ね返る」の順番は逆でもOKですし,「回転方向を左右のみにする」を「ずっと」の中に入れていても,問題なく動きます.ただ,細かいことを言うと,「回転方向を左右のみにする」というブロックは1度指定すればその後この設定を変更するまでずっと有効になるものなので,「ずっと」の中に入れる必要がありません.だたし,今はこういう細かいことは気にせずにプログラミングを楽しむとよいかもしれません.



ステップ2に進みます.またお手本のプログラムを確認してください.
お手本プログラム:https://scratch.mit.edu/projects/547012096/
今後は猫はすべるような感じではなく,しっかり歩いていますね.歩くテンポも確認してください.あとは,背景が変わりましたね.こういった部分をプログラミングしていきましょう.
新たに利用するブロックは「次のコスチュームにする」と「1秒待つ」です.
「次のコスチュームにする」はコスチュームを変更するブロックです.コスチュームについては次のスライドで説明します.
「1秒待つ」はプログラムの進行を1秒間止めるときに使うブロックです.1秒のところの数字を変更することで,いろいろな間隔でプログラムを停止することができます.



猫が歩いているようにみえるのは,スプライトにコスチュームが2つ用意されていて,それを交互に表示することにより,歩いているように見せています.パラパラ漫画の要領ですね.コスチュームは左上の「コスチューム」タブをクリックすることで確認できます.確認できたら,「コード」タブを押してプログラミングの画面に戻してください.



背景の変更は右下のステージというところにある「背景を選ぶ」ボタンで変更できます.好きな背景に変更してみてください.



ステップ2の解答例はスライドのようになります.「ずっと」の中に「次のコスチュームにする」を入れておけば,次々とコスチュームが変わり,猫が歩いているように見えます.ただし,これだけだとすごくせわしなく歩く猫になってしまいますので,「0.1秒待つ」というブロックを入れることで,お手本と同じ速さで歩くようになります.



それではこのプログラムの最後のステップに進みます.ステップ3では,猫(スプライト)がクリックされたときに,「こんにちは!」としゃべるプログラムを作ります.まずは,お手本を確認してください.
お手本プログラム:https://scratch.mit.edu/projects/547012845/
新たに使うブロックは「このスプライトが押されたとき」と「こんにちは!と2秒言う」です.
「このスプライトが押されたとき」のブロックは,文字通り,スプライトが押された時に呼び出されるブロックです.ブロックの形をみてもらいたいのですが,「旗が押されたとき」と同じ形をしていますよね.このブロックは他のブロックの下につなげることはできません.スプライトが押されたというイベント(プログラミングの世界ではイベントと呼びます)が発生したときに,このブロックに続けて作られているプログラムが動く仕組みになっています.
「こんにちは!と2秒言う」のブロックもブロックの名前の通りですね.「こんちには!」の部分も「2秒」の部分も変更が可能です.



ステップ3の解答例はスライドの通りです.最初に見たお手本と同じプログラムができたでしょうか.完成後は,好きなように改造してみるとよいです.子どもたちに教えるときも,自由時間を作ってあげると,楽しく学習できますし,創造性を育てることができると思います.



最初のプログラム作りはいかがだったでしょうか.一気に完成品を作ろうとせず,少しずつゴールに近づいていくことが重要だと思います.
子どもたちに教えるときにはわざと間違うということもよくやります.「回転方向を左右のみにする」を使わないで動かすと猫が上下反転してしまいますし,「端に着いたら,跳ね返る」を使わないと画面の端にめり込んでしまいます.これらは子どもたちが楽しく感じるポイントですし,うまくいかなかったときにどう改善したらよいのかプログラミング的思考を働かせる場面でもあります.
必要なブロックをあらかじめ出しておいて,プログラムをさせるのもよいやり方だと思います.子どもにとってはScratchは機能が多すぎて,どのブロックを使ったらいいのか戸惑ってしまいますし,教える側も使い慣れていないブロックを子どもたちが使いだすと大変になるので,こういう手段が有効です.

プログラミング教育入門(2/3)に続きます