2020年からプログラミング必修化されることは皆さんご存知だと思います。
文部科学省から出された「学習指導要領解説」によると「プログラミング的思考」を育むためというのが一つの指針としてあるようです。
ですが、この「プログラミング的思考」とは何なのでしょうか?
また、これを育むことで将来的にどんな訳にたつのでしょうか?
プログラミング的思考って?
文部科学省によるとプログラミング的思考法とは下記と定義しています。
自分が意図する一連の活動を実現するために、どのような動きの組合せが必要であり、一つ一つの動きに対応した記号を、どのように組み合わせたらいいのか、記号の組合せをどのように改善していけば、より意図した活動に近づくのか、といったことを論理的に考えていく力
引用元:http://www.mext.go.jp/b_menu/shingi/chukyo/chukyo3/074/siryo/__icsFiles/afieldfile/2016/07/07/1373891_5_1_1.pdf
このプログラミング的思考をするためには、物事をより細分化し、それを組み合わせていく考え方が必要なようです。
何故、このような思考法が必要なんでしょうか?
それは、何か問題があった際に、物事は細分化すればするほど問題が顕在化し解決しやすくなるためです。
具体的に細分化して問題を解いてみましょう。料理を例にやってみます。
貴方がお味噌汁を作ったとします。でも、味が濃くて美味しくない。どうにかしてこのお味噌汁をおいしくしたい
じゃあ、料理の工程の「どこ」を「どのように」変えたら良いだろうか?
そのためにまずは、「どこ」の一覧を抽出しなければいけません。
「どこ」の一覧とは、料理の工程を細分化したものになるので、まずはお味噌汁のレシピを細分化します。
お味噌汁のレシピを細分化すると下記になる。
- 包丁を用意する
- まな板を用意する
- ネギを切る。
- 豆腐を切る。
- 鍋を用意する。
- 水の量を図る。
- 鍋に水を入れる。
- 6で図った水の量に対して適切なだしの量を測る
- 鍋にだしを入れる。
- 鍋をコンロの上に乗せる。
- コンロに火をつける。
- 沸騰するまで待つ。
- 鍋にネギに入れる。
- 1分煮る。
- 鍋に豆腐を入れる。
- 1分煮る。
- コンロの火を止める。
- 6で図った水の量に対して適切な味噌の量を測る
- 味噌を溶き入れる
- コンロの火をつける
- 沸騰直前まで待つ。
- コンロの火を止める。
次にこの中で、どの工程を見直したらよいかを考える。
今回の問題は味が濃いことなので、恐らく問題があるとしたら下記のどれかの工程だろう。
- 6で図った水の量に対して適切なだしの量を測る
- 沸騰するまで待つ。
- 1分煮る。
- 6で図った水の量に対して適切な味噌の量を測る
- 沸騰直前まで待つ。
それぞれ、下記のような要因で味が濃くなる可能性が考えられる。
- 6で図った水の量に対して適切なだしの量を測る。
=>だしの量が多すぎる - 沸騰するまで待つ。
=>沸騰してもしばらく放置しているので、水が蒸発してしまっている。 - 1分煮る。
=>1分以上煮て水が蒸発してしまっている。 - 6で図った水の量に対して適切な味噌の量を測る。
=>味噌の量が多すぎる
次に「どのように」変えるのかを考えよう。おそらく下記のようになるでしょうか。
- 6で図った水の量に対して適切なだしの量を測る。
=>だしの量が多すぎる
=>だしの量を少なくする。 - 沸騰するまで待つ。
=>沸騰してもしばらく放置しているので、水が蒸発してしまっている。
=>沸騰したらすぐ次の工程に進む。 - 1分煮る。
=>1分以上煮て水が蒸発してしまっている。
=>1分以上煮ないようにタイマーをセットする。 - 6で図った水の量に対して適切な味噌の量を測る。
=>味噌の量が多すぎる
=>味噌の量を減らす
これで、「どこ」を「どのように」変えたら良いかが具体的に分かりました。
次にお味噌汁を作る時は、上記のいずれかを試して作ってみます。もし、それで味が濃い問題が解決できれば、次回から美味しいお味噌汁ができるし、解決できなければ、他の可能性考えてみます。
恐らく皆さんは、こんなの誰だってやってるわ!と思うだろう。
でも、プログラマーがやっていることは上記と似たようなことなんです。
上記の例だと細分化しただけですが、プログラマーはより問題をシンプルにするために、細分化に加え、共通化、繰り返し、条件分岐ができる部分を見つけ出します。
そして、それらを組み合わせる事で、一連の動作を実現させるんです。
このように、「物事を細分化し、機能毎に分割し、組み合わせをする」この部分さえできるようになれば、プログラミングなんて簡単です。
あとはそれをプログラミング言語で書くだけです。
プログラミングスクールには通わせるべきか?
小学校段階におけるプログラミング教育については、コーディング(プログラミング言語を用いた記述方法)を覚えることがプログラミング教育の目的であるとの誤解が広がりつつあるのではないかとの指摘もある。
引用元:http://www.mext.go.jp/b_menu/shingi/chukyo/chukyo3/074/siryo/__icsFiles/afieldfile/2016/07/07/1373891_5_1_1.pdf
上記にあるように、小学校でプログラミング言語を授業で学ぶ可能性は低いでしょう。
ただ、「表現しているものを、プログラミングを通じて動かすことにより、新たな発想や構想を生み出す学び」という項目もあるようなので、プログラミング言語を使用しないだけで、もしかしたらScratchのような教材で、ビジュアルプログラミングを学んで行くのかもしれません。
※Scratchとはビジュアルプログラミングの一つで、プログラミング言語を使用せず、視覚的にブロック等を使用してロジックを組み立てて行くことで、プログラミングを実現します。
他の子に遅れを取らないようにプログラミングスクールに通わせたい。と思っている親御さんも多いと思います。
ですが、プログラミング言語を学ぶ事は小学生ではなさそうなので、そこは考えなくて良いと思います。
お子さんが小学校のプログラミングの授業で興味を持ったりしたら、通わせてあげる位で良いかなと思います。
まとめ
自分はエンジニアで、プログラミングもしますが、だからってプログラミング的思考を現実世界でできているかと言われるとできていない部分もあると思います。
それは、僕たち大人も意識してやっていくべきかなと思っています。
でも、それを小学生から学ぶことで思考法を身に着けさせ、無意識にプログラミング的思考で物事を分析することができれば、将来的には思考力はかなり向上している筈です。
さらに、プログラミング教育の目的はそれだけではなくて、情報を調べて活用する力、発信する力、また情報モラルのこと等も含め体系的に学んでいくようです。
これからは、僕たち大人が学んでいないことを、子どもたちが学び始めます。
ですので、僕たち大人も子供と共に情報のアップデートをしていかないと時代に取り残されてしまうでしょう。
そうならないように、子供と共に学んでいく姿勢を持ちたいですね。