事例117

小学校の授業事例

茨城大学附属小学校 清水匠先生

小学校のプログラミング教育の特異性

私からは、小学校の実践事例をご紹介します。私の専門は音楽で、情報関係の専門家ではありませんので、情報処理学会にお越しの方にとっては異質な存在かと思います。そんな私が、小学校にプログラミングが入るらしいということで、子どもたちにさせてみましたら、授業後、子どもたちが「プログラミングって難しいんだね」と言ったのですね。こんな授業をしては、子どもたちにとって何のプラスにもならないなと思って、私自身勉強を始めたところです。

 

先生方と交流をするうちに、小学校というのはかなり特殊な環境であることがわかってきました。例えば、「プログラミングの授業」と言ったら、皆さんはどのような活動を思い浮かべられるでしょうか。

 1.タブレットを使ってロボットを動かす

 2. プログラムのコードを書く

 3.コンピュータを使わずに「命令」の書き方を考える

 

この中では、2の「コーディング」は小学校の活動では重視しないということになっています。実際、小学校の現場では文字で命令を書くよりも、ブロックを組み合わせる形のビジュアルプログラミングがよく取り入れられています。

 

このように、小学校の「プログラミング」は、コンピュータに向かってコードをひたすら書くという

モノとは全く異なっています。

  

小学校のプログラミング教育の特異性として、私はこの三つを考えています。

 

一つ目は、コンピュータの働きに気付いたり、プログラミング的思考を身に付けたりすること、そして、教科の学習を深めるということをねらいにしていることです。よく言われることですが、プログラミングの技術を高めたり、コーディングできるようにしたりする方が、むしろ授業としては作りやすいです。しかし、小学校では、教科のねらいを達成するためにプログラミングをしなさいということが要求されます。ただ、「小学校プログラミング教育の手引き」の第2版では、教科のねらい以外のことでもよいという新たな視点が出てきました。その辺りが多少救いではあります。

 

二つ目に、小学校のプログラミングでは、内容や範囲が具体的にはほとんど示されていない。「先生方が考えてね」っていう状況です。そして三つ目が、「そのための時間も、先生方で考えてね」っていうような状況になっているということです。この三つについて、お話ししていきたいと思います。

 

コンピュータの働きに気付く・プログラミング的思考を身に付ける・教科の学習を深める

一つ目の、コンピュータの働きに気付くことや、プログラミング的思考を身に付けること、教科の学習を深めることについて。「小学校プログラミング教育の手引き」では、論理的思考、考え方を学びましょうということがメインになっています。

 

 

例えば6年生の算数の比例の単元で、正比例のグラフを描きましょうと言うと、子どもたちは何の気なしに直線でグラフを描きます。頭のいい子は、原点とあと1点だけ取って、定規で結んでおしまいです。「それって本当にそうなの?」ということで、ロボットを一定速度で走らせて、1秒のとき、2秒のとき、3秒のとき…にそれぞれ何センチのところに来たかを計測していくと、直線のグラフになります。プログラミングを活用して教科学習を深めている事例です。

 

下図の右側は、ドリトルを使って拡大図・縮小図を描いています。「2.87倍の拡大図を描け」と言われたら、手書きではかなり難しいですが、ドリトルでプログラムを書けば、どんな倍率でも簡単に描けるということを学びます。

 

 

下図は、コンピュータを使わないで、コンピュータの考え方そのものを活用して学ぶという考え方の授業です。コンピュータの画面上の画像は、実は点の集まりであることを体験する学習の様子です。

 

 

プログラミングの内容や範囲が具体的に示されていない

続いて、プログラミングの内容や範囲が具体的には示されていないことについてです。

 

プログラミング的思考というものは下図のように示されていますが、これが分解・抽象化の考え方なのか、順次・反復・分岐の考え方なのか、といったことは示されていません。

 

 

「目的達成のために、動きに分け、記号を組み合わせ試行錯誤する」ということを具体的にどのような活動に落としたらよいのか。文字通り、ビジュアルプログラミングなどを行うという方法もあります。例えば、教師が作った見本の動きと同じようになるように動きを組み合わせる、というのがこれにあたります。また、「犬も歩けば棒に当たる」ということわざをアニメーションで表してみましょう、という活動もできます。このように、目的の動きになるように記号を組み合わせていくという学習があります。

 

さらに、ロボットが最短でゴールできるように、カーブをどうやって曲がるかを探しながらプログラミングする、という活動も行います。子どもたちは、ここのルートがいい、いやこっちだ、なんて言いながら上手に設定しています。

 

また、Scratchを使って、指定した数の倍数とそれ以外の数を左右に振り分けるという、プログラムを作るもので、例えば2の倍数がはじかれるようにするためには2n、4の倍数にするなら4nと入れればいいね、ということに気付きながら、記号を組み合わせて目的に向けて試行錯誤していきます。

 

さらに、順次・分岐の考え方を学ぶためにフローチャートを活用するという学習もあります。例えば、学級活動の授業で、もう少し掃除を手際よくやろうよ、ということで掃除の手順をフローチャートに表しています。「ごみがなくなったか」とか「掃除の時間が終了したか」いったところでイエス・ノーで分岐して、手順をうまく表しています。

 

算数の時間に行ったのは「分解と抽象化」で、今までに習ったいろいろな単位のその特徴を分解して、新しい仲間でグループ分けしていくというものです。子どもたちは、長さを表すものならcmとかmとかいう横軸でしかとらえていませんが、縦軸を作るとcmというのはmmの何倍だとか、k(キロ)が付くと必ず1000倍であるということをとらえていく学習になっています。

 

特定の教科や時間が作られたわけではない

三つ目の特徴の「特定の教科が作られたわけではない」についてですが、先ほど兼宗先生からお話があったように、学習指導要領に例示された単元だけでなく、多様な教科・学年・単元で取り入れることが可能、つまり、どこでどのようにやってもよいということになったので、例えば英語や国語の中でもよいということです。さらに、教科学習とは別のところでやってもよいというレベルCというものもあります。こういったところが、小学校のプログラミング教育の特徴です。

 

 

図形の拡大・縮小の学習にプログラミングを取り入れる

ここまでざっと概要をお話ししましたが、具体的な事例を一つお話しします。小学校の特異性の三つを全て含んだ事例を探してみました。

 

こちらは、コンピュータを使わずにコンピュータの考え方を教科教育の中で活用する授業です。6年算数の、拡大図・縮図という単元に、条件分岐の考え方を入れて、教科の学習を深めるためにプログラミングを活用した事例です。

 

まず、子どもたちにこちらの問題を提示します。1の図形を基準にしたとき、1~5のどれが拡大図で、どれが縮図で、どれが合同か、というものです。ちょっと意地悪な問題です。

 

子どもたちは、「多分5は違う」とか「3は絶対拡大だ」みたいなことを言い始めます。そこでわざと「何で3は『絶対』なの? 5は『多分』でいいのかな?」と声をかけると、子どもたちはどこに注目したらよいか、考え始めます。そして、「この条件に合えば拡大図」と言える見定めの視点や手順をフローチャートに可視化し、そのフローチャートを使うことで根拠をもって、どれが拡大図であるかを判断できるようにするということを目標に学習を進めました。

 

当然、子どもたちの方から、フローチャートを使うということは出てくることはないので、ここではまず先生の方から、「フローチャートという便利なものがあるんだよ」ということを提示してからの学習になります。

 

余談ですが、こういう活動をしていると、そのうちにふだんの授業の中でも、子どもの方から「先生、それ、フローでやったほうがいいんじゃない」と言い出すこともあります。しかし、最初からそれはないんで、最初はまずこちらから提示していきます。

 

子どもたちは、最初にどこから・何を見れば拡大図といえるのかということを、話し合っていきます。そうすると、「角度が全て等しかったら」とか「辺の長さの比が1対1だったら」といった数学的な見方・考え方を働かせた議論が生まれてきます。そして、それらを、分岐の考え方で振り分けていくという活動につなぎます。

 

完成したフローチャートが下図です。対応する角度が全て同じでなかったら、その時点ですでに合同でも拡大・縮小でもなく、また対応する角度が全て同じだったとしても、辺の比が違かったらまた違うというように、視点と順番の階層が明らかになってくるわけです。

 

 

最終的に、このフローチャートでイエス・ノーを繰り返していくことで、拡大図か縮小図か、合同か、それのどれでもないのか、ということをきちんと根拠を持って判断していくことができます。子どもたちは、こういった活動を通して、「なぜこれは拡大図ですか」と問われたときに、「対応する全ての角が等しく、対応する辺の比が1以上であるから」といういう解答ができるようになります。

 

情報のご専門の先生方から見たら、このフローチャートについてたくさんのご意見があると思います。しかし、ここはあくまで小学生の考え方をフローチャートの形で表現したものなので、形式にこだわると、活動の目的がきれいなフローチャートを書く方に移ってしまいます。ですから、小学校のこの段階では、多少ごちゃごちゃしていても、考え方がきちんと合っていればそれで良しとしていくのも大切ではないかと思います。実際、無理に直そうとすると、かえっておかしくなってしまうということもよくあります。

 

 「分岐」がお掃除ロボットの中でも使われていることに気付かせる

ただ、ここで終わってしまうと、単なる算数の授業になってしまいます。先ほどもお話ししたように、身近な生活の中でコンピュータが活用されているということを、子どもたちに理解させるために、私の場合はお掃除ロボットを使いました。

 

「お掃除ロボットだって、今みんながやったように、条件分岐を使っているんだよ。どんなところで使っていると思うか」と聞くと、「前にごみがあったら拾う、ごみがなかったら拾わない」とか、「壁にぶつかりそうになったら右を向くとか、ぶつからないような仕組みになっているんだよ」なんて言いながら、分岐がお掃除ロボットの中で使われていることを理解していきました。さらに、実際に使ってみないことには良さがわかりませんから、問題を解くときに、自分たちで作ったフローを使いながら問題を解いてみるという活動を行いました。

 

授業が終わった後の子どもたちの振り返りです。対応する辺の長さの比が、「1より大きい」「1より小さい値」「1」という共通しているところがあること、また、「辺の長さより、角度から調べたほうが早い」という、スムーズに見分ける方法の工夫のようなところへの気付きがありました。

これらは、算数科における、知識・理解、および思考力・判断力・表現力等につながる振り返りになっています。

 

 

また、フローチャートを使ったことで、「人間とコンピュータが同じ考えを使っているんだね。私たちも無意識で使っていたんだね」と、コンピュータや条件分岐の考え方について理解したり、「フローチャートは他の場合でも使えるね」という、利便性のようなことへの理解にもつながりました。これらはプログラミング教育の目標である知識・理解や思考力・判断力・表現力に関係していると見ることができます。

 

 

このように、今ご紹介した小学校6年算数の拡大図・縮図では、プログラミング的思考を活用して、分岐を用いたフローチャートを作ることで、教科の学習の理解を深めることができました。

 

 

プログラム的思考を教科目標達成の核になるように設定する

「教科の理解を深めるためのプログラミング的思考」というところが、小学校のプログラミング教育の目標ですが、教科の目標とプログラミングに関わる目標とを両立させる必要性、難しさが存在します。しかし、この拡大図・縮小図のように、プログラム的思考を教科目標達成の核になるように設定していけば、上手に教科の学習の中で取り入れていくのではないかと思っています。

 

小学校段階で大切なのは、コンピュータの考え方やコンピュータの働きについて理解し、気付いていくということです。そして何より、コンピュータに慣れ親しみ、楽しんでいくことが大切です。そうすることで、中学校・高校へとつなげていく土台にすることができると思います。そのためには、まずわれわれ教員が、子どもたちとともに楽しむという姿勢が、大切ではないかと痛感しています。

 

情報処理学会第81回全国大会 シンポジウム

「小中高で必修化されたプログラミング教育 〜高校は『情報I』『情報II』が新設へ」より