小学校でのプログラミングについて

小学校でプログラミングを教える意図はどこにあるのか?それを探るべく、下記のサイトを見てみました。

小学校段階におけるプログラミング教育の在り方について(議論の取りまとめ)

(平成28年6月16日 小学校段階における論理的思考力や創造性、問題解決能力等の育成とプログラミング教育に関する有識者会議)

内容が多岐に渡っているので、今後何回かに分けて見て行こうと思います。また、プログラミングの導入を強く推し進めたい人たちの報告書であろうことから、これらの内容が全て反映されるわけではなく、多少話が盛られていると注意しながらも、方向性としてこういうことがしたいのだろうな、ということは見えてきます。

まず初めに、最も基本的なことであり、かつ、最も重要な点として、「プログラミング言語」と「プログラミング的思考」を理解します。

プログラミング言語とは

プログラミング言語は、このサイトではscratchを使っていますが、世の中にはBASIC、C言語、javascriptなど、多種多様な言語があります。それぞれ特徴があり、インターネット環境に適した言語であったり、ゲーム作成に適した言語であったりします。これらの言語を小学生が習う必要があるのか?どの言語が将来役に立つのか?という議論は不毛なことです。何故なら、これらの言語は実現したい目的があった上で選択されるものであり、多人数で広く教える学校教育に向いたものではありません。また、言語の流行り廃りもあるため、現在主流の言語が10年後にもまだ主流である保障はありません。

プログラミング的思考とは

プログラミング的思考とは、プログラミング言語によらず、プログラムを作成するにあたって、どのような考え方、理論、方法を用いて組み立てていくかを思考することです。これをアルゴリズムと言いますが、ある目的に対して、それを実現するための方法はいくつもあり、その方法がアルゴリズムです。

例えば、並べ替え(ソート)を考えてみましょう。

ここに数字が5つあったとして、それを小さい順に並べ替えます。あなたはどうやって並べ替えますか?

・ざっと5つ見て、まず1番小さいのを選んで、次に2番目に小さいの選んで・・を繰りかえす。

・最初の数を真ん中に置いて、次の数字が最初の数より小さいか大きいかを比較する・・・を繰り返す。

・最初の2つを比較して大小並べ替えて、次の2つを比較して・・・を繰り返す。

など、結果は同じでもそれまでのアプローチは様々な方法があります。

これらは考え方であって、プログラミング言語による差は関係なく、共通したものであることが分かります。

つまり、言語は何でもよく、とにかく何かしらの言語で上記のような様々なアルゴリズムが考えられるようにするのが、小学校でプログラミングを学ぶ目的ということです。

プログラミングとは

ここで、プログラミングを考えてみます。

プログラミングで行っていることを最もシンプルにしたとき、四則演算を除くと、分岐(if)と繰返し(Loop,For)しかありません。これに入力と出力を組み合わせているだけです。

このサイトに載せている動画のプログラムを分解して見てみましょう。

入力と聞くと、センサーなどを思い浮かべるかもしれませんが、パソコンのマウスやキーボードもプログラムから見れば入力装置の一つに過ぎません。同じく出力も、ディスプレイに表示したり、音を出したりするのも出力装置です。この入出力の部分をプログラムから除くと、「もし・・なら」の分岐と、「ずっと・・・」や「・・まで繰り返す」の繰返し命令だけで出来ています。

スマホのゲームにしても、タッチの仕方を工夫した入力方法と、凝った表現をした画面の出力方法を除いて考えると、条件を判定して得点をもらう事の繰り返ししかしていないことが解ります。

これを理解すれば、何か1つの言語でもマスターしてアルゴリズムを組み立てることができれば、他の言語で分岐と繰返しの方法を学べば、その言語でもプログラミングができるということです。

言語のマスターが簡単で、アルゴリズムへのアプローチが近いのがscratchを導入する理由なのでしょう。

プログラミング的思考の目的

プログラミング的思考を身に付ける目的は何でしょうか?プログラミング的思考の有無で何が変わるのでしょうか?

これまでの学習方法とプログラミングの導入による学習で違うこととして一般には、答えを出すだけの学習と、答えを導くまでの考え方の学習の違いと言われます。先の並べ替えの例のように、目的があって、答えが出るが、その答えを出すまでの道のりは幾つもの可能性があるということです。

一般の社会において、何か目的を達成したいとか、何か問題を解決したいとしたとき、そこまでのアプローチは一つではありません。幾つもの方法を考えて、試してみて、失敗して、改善してを繰り返します。この動きはプログラミングと同じです。ある目的に対してアルゴリズムを考えプログラミングをする。でもうまく動かない。プログラムの記述が違うのか?アルゴリズムの理論が違うのか?別のアルゴリズムはどうか?そうやってプログラムを完成させていくことが、問題解決能力の育成になります。

会社などで、問題解決能力の高い人がいます。こういう人はプログラミング的思考を身に付けていると思います。何かあったとき、その原因についてあらゆる可能性を考え、それらについて解決方法を様々な方向から考えて、いろいろ試して答えを導いてくる。問題と答えを解いたことがしかない人は、この考え方の拡大ができないので、問題に対して自分が答えを持っていない、あるいは思いついた方法が正解でない場合に、すぐに諦めてしまうのではないでしょうか?後者のいわゆるマニュアル型の人達は、これまでの大量生産でコスト縮減による大量消費という従来の社会では通用しましたが、現在は少量多品種で今まで世の中に無かったものを考えた人が勝つ社会では通用しません。ましてやそういう仕事は真っ先にロボットに置き換わられてしまいます。

 

プログラミング的思考は、身に付けるべき最低限必要な能力である。しかし、それで十分かというと、既にそれでは足りない。それが今の子供たちが置かれている状態なのです。

 

サイト立ち上げ

はじめまして、動画スクールの塾長です。

スクールとか塾長とか書いていますが、私一人でやっているサイトで、動画スクールと名付けましたが、ネットの中だけで、これからコンテンツを増やして行こうとしているところです。

基本的にはYouTubeへの動画投稿をメインに、こちらではそのフォローや、それ以外の諸々のことをやっていく予定です。

いろいろ試行錯誤の真っ最中ですが、サイトやコンテンツがだんだん充実していく様子も楽しんでもらえたら幸いです。