最近、子どものプログラミング教育の対象年齢が年々低下しているように感じます。一方で、小学低学年の子どもたちがプログラミングの概念まで理解できる内容は、発達段階の観点から限定的(「プログラムに触れる」という点においては非常に意義あることではありますが、プログラミング「スキルを身につける」という点において)と言えるのも事実です。
今回は、子どもの発達段階という観点から、小学生のプログラミング学習について、考えてみたいと思います。
理解できることは限定的かもしれない
以前、「プログラミング学習で挫折しないためには?」という記事の中で、「基本的な概念を理解した上で、実際に自分でプログラムを作ってみることが重要」と書きました。2013年の開校時から子どもたちにロボット・プログラミングを学ぶ場を提供してきた経験から、この「概念を理解する」という点で、小学低学年のほとんどの子どもにとって、プログラミングについて本当の意味で理解できる内容は限定されるということです。
概念を理解する
概念を理解するとはどういうことなのでしょうか。算数の割り算を考えてみましょう。算数(数学)に苦手意識がある場合、遡っていくと割り算の概念を理解できていない場合、割り算の概念を理解するところで躓いていることが多いです。割り算の計算はできるが、どっちをどっちで割ったらよいのか悩むことがある場合、割り算が何をしているのかを完全に理解していない可能性があります。分数の割り算で「割る数の分母と分子をひっくり返して掛ける」ことの意味を説明できる生徒は中学生でも少ないでしょう。
ロボット制作に関して言えば、ギア比の計算はほとんどの小学低学年の子どもにとって難しいようです。ギア比という聞きなれない言葉であることも関係しているとは思いますが、噛み合っているギアは交互に1歯ずつ進むこと、割り算の概念を理解できていれば、アメの総数と分ける人数から一人当たり何個もらえるかという質問と大差ありません。そして、割り算の概念を理解しないまま学年が進んでしまうと、比が分からない、関数が分からないと、分からないものがどんどん広がってしまう可能性もあります。図形を除くと、小中学校の算数(数学)の得意/不得意は割り算にあるといっても過言ではないとさえ思えます。
話は逸れましたが、要するに、プログラム学習においても概念を理解することはとても重要であり、概念を理解することなしにプログラムを自分で作れるようにはなれないということです。
条件分岐は、なぜか小学低学年には難しい!
プログラムは、基本構造である「順次」、「繰り返し(ループ)」、「条件分岐」の3つを組み合わせることで様々な処理を行うことができます。小学低学年の場合、順次処理であってもステップ数が多くなると難易度が上がります。繰り返し(ループ)も、入れ子の場合は難しく感じることでしょう。特に条件分岐は、場合分けを論理的に理解することが難しく、大人にとっては何てことのないことであっても、なぜが子どもたちには理解が難しいことがあります。これは適性云々ではなく、おそらく発達段階の問題であると思います。
場合分けを論理的に考えることについて、順列を例にみてみましょう。レゴのマインドストームEV3のカラーセンサーは7つの色を判別することができます。左右のセンサーそれぞれが判別する色の順列を考えます。下図のように、左側の色を1つ固定し、右側の色を順番に入れ替えていきます。一通り入れ替えたら、左側の色を入れ替え、同様に右側の色を順番に入れ替え、これを繰り返すことになります。これをプログラム的に考えると、入れ子のループとして記述できます。
![順列](https://tedis-lc.com/wp-content/uploads/2023/02/permutation.png)
複数条件の場合分けでは、こうした「考え方」が必要となりますが。小学低学年の子どもたちが理解することは難しいでしょう。仮にカラーセンサー2個でライントレースをする場合、ロボット左側のセンサーについて、「白」と「黒」の場合があり、それぞれについて「白」と「黒」の場合がありますので、4つに場合分けができます。低学年の子どもたち教える(覚えてもらう)ことは可能ですが、論理的に理解することはほとんどの子どもにとって難しいというのが私が経験上感じていることです。
したがって、低学年の子どもたちが学ぶのは、ステップ数の少ない順次処理、単純な永久ループまたは回数ループということになります。小学5年生くらいから、入れ子のループや条件分岐を学べるようになると考えると、プログラミングの知識としては、小学4年生くらいから始めるのが妥当ではないかというのが私の考えです。
論理的思考と抽象的思考はいつ伸びる?
物事を順序だてて考えるには論理的思考、概念を理解するには抽象的思考が必要です。これらの力が大きく伸びるのは。いつなのでしょうか?さんすう・数学の学習内容を見てみると、「比」は小学6年生で学び、以後関数や中学数学の証明問題など、抽象的なものとなっていきます。このことからも、抽象的思考が必要とされるのは、小学高学年以降ということになるかと思います。
小学低学年で身につけておきたいこと
では、小学低学年のときに、どのようなことを学び、身につけておくのが良いのでしょうか?ロボット・プログラミングという点で考えると、それまでの間は、好奇心や探究心を育む活動をしだり、問題点に自分で気づける観察力を伸ばしたり、丈夫な構造やシンプルなメカニズムを手を動かしながら学ぶのが良いと思います。そして、プログラムの概念をある程度理解できる年齢になってから、プログラムでロボットの動きを制御することに挑戦すればよいのではないでしょうか。ブロックを使ったものづくりもプログラミングも、個々のパーツ・要素を組み合わせて、目的の動作(処理)をするものを作り上げるという点で、どちらも行っていることはとても似ていると思います。
また、発達段階に合わない早すぎる学習は、自信を無くしてしまったり、向いていないと思い込んでしまう原因となりかねません。テディスではこうした経験から、ロボット・サイエンスコースを4年生以上とし、1年目はモーター制御と各種センサーの基本、「順次」と単純な「繰り返し(ループ)」を学び、2年目は条件分岐と様々なループを中心に学びます。そして、3年目以降ロボコンを題材にで基本構造を組み合わせて目的の処理(動作)ができるオリジナルの自律型ロボットの制作に挑戦するようになっています。
もちろん、個人差はありますし、学習を開始する時期についても色々な考え方があるとは思います。
まとめ
現在、プログラミングは5~6歳の子どもたちにも教えられています。一方で、ほとんどの小学低学年以下の子どもたちにとっては、概念を理解するという点で、できることは限定的であり、プログラミングを本当の意味で理解できるようになるのは、小学高学年以降と考えます。
プログラミングという直接的なスキルではなく、論理的思考力や抽象的思考力を伸ばすことが目的の場合、プログラミングだけでなく、ものづくり、パズル、カードゲーム、ロールプレイ、積み木など、論理的思考力や問題解決力、コミュニケーション力を養うのに役立つツールは他にもあります。
実際、プログラミングに限らずモノづくりに関わっていると、抽象化は理解という点で大事ですが、制作するときには具体化も必要なことに気づきます。抽象化と具体化を繰り返す作業であり、このあたりについては今回のテーマと離れてしまいますので、別途整理してみたいと思います。p>