【教育】2020年プログラミング教育が必須になる前に知っておくべきこと

 

f:id:PSYuki:20170318233202j:plain

こんばんは。ツムさんです。

 

2020年に小学校のカリキュラムに

 

「プログラミング」

 

が必須科目で加わります。

 

 

 

 

プログラミング授業の大きな誤解

「プログラミングってどんなイメージ」

 

と聞くと、

 

「パソコンをうまく操作できるイメージ」

 

と回答する親御さんが多いですが、小学校のプログラミングの授業はパソコンの達人を育てることを目的にしていないので、これは完全な誤解です。

 

文部科学省のホームページに「小学校段階におけるプログラミング教育の在り方について(議論の取りまとめ)」が掲載されているので紹介します。

 

小学校段階におけるプログラミング教育については、学校と民間が連携した意欲的な取組が広がりつつある一方で、コーディング(プログラミング言語を用いた記述方法)を覚えることがプログラミング教育の目的であるとの誤解が広がりつつあるのではないかとの指摘もある。“小さいうちにコーディングを覚えさせないと子供が将来苦労するのではないか”といった保護者の心理からの過熱ぶりや、反対に“コーディングは時代によって変わるから、プログラミング教育に時間をかけることは全くの無駄ではないか”といった反応も、こうした誤解に基づくものではないかと考えられる。

 

コーディング(coding)が出来るかどうかは、将来苦労するかどうかに全く関係がないです。コーディングはあるプログラミング言語を用いてプログラムそのものを書くことに他ならないですが、それはあくまで実現したいことの「手段」でしかなくて、一般的な用途のプログラムにおけるコーディングは「目的」にならないからです。

 

何かしら作りたいものやサービスがあって、それを実現するためにコーディングをするということです。

 

この場合、コーディングは1つの能力になるので、苦手な子供もいれば得意な子供もいるわけで、丁度野球やサッカーなどのスポーツが得意な子供と苦手な子供がいるのと同じです。

 

言い方を変えると、コーディングが出来ないと世の中のソフトウェアに支えられるサービスを創り出すことはできないのか。ということになりますが、そんなことは決してありません。コーディングそのものを職業としない限り、コーディングは得意な人に任せてしまえばよいわけです。

 

だから、プログラミングの成績が悪くても気にする必要は全くないです。体育や美術の成績が悪いのと同じで、単にその子に向いていないだけです。

プログラミング授業の目的

結局、プログラミングって何のために学ぶのか?

 

ということについては、 色々な考え方があると思いますが、以下の3つが大きな目的だと思って差し支えありません。

 

  1. 世の中を支えるソフトウェア(プログラム)技術がどういったものかを学ぶ
  2. プログラムがどうやって動くのかを学ぶ
  3. プログラムを組み立てるためにどのような考え方が必要になるのかを学ぶ

 

1についての最大の疑問はソフトウェアにはどんなものがあるのか?ということですよね。WiiやPlayStationのゲームソフトは勿論、スマホや冷蔵庫、エアコンやテレビ、車などなど、世の中のあらゆるものがソフトウェア(プログラム)を使って動いています。

ソフトウェアは直接「目に見えない」ものだからこそ、その存在をしっかり認識するところからスタートすべきです。

 

2については、小学校のカリキュラムでは細かな部分を教えるのは難しいかもしれません。一言でいえば、ハードウェアありきのソフトウェア(プログラム)ということになるのですが、私たちがソフトウェア(プログラム)の恩恵を受けるためには、人とソフトウェアの接点としてのハードウェア(=物質的な物)が必要になるということです。

 

このハードウェアには、スマホを例に挙げると、CPUだったりディスプレイだったりメモリだったりするわけですが、このようなハードウェアとソフトウェア(プログラム)が連動することで世の中のサービスが形作られているというわけです。

 

1や2でソフトウェア(プログラム)技術の位置づけを学んだのちに、プログラムを実際に作ってみるというSTEPに進むのが良いです。

非常に回りくどいですが、世の中の技術者(エンジニアと呼ばれる人々)は、ものすごくざっくり行ってしまうと「ハードウェアエンジニア」と「ソフトウェアエンジニア」に分かれていて、この間には目に見えない大きな壁が存在しています。

この壁のせいで、本来、ハードウェアとソフトウェアは両輪として回らなければならないのですが、ぎくしゃくした動作となってしまって、結果的に望んだサービスや製品を作ることができなかったという事例が非常に多いです。

ソフトウェア(プログラム)エンジニアはハードウェアのことをもっと理解すべきだし、ハードウェアエンジニアもソフトウェアのことを学ぶべきです。

 

ソフトウェアが必要になる背景を学んでから、3のステップで、実際にプログラミングに触るようにすると学習の意欲も変わってくると思います。

 

プログラムを組み立てる(コーディングする)ために必要な考え方

小学校のカリキュラムで教えることとしては、

 

「逐次処理」

 

の概念で十分です。

なぜなら、世の中の数多のプログラミング言語で共通の概念がこの「逐次処理」だからです。C言語やJavaなど言語によっての特色はもちろんありますが、この「逐次処理」がない言語というものは存在しません。

 

「逐次処理」は、言葉のとおり順番に処理する実行形式のことで、

A=A+1

B=B+2

C=A+B

という計算を上から順番に実行していきます。

A=0,B=0,C=0でこのプログラムをスタートすると、

A=1

B=2

C=3

という計算結果が求まります。

 

「えっ?これだけ?」

 

と思うかもしれませんが、

 

これだけです。

 

この3つの式が、そのままコンピュータが理解できるプログラムへ変換されて処理されます。スマホのパズドラとか、ポケモンGoといったゲームもすごくざっくり言ってしまうと上のような「計算」を正しい順番でひたすら計算しているだけです。

 

 何故この概念が重要かと言えば、「順番に処理をする」ことが重要ではなくて、「正しい順番で処理をする」ことが重要になります。

 

「正しい」って何さ?

 

ってことになりますが、

先の例で言うと、

 

最終的にはCの答えを求めなければならないので、当然、AやBの答えを先に求めなければいけません。

 

C=A+B

A=A+1

B=B+1

 

と書いて上から「順番に実行」しようとしても、Cを求めようにもAやBの答えは未だ求まっていないためにCを計算しようがないのです。

 

「正しい」というのはこういう意味です。

 

プログラムは書く人が「正しく」書いてあげないとそもそも動かすことすらできないということです。

 

C=A+B

A=A+1

B=B+1

 

 

ではエラーとなってしまって、正しいCの値は求まりませんが、

 

A=A+1

B=B+1

C=A+B

 

 

B=B+1

A=A+1

C=A+B

 

と書いてあげると、ちゃんとCを求めてくれます。

このように計算に必要な論理的な正しさ(AやBを求めてCを求める)という考え方がプログラムを作るためには必要になります。

 

2020年に向けて

私の経験ですが、私は1978年(昭和53年)生まれで、中学校3年生(1993)のときに初めてプログラミングに触りました。

当時は富士通のパソコン(日本のパソコンメーカーが全盛期の頃です)でBASICという非常にシンプルなプログラミング環境だったのですが、中学生の興味を引くには十分で、体育や美術が苦手な子がプログラムの授業になると一躍ヒーロー(私ではないです)みたいなこともあって、非常に楽しかった思い出があります。

 

その当時にしては、うちの中学校はなかなか先進的な取り組みをしてたんだなぁと思うわけですが、BASICというプログラミング環境は、今のプログラミング環境を基準にするととんでもない「玄人向き(ただし初心者対象)」でした。真っ黒なスクリーンにプロンプトが点滅していて、全部英単語の命令で入力するという、もちろん中学英語なら十分わかるものなのですが、うまく動かないときの「解析」には苦労したものです。

そういった苦労もひっくるめて、プログラミングの授業はとても面白かったのですが、今の子供たちが感じる面白さにも共通のものがあると思います。

 

私たちの世代よりも今の子供たちが劣っていることは決してないはずで、1993年当時んの中学生がBASICというむちゃくちゃ素っ気ない環境でも使うことができたという事実からすれば、今の小学生が使うことになるリッチな開発環境がかえってプログラミングの目的を見失わせることがないように、学ぶ環境はハイテクになっても教育現場や親は、子供が面白いと思えるツボをうまく見つけてあげることが必要です。